Schöne runde Zahlen für alles. Dies bedeutet auch, dass diagonale Bewegungen billiger sind als zwei nicht diagonale Bewegungen zum selben Quadrat (10 + 10 >14)Heuristiken
Ich habe das Gefühl, dass diese für mich schwer zu definieren sind, also beginne ich mit der Eröffnungszeile von Wikipedia zum Thema:
In der Informatik, der künstlichen Intelligenz und der mathematischen Optimierung ist eine Heuristik (von Griechisch εὑρίσκω „Ich finde, entdecke“) eine Technik, mit der ein Problem schneller gelöst werden kann, wenn klassische Methoden zu langsam sind, oder um eine ungefähre Lösung zu finden, wenn klassische Methoden keine genaue Lösung finden. Dies wird erreicht, indem Optimalität, Vollständigkeit, Genauigkeit oder Präzision für Geschwindigkeit gehandelt werden. In gewisser Weise kann es als Abkürzung betrachtet werden.
Ist das nützlich? Verstehst du es? Weil ich es nicht verstehe. Ich meine, ich verstehe es irgendwie, und es ist eine genaue Beschreibung, aber wenn dies das erste Mal war, dass Sie jemals von einer Heuristik gehört haben, bin ich mir nicht sicher, ob Sie daraus ein vollständiges Bild davon bekommen würden, was Heuristiken sind. Wenn ich Ihnen nur von der Wegfindungs-Heuristik von A * erzähle, bekommen Sie vielleicht ein besseres Verständnis.
Beim Dijkstra-Algorithmus lag der Fokus auf einem Wert: der kürzesten Entfernung vom Startindex. Was, wenn man darüber nachdenkt, irgendwie seltsam ist. Sie haben diesen Algorithmus, der versucht, neue, kürzere Pfade zu einem Ziel zu finden, aber sein Fokus liegt immer darauf, wo er angefangen hat. Stellen Sie sich vor, jemand geht einkaufen, geht aber den ganzen Weg rückwärts und versucht, sein Zuhause im Auge zu behalten, bis er in den Laden kommt. Im wirklichen Leben würde das wahrscheinlich nicht funktionieren, aber vielleicht, wenn du ihnen Zeit gibst, durch die ganze Stadt zu gehen, könnte es irgendwann funktionieren.
Ausgehend von dieser doofen Analogie unterscheidet sich A * von Dijkstras, weil es vorschlägt, sich umzudrehen und vorwärts zu gehen. A *, wie Dijkstra’s, verfolgt auch, wie weit es von zu Hause entfernt ist, aber seine einzigartige Eigenschaft ist, dass es verfolgt, wie weit es von seinem Ziel entfernt ist. Beim nächsten Schritt wird Dijkstra prüfen, welcher Weg derzeit der kürzeste ist, aber A * geht noch einen Schritt weiter und prüft auch, ob dieser Schritt seinem Ziel näher kommt. Einfacher gesagt, ein * hat eine grobe Schätzung seiner verbleibenden Entfernung zu seinem Ziel, und wenn diese Schätzung näher an Null kommt, weiß es, dass es sich in die richtige Richtung bewegt. Dies ist die Heuristik, die wir in unseren Beispielen verwenden werden.
Schritt durch den Algorithmus
Dies wird ein ziemlich einfaches Beispiel sein, aber es sollte Ihnen den grundlegenden Ablauf und die Wiederholung des Algorithmus zeigen. Ich werde sicherstellen, dass ich in meinen Referenzen Links zu anderen, komplizierteren Beispielen zur Verfügung stelle, aber dies sollte eine gute Grundierung für diese sein. Ich werde ein Setup verwenden, das dem von Dijkstra ähnelt.