Forum: PC-Programmierung S: Algorithmus für Weg von A nach B finden. "Autorouter"


von Omburg (Gast)


Lesenswert?

Hallo,

für ein Roboterprojekt möchte ich den Weg von A nach B berechnen. Es ist 
jedoch nicht immer eine Gerade, denn zwischen A und B können auch 
Hindernisse sein. Flächen, die nicht überquert werden dürfen.

Diesen Weg würde ein PC System anhand einer Karte mit den 
eingezeichneten Hindernissen planen. Im Prinzip ein 2D Array. Also wie 
eine Bitmap Grafik mit ausgegrauten Flächen.

Ergebnis wäre also etwas in der Art: Fahre nicht direkt zu B, sondern 
erst zum Punkt C,D,E und dann nach B.

Da ich mit so was nicht der erste bin, suche ich Stichpunkte, nach was 
ich suchen kann.

von Roland P. (pram)


Lesenswert?

Dijkstra-Algorithmus

von Frank (Gast)


Lesenswert?

Geht doch allgemein in Richtung Grapgentheorie.

von Frank (Gast)


Lesenswert?

Graphentheorie meinte ich.

von someone (Gast)


Lesenswert?

A* ist der Algorithmus, der sehr oft für diese Probleme eingesetzt wird 
(http://de.wikipedia.org/wiki/A*-Algorithmus)

von Neuhardt (Gast)


Lesenswert?

Hallo,
die Graphentheorie ist dafür mathematischer Overkill,
nimm den Lee-Algorithmus.

von Daniel F. (df311)


Lesenswert?

Neuhardt schrieb:
> die Graphentheorie ist dafür mathematischer Overkill,

also das musst du mir erklären - die graphentheorie ist ein 
themengebiet, das sich unter anderem mit dem finden von wegen 
beschäftigt (sofern die struktur in der sich wege befinden als graph 
modelliert ist bzw. modelliert werden kann). von daher ist der hinweis 
darauf sicher nicht unangebracht.

klar gibt es einfachere und kompliziertere wege das problem zu lösen - 
was du ja mit einem vorschlag gemacht hast...

von Omburg (Gast)


Lesenswert?

Also die Grafik beim Wiki Eintrag zu A* ist eigentlich genau das, was 
ich suchte. Danke schön.

Auch an die anderen. Welchen ich dann nehme, muss ich noch prüfen. 
Prinzipiell habe ich jetzt aber gute Ansätze.

von Sven B. (scummos)


Lesenswert?

Ich denke für deinen Zweck ist A* besser als der Dijkstra, der ist hier 
wahrscheinlich schneller.

von Arc N. (arc)


Lesenswert?

Falls das Thema generell interessiert:
Ab dem 12.1 läuft auf Coursera wieder AI Planning
https://www.coursera.org/course/aiplan

von Salewski (Gast)


Lesenswert?

Omburg schrieb:
> Also die Grafik beim Wiki Eintrag zu A* ist eigentlich genau das, was
> ich suchte

Nein. Wenn Du ein festes Raster hast, wäre, wie jemand schon schrieb, 
der Lee Maze Router Algorithmus wohl eine gute Wahl. Den nahmen ja auch 
frühe PCB Autorouter, als man noch gerne feste Raster für Strukturen 
verwendet hatte. Das ist einfache Wave Propagation, bei

http://en.wikipedia.org/wiki/Lee_algorithm

steht zwar nicht viel, aber mit Google hatte ich vor langer Zeit doch 
einiges dazu gefunden.

Dijkstra wäre eher etwas, wenn man mit dem Auto irgend wohin fahren 
will, zu jeder Stadt die Entfernung zu einigen Nachbarstädten kennt, und 
den kürzesten Weg sucht. Auch einfach, bring dir aber keine Vorteile. 
Und A* -- nunja ähnlich wie Dijkstra wenn eine Richtung präferiert wird.

von Arc N. (arc)


Lesenswert?

Salewski schrieb:
> Omburg schrieb:
>> Also die Grafik beim Wiki Eintrag zu A* ist eigentlich genau das, was
>> ich suchte
>
> Nein. Wenn Du ein festes Raster hast, wäre, wie jemand schon schrieb,
> der Lee Maze Router Algorithmus wohl eine gute Wahl. Den nahmen ja auch
> frühe PCB Autorouter, als man noch gerne feste Raster für Strukturen
> verwendet hatte. Das ist einfache Wave Propagation, bei
>
> http://en.wikipedia.org/wiki/Lee_algorithm

Was auch nichts anderes als eine Form der Breitensuche ist und unter 
bestimmten Bedingungen ist Dijkstras Algorithmus ebenso eine 
Breitensuche und A* entspricht dem Dijkstra genau dann wenn die 
Heuristik immer h(n) = 0 liefert bzw. ist A* ein verallgemeinerter 
Dijkstra.

> Und A* -- nunja ähnlich wie Dijkstra wenn eine Richtung präferiert wird.

Ziemlich gute, interaktive Seite zum A* ist z.B.
http://www.redblobgames.com/pathfinding/a-star/introduction.html

von Karl H. (kbuchegg)


Lesenswert?

Daniel F. schrieb:
> Neuhardt schrieb:
>> die Graphentheorie ist dafür mathematischer Overkill,
>
> also das musst du mir erklären - die graphentheorie ist ein
> themengebiet, das sich unter anderem mit dem finden von wegen
> beschäftigt (sofern die struktur in der sich wege befinden als graph
> modelliert ist bzw. modelliert werden kann). von daher ist der hinweis
> darauf sicher nicht unangebracht.


Das Hauptproblem dürfte eher sein, dass du von deiner Wohnung keinen 
gerichteten Graphen hast, in dem dann auch noch umherliegende Schuhe als 
Knoten modelliert sind.

Genau das ist aber das Standardproblem von autonomen Robotern: den Weg 
von der Küche ins Bad zu finden, wobei die im Vorraum schlafende Katze 
zu umrunden ist.

Ich wuerde auch mit dem Lee Algo anfangen.

von Omburg (Gast)


Lesenswert?

In meinem Fall weiss ich alles. Kenn also jedes "Hindernis" im Voraus.

von Arc N. (arc)


Lesenswert?

Karl Heinz schrieb:
> Das Hauptproblem dürfte eher sein, dass du von deiner Wohnung keinen
> gerichteten Graphen hast, in dem dann auch noch umherliegende Schuhe als
> Knoten modelliert sind.
>
> Genau das ist aber das Standardproblem von autonomen Robotern: den Weg
> von der Küche ins Bad zu finden, wobei die im Vorraum schlafende Katze
> zu umrunden ist.

Darauf wären dann u.a D* oder D* Lite spezialisiert. Die grob gesagt A* 
für sich dynamisch verändernde Graphen sind.
Eingesetzt wurden die u.a. bei der Urban Challenge und beim Mars Rover.

von dasdasd (Gast)


Lesenswert?

Eine andere einfache Möglichkeit für bekannte "Terrains" wäre dynamische 
programmierung.
Du müsstest nur Gewichte für jede Kachel anlegen und dann einen Weg mit 
minimalem Wert auswählen.

von apr (Gast)


Lesenswert?

RRT – http://en.wikipedia.org/wiki/Rapidly_exploring_random_tree
http://planning.cs.uiuc.edu/

Ansonsten gibt noch als Framework OMPL: http://ompl.kavrakilab.org/ (Was 
aber vermutlich für 2D Navigaten etwas zu viel ist)

Hier würde ich A* bzw. besser D* empfehlen. Alternativ eine Roadmap und 
per Graphensuche die grobe Richtung angehen (dann musst du dir ein 
entsprechendes Modell bauen – irgendwie).

Das wirkliche Problem ist meist ja auch: Zu Beginn des weges im 
Wohnzimmer kennt dein Roboter das Aussehen der Küche halt nicht. Also 
musst du eh umplanen, bei Bedarf.

von Da D. (dieter)


Lesenswert?

dasdasd schrieb:
> Du müsstest nur Gewichte für jede Kachel anlegen und dann einen Weg mit
> minimalem Wert auswählen.

Du bist ja ein ganz schlauer. Wenn dich jemand nach dem Weg zum Bäcker 
fragt, antwortest du dann auch: "Du musst jeder Straße eine Länge 
zuordnen, und dann einfach den kürzesten Weg nehmen."???

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.