Recherche de chemin et labyrinthe Starcraft 2 vincent
Recherche de chemin et labyrinthe (Starcraft 2) vincent. thomas@loria. fr Atelier ISN 2019 – 7 Mars 2019
Plan Structure de labyrinthe Recherche de chemin Algorithme de Lee / la vague Extensions Dijkstra A* Autres problèmes
Structure de labyrinthe Cf Code python fourni Tableau à deux dimensions laby = [] laby +=[[1, 1, 1]] laby +=[[1, 0, 0, 0, 1]] laby +=[[1, 0, 0, 1, 0, 1]] laby +=[[1, 0, 1, 1, 0, 1]] laby +=[[1, 0, 0, 0, 1]] laby +=[[1, 1, 0, 1, 1]] laby +=[[1, 0, 0, 0, 1]] Laby +=[[1, 1, 1]] transpose(laby) -------------laby[x][y] [0][0] [0][1] [0][2] [1][0] [2][0] [3][0]
Plan Structure de labyrinthe Recherche de chemin Algorithme de Lee / la vague Extensions Dijkstra A* Autres problèmes
Recherche de chemins Arrivée Départ
Recherche de chemins Quel est le chemin le plus court ?
Recherche de chemins Quel est le chemin le plus court ? Pourquoi difficile ? Solution possibles ?
Recherche de chemins Quel est le chemin le plus court ? 1. Enumérer chemins Pourquoi difficile ? Explosion combinatoire 2. Raisonner sur distances Quelle info trivial ?
Recherche de chemins 0 Algorithme de propagation
Recherche de chemins 1 0 1 Algorithme de propagation
Recherche de chemins 1 0 2 1 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 4 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 4 5 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 4 5 6 6 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 4 5 6 7 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 4 5 6 7 8 6 8 7 8 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 4 5 6 7 6 8 7 8 9 9 8 9 Algorithme de propagation
Recherche de chemins 1 0 2 1 3 4 10 5 6 7 6 8 7 8 9 9 8 9 10 Algorithme de propagation
Recherche de chemins 1 0 2 1 11 3 4 10 5 6 7 6 8 7 8 9 9 8 9 10 11 Algorithme de propagation
Recherche de chemins 1 0 14 13 12 2 1 15 11 3 4 10 5 6 7 6 8 7 8 9 9 8 9 10 11 Algorithme de propagation
Recherche de chemins 0 14 13 12 1 15 11 10 6 7 8 9 9 8 9 10 11 Algorithme de propagation
Recherche de chemins 1 0 14 13 12 2 1 15 11 3 4 10 5 6 7 6 8 7 8 9 9 8 9 10 11 Algorithme de propagation
Recherche de chemins 14 13 12 1 15 11 10 9 14 13 12 11 Algorithme de propagation
Coder en python Démarche [X] Savoir résoudre à la main [ ] Comprendre la stratégie mise en oeuvre [ ] Ecrire algorithme de haut niveau [ ] Traduire en commentaire [ ] Ajouter le code entre les commentaires Intérêt Séparer code de l'algo et réduire bugs Avoir code correctement commenté
Recherche de chemins 1 0 14 13 12 2 1 15 11 3 4 10 5 6 7 6 8 7 8 9 9 8 9 10 11 Algorithme de propagation
Recherche de chemins 14 13 12 1 15 11 10 9 14 13 12 11 Algorithme de propagation
Messages à emporter 1. Algorithme de recherche de chemin Principe de propagation de valeur (accessible) Algorithme de Lee Gestion de frontières (liste ouverte) 2. Manière de coder Comprendre le probleme Résoudre exemple Ecrire les commentaires Ecrire le code
Plan Structure de labyrinthe Recherche de chemin Algorithme de Lee / la vague Extensions Dijkstra A* Autres problèmes
3 Extensions Ajoute des couts aux arcs Accélérer la recherche Dijkstra Algorithme A* Etendre à d'autres cadres Théorie des graphes
Dijkstra Tableau de coûts Exemple altitude sur les cases Edsger Dijkstra (1930 -2002) Ajoute coût de la case 1 2 2 Murs 3 Cout = difference altitude
Dijkstra Principe Développe cases distance plus faible Met à jour si valeur est meilleure Algo Trier la liste ouverte par coût Vérifier chemin réalisable 1 2 2 3 Garantie Car coûts > 0 Coût = différence altitude
Dijkstra Principe Développe cases distance plus faible Met à jour si valeur est meilleure 0 1 2 2 3 Coût = différence altitude Distances
Dijkstra Principe Développe cases distance plus faible Met à jour si valeur est meilleure 0 2 2 2 1 1 2 4 1 Coût = différence altitude 3 4 3 6 5 4 1 1 7 1 0 8 1 0 3 1 2 2 1 1 Distances
Dijkstra Principe Développe cases distance plus faible Met à jour si valeur est meilleure 0 2 2 2 1 1 2 4 1 Coût = différence altitude 3 4 3 6 5 4 1 1 7 1 0 8 1 0 3 1 2 2 1 1 Distances 14 12
3 Extensions Ajoute des couts aux arcs Accélérer la recherche Dijkstra Algorithme A* Etendre à d'autres cadres Théorie des graphes
Algorithme A* 0 Algorithme de propagation
Algorithme A* 1 0 1 Algorithme de propagation + optimisme
Algorithme A* +6 1 +8 0 1 Algorithme de propagation + optimisme
Algorithme A* 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* +8 +5 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* +8 +5 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 4 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 4 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 5 4 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 5 4 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 3 3 2 1 0 1
Algorithme A* 6 5 4 5 3 3 2 1 0 1 Conclusion ?
Algorithme A* 6 5 4 5 3 3 2 1 0 1 Conclusion ?
Changement labyrinthe
Changement labyrinthe 6 5 4 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* +4 6 5 4 +8 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* +4 6 5 4 +8 5 3 3 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 6 1 0 3 3 2 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 6 1 0 3 3 2 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 6 3 3 2 2 1 0 1 2 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 5 6 3 3 2 1 0 1 2 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 4 5 6 3 3 2 3 4 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* 6 5 4 4 5 6 3 3 2 3 4 2 1 0 1 Algorithme de propagation + optimisme
Algorithme A* Démo étudiant DUT
3 Extensions Ajoute des couts aux arcs Accélérer la recherche Dijkstra Algorithme A* Etendre à d'autres cadres Théorie des graphes
Problème labyrinthe Structure particulière Cases côtes à côtes Connexité fixée Coûts de 1 De manière plus générale Graphe (Noeuds + Arcs) Algorithmes identiques Vraie question : Modélisation du probleme
Problème Robot qui va cher un café 3 pièces qui se suivent Cafetière au fond Possibilité de déplacer, prendre, poser
Problème Robot qui va cher un café Modélisation du problème
Problème Robot qui va cher un café p 1 c 0 p 2 c 0 p 3 c 0 p 1 c 1 p 2 c 1 p 3 c 1
Problème def actions(): return(['gauche', 'droite', 'prendre', 'poser']) def etats(): return([(1, 0), (1, 1), (2, 0), (2, 1), (3, 0), (3, 1)]) def transition(s, a): (pos, cafe)=s if (a=='gauche'): if (pos>1): pos=pos-1 if (a=='droite'): if (pos<3): pos=pos+1 if (a=='prendre'): if (pos==3): Cafe=1 if (a=='poser'): Cafe=0 return(pos, cafe) p 1 c 0 p 2 c 0 p 3 c 0 p 1 c 1 p 2 c 1 p 3 c 1
Probleme : Sokoban Caisse et murs Amener les caisses A faire Modéliser le probleme Appliquer algo Heuristique si A*
Problèmes : puzzle solo Rush hour Taquin Rubick’s cube
Problèmes : puzzle solo Dr Eureka (blue orange)
Et beaucoup d'autres Thinkfun / Smartgames Turnstile
- Slides: 77