2016-09-03 3 views
1

La définition d'une heuristique admissible est celle qui "ne surestime pas le chemin d'un but particulier". J'essaye d'écrire une heuristique Pac-Man pour trouver la méthode la plus rapide pour manger des points, dont certains sont dispersés aléatoirement dans la grille. Cependant, il échoue mon test d'admissibilité. Voici les étapes de mon algorithme:Comment puis-je savoir si une heuristique particulière est admissible et pourquoi la mienne ne l'est pas?

sum = 0, list = grid.getListofDots() 
1. Find nearest dot from starting position (or previous dot that was removed) using manhattan distance 
2. add to sum 
3. Remove dot from list of possible dots 
4. repeat steps 1 - 3 until list is empty 
5. return the sum 

Depuis que je suis en utilisant la distance manhattan, ne devrait pas être recevable ce? Si non, y a-t-il des suggestions ou d'autres approches pour rendre cet algorithme admissible?

+0

vous considérer la distance de l'endroit où vous êtes, mais les changements en mouvement toutes les distances. – njzk2

+0

Mais si j'utilise la distance de manhattan du point que je viens d'atteindre, est-ce que cela ne signifie pas que c'est toujours recevable? – Quinty

+2

vous considérez quelques distances deux fois. considérez ceci: '* ___ * C_ *' (il y a 3 espaces). Pacman est 'C',' *' sont les points, '_' est un espace vide. votre algorithme compte 11. (gauche, droite, gauche). Le meilleur rapport qualité/prix est 9 (allez à droite en premier). – njzk2

Répondre

2

As said votre heuristique n'est pas admissible. Un autre exemple est:

Pacman heuristics

Votre coût est 9 mais le meilleur chemin a coûté 6.


Un très, très simple heuristiques admissibles est:

number_of_remaining_dots 

mais n'est pas très serré. Une petite amélioration est:

manhattan_distance_to_nearest_dot + dots_left_out 

D'autres possibilités sont les suivantes:

distance_to_nearest_dot // Found via Breadth-first search 

ou

manhattan_distance_to_farthest_dot