Diskussion:A*-Algorithmus/Archiv/1

message: Schöner Artikel, der allerdings noch etwas Straffung gebrauchen kann.Der Abschnitt "Allgemeines" erhält viele Leerfloskeln ("Wie schon oben angedeutet.."), zuviele Einschübe und Wiederholungen ("Der Algorithmus arbeitet hierbei umso zielgerichteter, je besser die Heuristik ist. Hierzu ist es nötig, dass die durch die Heuristik geschätzten Kosten zum Ziel sehr nahe an den tatsächlichen Kosten zum Ziel sind. Das Finden einer guten Heuristik ist somit der wichtigste Schritt, wenn man effizient einen kürzesten Pfad mit Hilfe des A*-Algorithmus finden will.", drei Sätze mit fast gleicher Aussage.)
DoopDoop 12:18, 15. Nov 2005 (CET)
replies: text: Hi! Ist es so besser? Für Hinweise auf weitere Stilblüten bin ich natürlich immer dankbar. Regnaron 12:56, 15. Nov 2005 (CET)
thread_title: Allgemeines

message: Für mich ist die im Abschnitt "Funktionsweise" erwähnte Gleichung völlig uneinsichtig. Deises Wirwarr aus Abständen von v zum Ziel, zu u, der aktuellen Position usw. ist meiner Meinung nach noch zu überarbeiten. Sicher bin ich mir mit meiner Kritik jedoch nicht....
: Hi, danke erstmal für die Meldung. Habe versucht das ganze etwas besser und expliziter zu formulieren, und habe dabei noch festgestellt dass die Gleichung über die du gestolpert bist auch noch falsch war *pfiffel* Kannst du mir mal sagen ob du es nun besser verstehst? Beispiele will ich in dem Abschnitt bewusst noch nicht bringen, weil im nächsten Absatz direkt ein großes Beispiel kommt. Regnaron 20:42, 9. Nov 2005 (CET)
thread_title:  Funktionsweise des A-Stern-Algorithmus 

message: Der A*-Algorithmus dient in der Informatik der Berechnung eines kürzesten Pfades zwischen zwei Knoten in einem Graphen mit positiven Kantengewichten. Er wurde das erste mal 1968 von Peter Hart, Nils Nilson und Bertram Raphael beschrieben.
Nachdem der Artikel nun ca 2 Wochen im Review stand, wo noch das ein oder andere verbessert wurde, denke ich dass er jetzt langsam reif für eine Lesenswert-Kandidatur ist. Als Hauptautor enthalte ich mich natürlich der Stimme. Regnaron 12:48, 19. Nov 2005 (CET)
thread_title:  Abgeschlossene Lesenswert-Diskussion vom 19. Nov 2005 

message: A* beschäftigt sich mit dem Problem "kürzeste Wege" und wurde der Kategorie "Suchalgorithmus" zugeordnet. Ist diese Einordnung tatsächlich korrekt?
Suchalgorithmen beschäftigen sich mit der Suche nach Teilstrings oder Mustern in gegebenen Texten.
Falls Suchalgorithmen allgemein für "Die Suche nach einer Lösung für ein Problem" verstanden werden, müssten (fast) alle Algorithmen als Suchalgorithmen eingeordnet werden.
Ich würde diesen Algorithmus unter die Kategorie "Algorithmus" einordnen, weil sich dort bereits eine große Liste von Algorithmen befindet. --Venthur 21:14, 4. Jan 2006 (CET)
replies: text: Ich gebe zu, dass ich momentan keine genaue Definition des deutschen Begriffes Suchalgorithmus in der Informatik zur Hand habe, aber zumindest in der englischen Literatur werden A*, Dijkstra, BFS und all die anderen unter Search strategies geführt, weswegen ich die beste passende Kategorie als Suchalgorithmen empfinden würde. Um hier noch einmal kurz die Wikipedia selbst zu zitieren: Die Informatik bezeichnet mit Suchverfahren oder Suchalgorithmus einen Algorithmus, der in einem Suchraum nach Mustern oder Objekten mit bestimmten Eigenschaften sucht. Hierrunter fällt meiner Meinung nach auch das finden eines Knotens mit bestimmten Eigenschaften in einem Graph. Und ich glaube die Kategorie Algorithmus selbst sollte eher schrumpfen statt wachsen, damit man über die Sinnhaftigkeit von Kategorien mit 200 Einträgen recht gut streiten kann. Immerhin kann man verdammt viel einfach als Algorithmus beschreiben. Regnaron 10:46, 5. Jan 2006 (CET)
thread_title:  Kategorie "Suchalgo" korrekt? 

