Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..?

sirbender

Top Contributor
Hallo,

ich suche einen Algorithmus (z.B. Genetischer Algorithmus) mit dem ich z.B. fuer eine gegebene rechteckige Flaeche und einer Anzahl von Objekten die Positionen der Objekte errechnen sodass die Objekte moeglichst den gleichen Abstand haben bzw. einen moeglichst grossen Abstand haben. D.h. es soll "bestraft" werden, wenn sich zwei Objekte nahe kommen.

Ein konkretes Beispiel: Rechteck mit 400x200. 5 Objekte sind optimal angeordnet wenn 4 Objekte in den Ecken zum liegen kommen und ein Objekt im Zentrum. Also:
0,0
400,0
400,200
0,200
200,100 (Zentrum)

Eine andere Loesung die allerdings als schlechter bewertet werden sollte ist z.B.:
0,0
400,0
400,200
0,200
200,0 (Aenderung)

Liegt das Objekt bei 200,100 (Zentrum) hat man 4 Abstaende zu jedem Objekt in der Ecke mit einem Abstand von Diagonale/2 = 223,60.

Liegt das Objekt bei 200,0 hat man 2 Abstaende von 200. Diese zwei Abstaende von 200 sollten uenguenstiger sein als 4 Abstaende mit 223,60. Ehrlich gesagt sollte schon ein Abstand von 200 unguenstiger sein als 4 Abstaende von 223,60.

Ich bin mir ziemlich sicher, dass es da gute Algorithmen gibt die getestet sind fuer das Problem. Auch wohl Genetische Algorithmen. Ich finde allerdings nichts mit Google (vielleicht such ich auch falsch). Ich habe das Problem schon implementiert mit Genetischen Algorithmen aber so richtig kann ich nicht alle simplen Faelle (geringe Anzahl von Objekten) von optimalen Anordnungen finden. Jetzt wuerde ich meine Implementierung gerne mit einer ausgereiften Loesung vergleichen.
 

Joose

Top Contributor
Hm ... laut deiner Beschreibung sollen die Objekte möglichst den gleichen Abstand haben. Den gleichen Abstand zu was? Einfach nur zueinander?
Dann ist dein Beispiel nicht gerade gut gewählt: Zur Mitte haben die Ecke zwar den gleichen Abstand, die Ecken zueinander haben aber einen sehr großen bzw. sehr kleinen Abstand.

Bis zu 3 Objekte kannst du im gleichen Abstand zueinander positionieren. Bei mehr als 3 Objekten ist das nicht mehr möglich.
Hier wäre die optimalste Variante (wahrscheinlich) immer nach dem gleichen Schema: eine symmetrische Figur mit X Ecken. Wobei die Ecken alle im gleichen Abstand zu einander sind und die Anzahl der Anzahl der Objekte entspricht, -1 (der Mittelpunkt der Figur).
 

sirbender

Top Contributor
Danke fuer die Antwort. Genau es geht um den Abstand der Objekte zueinander. Und es ist klar, dass man bei einer gegebenen Flaeche und Anzahl von Objekten nie eine Loesung finden kann, die fuer alle Objekte zueinander den gleichen Abstand findet. Es soll auch nicht die Form der Flaeche optimiert werden, sodass eine Loesung gefunden wird wo alle Objekte den gleichen Abstand zueinander haben.

Vielmehr geht es darum fuer eine gegebene Flaeche (z.B. Rechteck) und Anzahl von Objekten eine Loesung findet bei der sehr nahe Abstaende von Objekten zueinander vermieden werden. Um mal ein konkretes Beispiel zu nennen: Es ist besser 10 Abstaende von 5 Meter zu haben anstatt 9 Abstaende mit 6 Metern und 1 Abstand mit 4 Metern. Diese 4 Meter sollten wegoptimiert werden. Ganz grosse Abstaende sind komplett unwichtig. Das wichtige ist, dass einzelne kleine Abstaende vermieden werden.

Das wichtigste ist jedoch wie ich das optimiere. Was ich oben beschrieben habe ist, wie das Ergebnis aussehen soll. Also bei einem Genetic Algorithm wie die Fitness Function sein soll.
Was fehlt ist wie das Chromosom kodiert wird, wie Crossover und Mutation ablaufen soll. Bzw. wenn man keine Genetischen Algorithmen verwendet, wie die Optimierung an sich ablaufen soll. Das verstehe ich nicht ganz.
 

mrBrown

Super-Moderator
Mitarbeiter
Das wichtigste ist jedoch wie ich das optimiere. Was ich oben beschrieben habe ist, wie das Ergebnis aussehen soll. Also bei einem Genetic Algorithm wie die Fitness Function sein soll.
Was fehlt ist wie das Chromosom kodiert wird, wie Crossover und Mutation ablaufen soll. Bzw. wenn man keine Genetischen Algorithmen verwendet, wie die Optimierung an sich ablaufen soll. Das verstehe ich nicht ganz.

Wenn du's einfach haben willst, kodierst du das nicht noch mal extra als "Genotyp", sondern arbeitest mit den Daten die du hast, also zB eine Liste der Objekte.

