Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.07.2011, 11:58

Pfadfinder: Sprünge optimieren

Hi,

folgende Problemstellung:

Ich habe eine Pointcloud, in welcher die Punkte mehr oder weniger zufällig angeordnet sind (in der Realität kann das auch eine Ansammlung von Polylines sein, aber der Einfachheit halber belasse ich das mal bei Punkten). Die Punkte in dieser Wolke sollen nun optimiert werden, d.h. sie sollen ausgehend von der rechten oberen Ecke in eine Reihenfolge gebracht werden, in der möglichst nur sehr kurze Sprünge zwischen den Punkten ausgeführt werden.

In einem ersten Wurf habe ich das so realisiert, dass einfach immer der zum zuletzt bearbeiteten nächstgelegene, noch nicht neu angeordnete Punkt gesucht wird. Das verkürzt die Sprünge zwischen den Punkten schon enorm, allerdings scheint mir das Ergebnis nicht optimal zu sein. So kann es passieren, dass erst mal alle Punkte in einer Ecke bearbeitet werden, dann aber, um aus dieser Ecke heraus zu kommen, ein sehr großer Sprung ausgeführt werden muss. Hier habe ich das Gefühl, dass es _insgesamt_ noch kürzer ginge, wenn man an manchen Stellen eben nicht den nächstgelegenen Nachbarn sucht, sondern auch mal einen etwas weiter entfernten.

Nur: wie kriege ich die Suche nach so einer Route gebacken? Prinzipiell kann ich nach jeder Suche nach dem nächstgelegenen Punkt ja auch noch nach einem etwas weiter entfernten Punkt suchen, um mit diesem zu ermitteln, wie da das Gesamtergebnis wäre. Problem: ich muss für jeden Punkt UND jede Alternative den kompletten Algorithmus durchlaufen lassen. Das wäre dann prinzipiell für jeden nachfolgenden Punkt auch noch mal notwendig, was den Speicherverbruch und die Rechenzeit explodieren lassen würde. Und dabei weiß ich noch nicht mal, ob es genügt, nur eine alternative Möglichkeit zu untersuchen, prinzipiell können ja auch noch weiter entfernte Punkte interessanter sein.

Welche Alternativen gibt es hier, um so eine Wegoptimierung schneller und weniger Ressourcenaufwändig hinzubekommen?

2

11.07.2011, 12:15

Ich weiß nicht ob dir da vielleicht A* weiterhilft google mal nach a-star. Ist wohl der Best Wegfinde algorithmus den es so gibt.
Wer aufhört besser werden zu wollen hört auf gut zu sein!

aktuelles Projekt:Rickety Racquet

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

3

11.07.2011, 12:17

Das klingt ziemlich stark nach dem Traveling-Salesman-Problem. Nach derzeitigem Wissensstand gibt's dafür keine effiziente Lösung, wenn mans schnell haben will muss man auf Näherungen zurückgreifen. Google sollte da einiges zu ausspucken.
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

4

11.07.2011, 16:27

Klingt auch für mich nach Traveling Salesman. Für sowas ist der Algorithmus Simulated Annealing zu gebrauchen. Danach mal Googlen. Da gibt es keinen Algorithmus der eine optimale Lösung finden kann (je nach Komplexität der Suchlandschaft), aber damit lassen sich gut brauchbare Lösungen finden. Etwas einfacher wären Algorithmen wie Hill Climbing.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

11.07.2011, 17:02

Zum Thema "Simulated Annealing" ...

Hier gibt es ein Applet, welches diesen Algorithmus für das TSP (Traveling Salesman Problem) demonstriert:

http://www.heatonresearch.com/articles/64/page1.html

Werbeanzeige