message: Ich mogel mich einfach mal dazu und mach krasse Deutsch-Oberlehrer Korrektur ;-) --Thetawave 18:52, 10. Jan 2006 (CET)
replies: text: Sei mutig! :-) --jpp ?! 12:09, 11. Jan 2006 (CET)
thread_title:  Sprachliche Anpassung 

message: Da der Artikel vor einiger Zeit zu den Lesenswerten gewählt wurde, wollte ich ihn demnächst mal bei den Exzellenten vorstellen, ihm aber vorher nochmal ein zweites "Express-Review" gönnen. Insbesondere würde es mich freuen wenn irgendwer noch was zu den Anwendungsgebieten, welche momentan leider noch sehr mager sind, beisteuern könnte. Regnaron 20:24, 14. Dez 2005 (CET)
replies: text: Auch wenn es vielleicht egoistisch klingt: ich hasse C, besonders als Beipielcode. Wie wäre es mit Pseudocode, z.B. im Basic- oder Knuth-Stil? --Phrood 20:59, 14. Dez 2005 (CET)
replies: text:  C-Code? Das ist doch schon Pseudocode :-) Regnaron 21:47, 14. Dez 2005 (CET)
replies: text:  Naja nix gegen Ausführlichkeit aber der Artikel ist dem Inhalt nicht angemessen, ein prägnanteres Beispiel und das dann auch _nach_ dem Algorithmus, der nonverbaler (zielgruppengerechter - ein Psychologe liest sich das eh nich durch) formuliert werden sollte. Als Lehrbuchartikel (wikibook) sicher erhaltenswert fpr ein Lexikonartikel aber sicher zu ausufernd. --62.134.176.158 00:58, 24. Dez 2005 (CET)
replies: text:  Hi! Hm, gegen eine Vertauschung Algorithmus <-> Beispiel habe ich nichts, aber du sagst oben dass der Artikel eh nicht von einem Fachfremden gelesen wird, und deswegen ruhig unverständlich sein kann? Also da würde ich auf jeden Fall widersprechen. Nur weil ich kein Biologe bin, erwarte ich von Biologieartikeln trotzdem dass sie mir erklären worum es geht. Wir schreiben hier immerhin eine allgemeine Enzyklopädie, und nicht ein Fachlexikon, dessen Artikel nur die lesen dürfen die im Fach bewandert sind. Und im Abschnitt Algorithmus nutze ich eh schon nicht OMA konforme Begriffe wie Pfadkosten, etc. Zum Thema prägnanteres Beispiel: Was bringt dir ein Beispiel mit drei Knoten, wo der Algorithmus den selben Weg wie Breitensuche, Tiefensuche, oder Dijkstras Algorithmus findet? Das Beispiel sollte schon einen anderen Pfad finden als bei anderen Graphsuchen. Und dafür braucht man numal ein paar Knoten. Ach so, zum Thema nonverbale Beschreibung des Algorithmus: Der Pseudocode ist IMHO schon recht nonverbal :-) Regnaron 00:46, 27. Dez 2005 (CET)