Mutation wäre dann, Objekte zufällig verschieben, Rekombination zwei Listen vermischen (uU aufpassen auf duplizierte Objekte), und Selektion der kleinste Abstand zweier Objekte zueinander.

Wenn man die Funktionen vernünftig trennt, kann man später einzelne Sachen austauschen, zB mit unterschiedlicher Kodierung für Geno- und Phänotyp
 

sirbender

Top Contributor
Was du beschreibst habe ich so alles schon ausprobiert. Auch sehr viel konkreter und mit vielen unterschiedlichen Settings. Also nur minimal verschieben beim Mutieren oder sehr viel, usw.

Leider ist das Ergebnis nicht so optimal wie ich es mir wuensche. Vor allem bei kleinen Anzahlen von Objekten faellt es einem als Mensch schnell auf, dass das nicht die optimale Loesung ist und man "sieht" schnell eine bessere.

Was ich suche ist eine wirklich durchdachte und funktionierende Loesung bzw. ein Ansatz der sehr konkret ist und der einem sagt, warum es auf diese oder jene Art zu einem sehr guten Resultat fuehrt.
 

mrBrown

Super-Moderator
Mitarbeiter
Was du beschreibst habe ich so alles schon ausprobiert. Auch sehr viel konkreter und mit vielen unterschiedlichen Settings. Also nur minimal verschieben beim Mutieren oder sehr viel, usw.

Leider ist das Ergebnis nicht so optimal wie ich es mir wuensche. Vor allem bei kleinen Anzahlen von Objekten faellt es einem als Mensch schnell auf, dass das nicht die optimale Loesung ist und man "sieht" schnell eine bessere.

Was ich suche ist eine wirklich durchdachte und funktionierende Loesung bzw. ein Ansatz der sehr konkret ist und der einem sagt, warum es auf diese oder jene Art zu einem sehr guten Resultat fuehrt.

Mit evolutionären/gentischen Algorithmen findest du auch nicht immer das globale Optimum.
Das klingt ein bisschen so, als ob der ein einem lokalem Optimum festsaß, im Glücksfall kommt man da mit Rekombination raus, uU aber auch gar nicht, je nachdem wie man das implementiert hat.

Ich kenne auch keine existierende Lösung dafür, vllt willst du ja mal posten, was du gemacht hast, dann könnte man mal nach Fehlen und Verbesserungen gucken
 

JCODA

Top Contributor
Was würdest du von einer Art "Ladungssimulation" halten? Jedes Objekt hat eine positive Ladung und somit stoßen sie sich ab. Das dürfte sich leicht implementieren lassen, ich versuch mich mal daran.
 

JCODA

Top Contributor
Mhhh, schade. Ich dachte ich kann ein altes Spiel umschreiben, sodass das schnell geht, allerdings habe ich diie Schwierigkeit mit den "Rand" falsch eingeschätzt. Anbei das "falsche" Programm.
 

Anhänge

  • AntiGravity.jar
    6,2 KB · Aufrufe: 5

DrZoidberg

Top Contributor
Eine Ladungssimulation könnte tatsächlich funktionieren. Man müsste die Simulation halt nur auf einer Kugeloberfläche ablaufen lassen, so dass man keinen Rand hat. Am Ende friert man die Objekte ein und "schneidet" dann ein rechteckiges Stück aus dieser Oberfläche aus.
 

JCODA

Top Contributor
Eine Ladungssimulation könnte tatsächlich funktionieren. Man müsste die Simulation halt nur auf einer Kugeloberfläche ablaufen lassen, so dass man keinen Rand hat. Am Ende friert man die Objekte ein und "schneidet" dann ein rechteckiges Stück aus dieser Oberfläche aus.
Ja, ich hab auch zunächst an einen Torus gedacht, aber hab mich ein bisschen mit der Abstandsberechnung vertan. Vielleicht schreib programmier ich heute Abend 'was dazu.
 

DrZoidberg

Top Contributor
Ich habe jetzt gemerkt, dass es auch mit einem normalen flachen Koordinatensystem geht. Ich hab da mal was geschrieben. Wenn ein "Teilchen" den Rand erreicht taucht es auf der gegenüberliegenden Seite wieder auf. Abstossende Kräfte verhalten sich nach dem selben Prinzip, d.h. wenn sich z.B. ein Teilchen in der unteren rechten Ecke befindet stösst es ein anderes Teilchen in der linken oberen Ecke ab.
https://jsfiddle.net/q6txo0n7/
Teilchen können einfach mit der Maus platziert werden. Auf der Konsole(F12) wird die Geschwindigkeit der Simulation ausgegeben.
 

sirbender

Top Contributor
Mhhh, schade. Ich dachte ich kann ein altes Spiel umschreiben, sodass das schnell geht, allerdings habe ich diie Schwierigkeit mit den "Rand" falsch eingeschätzt. Anbei das "falsche" Programm.

