mooie ronde getallen voor alles. Dit betekent ook dat het maken van diagonale bewegingen goedkoper is dan het maken van twee niet-diagonale bewegingen op hetzelfde vierkant (10 + 10 >14)heuristiek
Ik denk dat deze moeilijk te definiëren zijn, dus ik begin met de openingsregel van Wikipedia over het onderwerp:
in de informatica, kunstmatige intelligentie en wiskundige optimalisatie is een heuristische techniek (van het Griekse ερρίσκω “ik vind, ontdek”) een techniek die ontworpen is om een probleem sneller op te lossen wanneer klassieke methoden te traag zijn, of om een benaderende oplossing te vinden wanneer klassieke methoden geen exacte oplossing vinden. Dit wordt bereikt door de handel optimaliteit, volledigheid, nauwkeurigheid, of precisie voor snelheid. In zekere zin, het kan worden beschouwd als een kortere weg.
Is dat nuttig? Snap je het? Omdat ik het niet begrijp. Ik bedoel, ik snap het een beetje, en het is een accurate beschrijving, maar als dit de eerste was die je ooit hoorde over een heuristiek, Weet ik niet zeker of je het volledige beeld zou krijgen van wat heuristiek hiervan is. Misschien als ik je vertel over A* ‘ S pathfinding heuristic, krijg je een beter begrip.
met Dijkstra ‘ s algoritme lag de focus op één waarde: de kortste afstand van de startIndex. Wat, als je erover nadenkt, een beetje vreemd is. Dit algoritme probeert nieuwe, kortere paden naar een bepaalde bestemming te vinden, maar de focus ligt altijd op waar het begon. Stel je voor dat iemand boodschappen gaat doen, maar de hele weg achteruit loopt, probeert een oogje op hun huis te houden tot ze bij de winkel zijn. In het echte leven zou dit waarschijnlijk niet werken, maar misschien als je ze de tijd geeft om door de hele stad te gaan, zou het uiteindelijk kunnen werken.
uitgaande van deze goofy analogie, is A* anders dan Dijkstra ‘ s omdat het suggereert om te draaien en vooruit te lopen. A* houdt net als die van Dijkstra ook bij hoe ver het van huis is, maar het unieke is dat het ook bijhoudt hoe ver het van zijn bestemming is. Bij het maken van zijn volgende stap zal Dijkstra ‘ s kijken welk pad momenteel het kortst is, maar A* gaat een stap verder en gaat ook na of die stap dichter bij zijn doel komt. Simpeler, A* heeft een ruwe schatting van de resterende afstand tot zijn doel, en wanneer die schatting dichter bij nul komt, weet het dat het in de juiste richting beweegt. Dit is de heuristische die we zullen gebruiken in onze voorbeelden.
stap door het algoritme
Dit zal een vrij eenvoudig voorbeeld zijn, maar het zou je de basisstroom en herhaling van het algoritme moeten laten zien. Ik zal ervoor zorgen om links in mijn verwijzingen naar andere, meer gecompliceerde voorbeelden, maar dit moet een goede primer voor die. Ik zal een set-up gebruiken die vergelijkbaar is met hoe ik Dijkstra ‘ s heb gedemonstreerd.
nog een verschil tussen Dijkstra ’s en A* is dat Dijkstra’ s direct met looping kan beginnen, maar A* moet een kleine set-up doen voor zijn startpunt. Dus laten we dat nu doen, en een beetje een idee krijgen van hoe de tafel gaat werken.