text: Ich habe mir gerade einmal den Abschnitt Funtionsweise angeschaut. Dabei ist mir aufgefallen 
* dass sehr viele Kommas fehlten (in diesem Abschnitt habe ich das gleich korrigiert, aber den Rest sollte man noch einmal kontrollieren)
* und dass die geometrische Idee (gerade im Vergleich zum Dijkstra) nicht klar wird. Ein Komilitone von mir, der sich mit Kürzeste-Wege-Algorithmen beschäftigt hat, hatte immer schöne Grafiken, wo in einem Graphen die vom Algorithmus angefassten Kanten/Knoten markiert waren. Im Vergleich zum Dijsktra würde man sehen, dass letzterer eine "kreisförmige" Suchfront hat, während der A* "in Richtung Ziel" sucht.
Und eine kleine Anekdote zum A*: Früher (Anfang der 90er) fand der Routing-Algorithmus der DB AG eine bestimmte Verbindung von Kiel aus nicht, wo man wegen der Ostseebucht einen großen Umweg fahren muss - da war die benutzte Heuristik offenbar zu schlecht ... Leider erinnere ich mich nicht mehr an die Einzelheiten, aber vielleicht kommt ja jemand aus der Ecke und weiß das noch.
--Christian Gawron 01:31, 29. Dez 2005 (CET)
replies: text:  Hi! Zu den Bildern: Meinst du in etwa so wie hier? Falls ja: Sollte kein allzugroßes Problem sein die Bilder entsprechend umzustellen. Zu den Kommas: Jup, irgendwie scheine ich die kleinen dauernd zu boykottieren :-( Regnaron 10:54, 5. Jan 2006 (CET)
replies: text: Ich dachte eher an eine Abbildung des Straßennetzes in Deutschland, wo die bei der Suche angefassten Knoten/Kanten eingefärbt sind. Deine Abbildungen enthalten für meinen Geschmack zu wenig Knoten. Interessant werden die Unterschiede ja eigentlich erst in großen Netzen - und da kann man dann gut sehen, dass der Dijkstra kreisförmig vom Startpunkt aus sucht, bis er das Ziel erreicht, und der A* eben nicht. Leider ist www.zaik.de gerade nicht erreichbar - dort müsste man eine Veröffentlichung von Stephan Hasselberg mit entsprechenden Darstellungen finden. --Christian Gawron 11:33, 5. Jan 2006 (CET)

text: Schau Dir mal S. 84 in der Dissertation von Stephan Hasselberg an. Solche Abbildungen meine ich.--Christian Gawron 12:20, 5. Jan 2006 (CET)
replies: text:  Hi! Hm, sicher dass du das Bild auf Seite 84 der Dissertation meinst? Falls ja: Ich bin ein großer Feind von animierten Bilder in der Wikipedia. Sicherlich werden die Karten aussagekräftiger wenn man 20 Knoten nutzt, aber wie willst du das als Bild im Internet darstellen? Selbst mit dem Spielzeugbeispiel von hier läuft man in Probleme, da die Bilder sehr groß werden, wenn man noch etwas darauf erkennen will. Das passt dann einfach platzmäßig nicht mehr in einen Wikipedia Artikel. Wenn die Suche in den Beispielten tatsächlich die Knoten so anordnen würde, wie sie in Deutschland liegen, wäre ich auch glücklich, aber bisher habe ich leider noch nicht rausgefunden, wie man graphviz sagt wo er die Knoten anordnen soll. Falls du mir da einen Tipp geben kannst, werde ich die Karten gerne bei gelegenheit neu kompilieren, sodass Frankfurt dann wirklich nördlich von München liegt. Regnaron 10:21, 7. Jan 2006 (CET)
replies: text:  Nachtrag: Ups, das sind ja eigentlich gar keine Animierten Grafiken, sondern einfach nur so komplexe Grafiken, dass sie beim laden stückweise geladen werden, und dadurch wie animationen aussehen *pfiffel*. Aber das Bild zeigt ja auch nicht wie die einzelnen Algorithmen arbeiten, sondern nur wie die Algorithmen prinzipiell arbeiten, also ob Zielorientiert oder nicht. Frage ist: Woher willst du auf die schnelle eine Datenbank Deutschlands bekommen auf der du automatisiert A* laufen lassen kannst, um dann den Output automatisch durch ein Programm einfärben zu lassen? Per Hand würde ich das ganze nämlich ungern für > 10.000 Knoten berechnen ;-) Regnaron 10:33, 7. Jan 2006 (CET)