Ganz interessant nur fuehrt es dann zu eher falschen Ergebnissen wie im angehaengten Screenshot gezeigt. Die Kugel, die sich nicht in der Ecke befindet sollte im Zentrum der Flaeche sein. Komischerweise schafft die Animation es nicht mal die Kugel zwischen den beiden Kugeln in den unteren Ecken zu zentrieren. Ohne den Code gesehen zu haben scheint mit das Verhalten trotzdem seltsam, da die linke untere Kugel die Kugel rechts daneben stark abstossen sollte.
 

Anhänge

  • Screenshot from 2016-03-22 16:59:06.png
    Screenshot from 2016-03-22 16:59:06.png
    6,4 KB · Aufrufe: 31

sirbender

Top Contributor
Ich habe jetzt gemerkt, dass es auch mit einem normalen flachen Koordinatensystem geht. Ich hab da mal was geschrieben. Wenn ein "Teilchen" den Rand erreicht taucht es auf der gegenüberliegenden Seite wieder auf. Abstossende Kräfte verhalten sich nach dem selben Prinzip, d.h. wenn sich z.B. ein Teilchen in der unteren rechten Ecke befindet stösst es ein anderes Teilchen in der linken oberen Ecke ab.
https://jsfiddle.net/q6txo0n7/
Teilchen können einfach mit der Maus platziert werden. Auf der Konsole(F12) wird die Geschwindigkeit der Simulation ausgegeben.

Schaut intressant aus. Das Verhalten stoert aber ein bischen:

"Abstossende Kräfte verhalten sich nach dem selben Prinzip, d.h. wenn sich z.B. ein Teilchen in der unteren rechten Ecke befindet stösst es ein anderes Teilchen in der linken oberen Ecke ab."

Diese Art der Abstossung von Objekten in rechter unterer und linker oberer Ecke sollte nicht sein. Kannst du das Verhalten einfach abstellen?
 

DrZoidberg

Top Contributor
Wenn ich das abstelle, dann verhält sich mein Programm genau so wie das von JCODE. Die meisten Teilchen sammeln sich dann am Rand und in den Ecken, da sie dort von nichts mehr rausgedrückt werden.
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn ich das abstelle, dann verhält sich mein Programm genau so wie das von JCODE. Die meisten Teilchen sammeln sich dann am Rand und in den Ecken, da sie dort von nichts mehr rausgedrückt werden.

Ohne es jetzt ausprobiert zu haben, wie ist's wenn man den Teilchen etwas Zufallsbewegung gibt? Sobald die wieder ein Stückchen vom Rand weg sind, müssten die Richtung Mitte gedruckt werden, sind die einmal in "optimaler" Anordnung, müssten die dann dahin wieder zurückgedrückt werden
 

Blender3D

Top Contributor
Nur ein Gedanke.

Wenn ich das abstelle, dann verhält sich mein Programm genau so wie das von JCODE. Die meisten Teilchen sammeln sich dann am Rand und in den Ecken, da sie dort von nichts mehr rausgedrückt werden.
Wie wäre es damit? Kugel ist 5 Einheiten vom linken Rand entfernt. Kraftvektor der Kugel ist 10 Einheiten lang. Vom rechten Rand wirkt durch den linken Rand ein Kraftvektor der Kugel von 5 Einheiten durch.
Dadurch würden sich die Kugeln, wie im Zentrum der Fläche verhalten.
 

mrBrown

Super-Moderator
Mitarbeiter
Nur ein Gedanke.

Wie wäre es damit? Kugel ist 5 Einheiten vom linken Rand entfernt. Kraftvektor der Kugel ist 10 Einheiten lang. Vom rechten Rand wirkt durch den linken Rand ein Kraftvektor der Kugel von 5 Einheiten durch.
Dadurch würden sich die Kugeln, wie im Zentrum der Fläche verhalten.

Wurd vorher schon vorgeschlagen bzw umgesetzt, ist aber unerwünscht gewesen ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
F Q - Learning Algorithmus Bug Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
N A*-Algorithmus Allgemeine Java-Themen 5
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
F Methoden Algorithmus zur Gegnerfindung (Turnier) Allgemeine Java-Themen 9
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
B Algorithmus Krankenhausbelegung Allgemeine Java-Themen 17
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4
G k nearest neighbor algorithmus Allgemeine Java-Themen 7
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
K Algorithmus Allgemeine Java-Themen 10
C Algorithmus für Array Allgemeine Java-Themen 9
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J fällt euch ein Algorithmus ein? Allgemeine Java-Themen 4
S Algorithmus für Sudoku Allgemeine Java-Themen 17
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
F Algorithmus für Sortierung gesucht Allgemeine Java-Themen 15
T Algorithmus verbessern Allgemeine Java-Themen 10
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3
U Ford-Fulkerson Algorithmus gesucht Allgemeine Java-Themen 1
U Dijkstra Algorithmus gesucht Allgemeine Java-Themen 4
D Algorithmus für die Erkennung fehlerhafter Eingaben Allgemeine Java-Themen 4
I hash-algorithmus Allgemeine Java-Themen 9
schegga_B javax.crypto - Cipher Objekte - Sevice Provider matching? Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben