Diskussion:A*-Algorithmus

message: Es ist beschrieben, dass allen bekannten Knoten ein Wert f zugeordnet wird. Es ist aber nicht ein Wert, sondern jeweils ein Wert. Das jedem bekannten Knoten n ein Wert f(n) zugeordnet wird, wäre klarer formuliert.
:Sei mutig! Formulierung ist nun verbessert. --Sargeras 23:00, 8. Jan. 2008 (CET)
thread_title:  Formulierung f / f(x) 

message: Ist im Beispiel nicht ein eklatanter Fehler?
"Die verwendete Heuristik darf die Kosten nie überschätzen. Für das Beispiel der Wegsuche ist die Luftlinie eine geeignete Schätzung: Die tatsächliche Strecke ist nie kürzer als die direkte Verbindung." ist meiner Meinung nach ein Widerspruch zu "Die tatsächlichen Kosten von Ludwigshafen nach Würzburg weichen deutlich von der Schätzung ab, da in diesem Beispiel nur Autobahnen verwendet werden sollen." Also geschätze Länge: 183km, echte Länge nun nur noch 75km (nicht signierter Beitrag von 89.244.164.182 (Diskussion) 03:40, 25. Jun. 2012 (CEST)
thread_title:  Beispiel: fehlerhaft 

message: Die angesprochenen Fehler wurden im Zuge meiner Komplett-Überarbeitung inzwischen verbessert. Sobald ich genügend Zeit habe, will ich den Artikel noch ein wenig erweitern (Baumsuche, Graphsuche) und ihn erneut auf den 'Lesenswert' Status überprüfen lassen. --Sargeras 17:55, 19. Dez. 2007 (CET)
thread_title:  Comment: Sargeras 

message: Der Pseudo Code ist nicht gleich wie in der englischen Version der Wikipedia. Dort wird untersucht ob der G-Kosten des Knotens niedriger sind als die neu berechneten: 
  elseif tentative_g_score < g_score[y]
    tentative_is_better := true
In der deutschen Version werden die F-Kosten verwendet:
  if openlist.contains(successor) and f > openlist.find(successor).f then
    continue
Ist das Absicht und wenn ja, was ist der Unterschied, wie wirkt er sich aus?
-- 81.26.172.73 10:19, 27. Aug. 2010 (CEST)
replies: text: In der englischen Version wird g mit g verglichen, in der deutschen Version f mit f. Der Unterschied ist nur, dass in der deutschen Version auf beiden Seiten der Ungleichung noch jeweils h dazugezählt wird. Es gilt: f = g + h. Die Addition des selben Wertes auf beiden Seiten einer Ungleichung ändert aber nichts. Die Funktionsweise ist also identisch. -- Sargeras 15:30, 27. Aug. 2010 (CEST)

text: Es gibt doch einen minimalen Unterschied: Falls mehrere Wege zu einem Knoten gefunden werden, die alle gleich lang sind, dann wird in der deutschen Version der zuletztgefundene Weg ausgewählt, in der englischen Version der zuerstgefundene. (Falls die Ungleichung eine Gleichung ist, wird der gerade gefundene Weg in der deutschen Version weiterbenutzt, in der englischen Version aber verworfen. Solche Implementierungsdetails sind in der Antwort zu "Anfängerfrage - mehrere optimale Lösungen" gemeint.) -- Sargeras 15:46, 27. Aug. 2010 (CEST)

text: Ich sehe noch einen weiteren Unterschied: In der englischen Version wird für neuberechnete Kosten die günstiger sind als die alten G-Kosten eines Knoten alle Werte für diesen Knoten angepasst, sowohl F,G als auch H (H sollte allerdings gleich bleiben). Da G verwendet wird um die Knoten der Nachfolgeknoten zu berechnen, können die Kanten in der Lösung hier alte Kosten bekommen. Theoretisch kann je nach Wahl von H  so ein Fall auftreten. Es ist nicht einfach aus dem Stehgreif so ein Beispiel zu konstruieren, aber ich hatte in meiner Beispielanwendung nur mit der Version der englischen Wikipedia erfolg. Kann natürlich aber auch an meiner Implementierung liegen. -- 81.26.172.73 19:21, 27. Aug. 2010 (CEST)

text: Ich glaube ich habe 'dein' Problem gefunden: Im Pseudo-Code der deutschen Wikipedia hat die Zeile gefehlt, in der der g Wert des Nachfolgeknotens gesetzt wird. Wenn man das vergisst, ergibt g[currentNode] immer 0 (natürlich nur, falls die Werte im Array von der verwendeten Programmiersprache auch mit 0 initialisiert werden). Ich habe den Code verbessert. Damit die Verwirrung in Zukunft nicht mehr so groß ist, habe ich auch die Ungleichung so geändert, dass sie nun der Version in der englischen Wikipedia entspricht. Ich hoffe geholfen zu haben. -- Sargeras 11:03, 11. Sep. 2010 (CEST)
thread_title:  Unterschied im Pseudo Code zur englischen Version 

message: Ich bin warhaftig kein Informatiker, aber war macht der Algorithmus eigentlich wenn zwei Wege exakt gleich gut bewertet werden? Djchrisi 22:56, 25. Nov. 2007
:Dann wird einer dieser zwei Wege ausgegeben. Welcher davon ausgegeben wird hängt vom Zufall von Implementierungsdetails ab. Irgendwann müssen in diesem Fall zwei Knoten mit gleichem f Wert in der Open List sein, und davon ist halt einer am Anfang der Prioritätswarteschlange. Sobald ein Zielknoten expandiert wird, wird dieser als Lösung ausgegeben. Der Algorithmus garantiert nur, dass es keinen besseren Weg gibt. --Sargeras 10:41, 27. Nov. 2007 (CET)
thread_title:  Anfängerfrage - mehrere optimale Lösungen 

message: Ist es rechtlich in Ordnung das Originalpaper von Peter E. Hart and Nils J. Nilsson and Bertram Raphael im A*-Artikel zu verlinken? Das gibt es zum Beispiel hier: (nicht signierter Beitrag von 129.217.189.10 (Diskussion | Beiträge) 17:40, 15. Feb. 2010 (CET)
thread_title:  Originalartikel 

message: "Bedingt durch die Vorgängerzeiger wird der gefundene Weg vom Ziel ausgehend rückwärts bis zum Start ausgegeben. Um den Weg in der richtigen Reihenfolge zu erhalten kann z. B. vor der Wegsuche Start und Ziel vertauscht werden. Somit wird vom eigentlichen Ziel zum Start gesucht und die Wegausgabe beginnt beim ursprünglichen Startknoten."
In meinen Augen ist das Quatsch. Diese Vorgehensweise funktioniert nur im ungerichteten Graphen, was aber eher nicht die Regel ist. Das sollte man erwähnen. (nicht signierter Beitrag von 79.214.17.84 (Diskussion | Beiträge) 14:03, 14. Apr. 2010 (CEST)
thread_title:  Start und Zielknoten vertauschen 

message: Die Anmerkung ist uneindeutig formuliert. "Wird keine Closed List benutzt, muss anderweitig sicher gestellt werden, dass Knoten nicht mehrfach untersucht werden." Das gilt doch nicht, wenn sie wie beschrieben indirekt implementiert wird? Der Abschnitt sollte etwas klarer strukturiert werden. (nicht signierter Beitrag von 88.77.118.0 (Diskussion) 02:25, 5. Jun. 2010 (CEST)
thread_title:  Anmerkung uneindeutig formuliert 

message: Hallo! Im 6. Schritt der Schritt-für-Schritt-Anleitung ist euch ein Fehler unterlaufen. "Heilbronn" muss dort auch auf die "Closed List" gesetzt werden, oder nicht? Der kürzeste Weg dorthin ist ja bekannst.
-- Springfreaky 15:52, 8. Nov. 2010 (CET)
replies: text: In Schritt 5 sind Heilbronn und Würzburg auf der Open List. In Schritt 6 wird Würzburg untersucht und der Algorithmus bricht mit "Aha Ziel gefunden" ab. Heilbronn verbleibt in der Open List und muß nicht untersucht werden. --Mathemaduenn 20:37, 8. Nov. 2010 (CET)
thread_title:  Schritt 6 - Bild fehlerhaft 

message: Entgegen der Behauptung im Artikel kann eine monotone Bewertung ungültig sein, wenn der Zielknoten eine Bewertung größer null hat.
Ich weiß allerdings nicht, wie ich das im Artikel geschickt formulieren könnte, mag jemand anderes das korrigieren?
--Mrwonko (Diskussion) 08:32, 22. Jan. 2014 (CET)
thread_title:  monoton nicht immer zulässig 

message: Ich habe mir den Artikel genauer angeschaut, weil ich vorhabe, den Algorithmus in Python zu implementieren. Und ich war schon ziemlich verwirrt. Letztlich habe ich den Artikel von Peter E. Hart, Nils J. Nilsson und Bertram Raphael gelesen, um den Algorithmus zu verstehen.
* Gleich zu Beginn des Artikels steht "Der A*-Algorithmus (...) dient (...) der Berechnung eines kürzesten Pfades zwischen zwei Knoten in einem Graphen mit positiven Kantengewichten. (...) (und) verwendet (...) eine Schätzfunktion (Heuristik), um zielgerichtet zu suchen(...). Der Algorithmus ist vollständig und optimal." Das ist eigentlich das, was ich erwartet habe.
* Dann wird "Die Idee des Algorithmus" kurz beschrieben und die Funktionen f,g und h werden erwähnt, und weiters "h(x) bezeichnet die geschätzten Kosten von  x bis zum Zielknoten. Die verwendete Heuristik darf die Kosten nie überschätzen." Das h die im zweiten Satz erwähnte Heuristik ist, sollte vielleicht explizit erwähnt werden, mir ist das aber klar gewesen. Das h durch die die erwähnte Eigenschaft zu einer sogenannten "zulässigen" Heuristik wird, wie sie dann ziemlich weit unten im Artikle definiert wird, wird nicht erwähnt. Jedenfalls nimmt man nun also an, dass es sich im Folgenden bei h um eine solche zulässige Heuristik handelt.
* Im Abschnitt "Funktionsweise" wird behauptet, dass für die  "abschließend untersuchten" Knoten gilt, dass der kürzeste Weg bekannt ist. Das ist aber nicht der Fall. Der Algorithmus wird falsch beschrieben. Ein Knoten, der in der CloseList ist, kann in dieser Beschreibung nicht mehr aus dieser in die OpenList wechseln. Das ist aber falsch. Das kann durchaus passieren. Es wird nicht erklärt warum das ganze funktionieren soll. Implementationsdetails, z,B, OpenList wird als Priority Queue, brauchen in der Beschreibung der Funktionsweise eigentlich nicht vorhanden sein. Das erhöht nur unnötig die Komplexität der Beschreibung. 
* Der Pseudocode ist genauso falsch wie die vorhergehende Beschreibung. Er enthält wiederum unnötige technische Details. Fast jede Zeile Pseudocode ist durch ein oder zwei Zeilen Kommentar erklärt. Das ist nicht der Sinn von Pseudocode.
Den Rest habe ich mir nicht mehr genauer angeschaut.
Weitere Anmerkungen
* in der englischsprachigen Wiki steht der gleiche Pseudocode, anscheinend vom selben Autor. Dort wird nach dem Code angemerkt, das für den Algorithmus vorausgesetzt wird, das die Heuristik monoton und nicht nur zulässig ist. Ich glaube aber, dass auch das nicht ausreicht.
* Hier wird der A* Algorithmus auch beschrieben, und hier werden Elemente der ClosedList, die nur indirekt existiert,  wieder auf die OpenList gesetzt.
* Ich habe mir die Vorgängerversion des Pseudocodes angeschaut 03:22, 22. Nov. 2007. Die ist auch falsche. Hier wird ein Knoten nur einmal modifiziert, d.h. selbst wenn er auf der OpenList ist, wird er nicht mehr modifiziert, selbst wenn ein besserer Pfad gefunden wird. Ich habe mir noch ältere Versionen des Pseudocodes angeschaut und die sind alle mehr oder weniger falsch.
* --Miracle173 (Diskussion) 15:33, 3. Jul. 2018 (CEST)
thread_title:  Algorithmus ist falsch beschrieben 

message: Im Abschnitt "Funktionsweise", unter der Auflistung der Knotenklassen, heißt es:
"Jeder bekannte oder abschließend besuchte Knoten enthält einen Zeiger..."
An jeder anderen Erwähnung in diesem Abschnitt wird von "abschließend untersuchten Knoten" gesprochen. Gibt es einen Grund, hier anstattdessen das Wort "besucht" zu benutzen oder ist das ein Versehen und es gehört auch hier "untersucht" hin?   --Perfektionismus (Diskussion) 12:35, 29. Jul. 2019 (CEST)
thread_title:  "Besucht" und "untersucht"