text: Hi! GDUS ist zwar scheinbar laut Google kein übermäßig bekannter Name für den A* Algorithmus, aber da das Lemma GDUS noch nicht andersweitig verwendet wird, habe ich mal einen Redirect angelegt. Regnaron 10:21, 7. Jan 2006 (CET)
thread_title:  Abgeschlossenes Review vom 14. Dez 2005 

message: Zur Klärung Monotonie => Zulässigkeit -> wurde korrigiert.
Der Satz: "Auf der anderen Seite gibt es extrem schlechte aber dafür sehr einfach zu berechnende Heuristiken. So kann man die Entfernung zwischen zwei Knoten mit Kosten von 0 schätzen, wodurch effektiv gar keine Heuristik mehr verwendet wird, und der A*-Algorithmus alle Knoten blind untersuchen muss, bis er durch Zufall das Ziel findet." ist schlicht falsch (Hinweis: ZUFALL). Der Algo bleibt natürlich deterministisch und entspricht dann vollständig einem anderen sehr bekannt Traversierungsalgorithmus (this is left as an exercise for the reader).
Ausdruck mangelhaft! "Schreibt man diese Überlegungen nun formal auf, so ergibt sich der formale Beweis der Optimalität des A*-Algorithmus:..."
: Naja, das er weiterhin deterministisch sucht ist schon klar, aber eben nicht gezielt. Und irgendwann trifft er dann halt mal aufs Ziel. Mir fiel in dem Moment als ich es geschrieben habe kein besserer Begriff als Zufall ein. Falls du einen besser hast: Immer rein damit! :-) (habs inzwische mal ein bisschen entschärft) 
: Und, dass er ohne Heuristik gleich dem Algorithmus von Dijkstra ist, steht direkt im nächsten Satz.
: Ansonsten zum Stil: Tja, bin leider Informatiker und kein Deutschlehrer ;-) Falls du natürlich besser formulieren kannst, gilt auch hier wieder das gute alte: Sei mutig! :-)
: P.S.: Habe mir mal erlaubt das ganze der Übersichtlichkeit halber unten unter einer eigenen Überschrift anzufügen.
: P.P.S.: Beiträge kannst du mit ~~~~ unterschreiben, so ist es für die anderen einfacher die Beiträge auseinanderzuhalten. Regnaron 19:52, 22. Jan 2006 (CET)
thread_title:  Sprachliche Mängel 

message: Sowohl auf der deutschen, wie auch auf dewr englischen Wikipedia-Seite steht, daß der A*-Algorithmus dem Algorithmus von Dijkstra entspricht, wenn gilt f(x)=g(x)+0 . Ich bin mir nicht ganz sicher, aber ich glaube, dies ist nicht richtig. Wen f(x)=g(x)+0 ist, dann ist dies der Breitensuche-Algorithmus (siehe "Künstliche Intelligenz" von George F. Luger, Seite 164).
: Hi! Nein, die Äquivalenz Dijkstra + Heuristik = A* stimmt schon. Breitensuche betrachtet die Kantengewichte *gar* nicht. Also hier wäre g(x) = d(x) und h(x) = 0 für alle x wobei d(x) der Abstand zum Startknoten ist. Eine Breitensuche kannst du dir auch so vorstellen, dass alle Kanten gewicht 1 haben. Bsp: G=(a,b,c,d, (a,b,1), (b,c,1), (a,d,5)). Breitensuche entdeckt die Knoten in folgender Reihenfolge (starting at a): a, b, d, c. Dijsktra entdeckt die Knoten in der Reihenfolge a, b, c, d, da der Pfad von a nach d teurer ist als der Pfad von a über b nach c. --Regnaron 17:18, 21. Nov. 2006 (CET)
thread_title:  Fehler (21.11.06) 

message: Fordert man von der Heuristik, dass sie monoton ist, also den tatsächlichen Weg zwischen zwei Knoten nie überschätzt, so kann man beweisen, dass der A*-Algorithmus tatsächlich immer einen kürzesten Weg findet. Dies bedeutet jedoch im Umkehrschluss auch, dass der Algorithmus nicht mit Sicherheit den kürzesten Weg zum Ziel findet, falls man eine sehr schlechte Heuristik verwendet.
Wenn es regnet, ist die Strasse nass. Wenn es also nicht regnet, ist die Strasse nicht nass?
Nur weil A \Rightarrow B. gilt, heisst das ja noch lange nicht, dass auch \neg A \Rightarrow \neg B gilt, den letzteres ist schliesslich equivalent zu B \Rightarrow A.
169.237.6.179 00:45, 26. Apr. 2007 (CEST)
thread_title:  Fehler (25.04.07) 

message: Der Algorithmus initialisiert die Abstände zu allen Knoten, ausser dem Start, mit unendlich (Zeile 01). In Zeile 02 werden nun alle Knoten in die Queue gedrückt ("// Füge alle Knoten aus dem Graph in die Warteschlange ein"). Nun soll in Zeile 05 der Knoten mit dem geringsten Abstand zum Startknoten untersucht werden. Dieser ist laut Def des Queues dessen erster. Nur sind alle Abstände unendlich! => Zufall, welcher Knoten als letztes eingefügt wurde. Sollte ich nun den Zielknoten ziehen rufe ich die Rückverfolgung (reconstructShortestPath(g)) auf. Dieser ist es natürlich unmöglich den Pfad zu finden. Ich denke der Fehler liegt in der Füllung der Queue, bzw in dem zugehörigen Kommentar. Ich gehe davon aus, dass alle vom Startknoten aus direkt zu erreichenden Knoten eingefügt werden sollen.
edit: Ok, habe nochmal nachgelesen und festgestellt, dass der Knoten mit dem kleinsten f(v) aus der Queue geholt werden soll. Dies sollte aber auch IMHO in den Kommentaren stehen. Jedoch gibt es hier ebenfalls ein Problem, da f(v) = d(v) + h(v) gilt, jedoch d(v) = unendlich. => f(v) = unendlich. Eine Lösung wäre natürlich d(v) für alle Knoten mit einem ausreichend hohen Wert zu initialisieren.
:Der Fehler liegt daran, dass im Pseudocode die Anpassung Abstandsschätzer d[v] fehlt. Wie im Dijkstra muss d[v] beim Relaxieren einer Kante (u,v) auf d[v] = d[u] + w(u,v) gesetzt werden. Im Pseudocode wird nur die Funktion f[] angepasst.
Der Code von relax ist auch falsch: "if f[v] = ∞"
Es wird also nur etwas gemacht, wenn der Knoten v zum ersten Mal gefunden wird. Im Beispiel mit den Städten wird aber der Zielknoten München zweimal besucht was mit obigem Code gar nicht geht.
--Sargeras 20:02, 17. Nov. 2007 (CET)
thread_title:  Fehler im Pseudocode A-Star 

message: :Fordert man von der Heuristik, dass sie monoton ist, also den tatsächlichen Weg zwischen zwei Knoten nie überschätzt, so kann man beweisen, dass der A*-Algorithmus tatsächlich immer einen kürzesten Weg findet. Dies bedeutet jedoch im Umkehrschluss auch, dass der Algorithmus nicht mit Sicherheit den kürzesten Weg zum Ziel findet, falls man eine sehr schlechte Heuristik verwendet.
Heißt es nicht. Man kann nichts schließen für den Fall, dass die Heuristik nicht monoton ist. 212.95.112.16 20:30, 22. Mai 2007 (CEST)
thread_title:  Umkehrung der Implikation falsch