
width largeur de l’espace en nombre de cases
height longueur de l’espace en nombre de cases
origin position de départ (x, y)
dest position d’arrivée (x, y)
map tableau à deux dimensions [x][y] des statuts des cases du terrain.
Chacune de vos fonctions de calcul de trajectoire devra renvoyer un triplet de valeurs :
— un booléen indiquant si la trajectoire a été trouvée
— la longueur de la trajectoire trouvée
— le nombre de noeuds développés par votre exploration.
On vous donne également une fonction Adjacents(u, problem) qui étant donné un problème (instance de
class PathPlanning) et une position 𝑢sur le terrain, vous calcule la liste des posistions adjacentes où vous
avez le droit de vous déplacer. Ces cases sont celle de statut différent de 1. Cette fonction renvoie une liste
de paires (position, distance). La distance vaut soit 1, soit √2selon la position.
— Question : algorithme de Dijkstra
La première idée pour calculer un plus court chemin dans un graphe consiste à implémenter l’algorithme de
Dijkstra. Nous sommes bien ici dans un graphe, avec des coûts associés aux arêtes qui sont positifs.
Expliquez en quoi l’algorithme de Dijkstra dans sa formulation stricte n’est pas adapté à notre problème de
navigation.
— Question : exploration à coût uniforme
Si l’algorithme de Dijkstra n’est pas adapté, il faut le modifier pour calculer malgré tout un plus court chemin
entre nos deux noeuds d’origine et de destination.
Pouvez-vous concevoir un algorithme basé sur un principe similaire à celui de Dijkstra, mais exploitant la
notion de frontière. La frontière est cet ensemble de noeuds que vous devez expanser pour progresser dans
votre recherche. Au départ, la frontière est réduite au noeud origine. À l’étape suivante, la frontière est consti-
tuée des voisins du noeud origine et ainsi de suite. Lorsque le noeud origine sort de la frontière, il devient
clos. Les noeuds à l’intérieur de la frontière sont les noeuds clos : leur exploration est terminée et ont connaît
la meilleure distance entre chacun de ces noeuds et l’origine. La meilleure distance des noeuds sur la fron-
tière au noeud origine n’est pas encore connue : on en a une estimation qui peut encore être améliorée. Cette
méthode d’exploration de l’espace porte le nom d’exploration à coût uniforme ou uniform cost search.
Vous exprimerez votre algorithme en pseudo-code. Vous ferez apparaître explicitement les listes closed et
frontier.
— Question : implémentation UCS
Programmez votre algorithme en pseudo-code dans le cadre du programme fourni précédemment.
— Question : information
La stratégie à coût uniforme dérivée de l’algorithme de Dijkstra est très prudente : elle s’éloigne très lente-
ment du noeud origine. De quelle information disposez-vous et qui pourrait vous permettre de développer
moins de noeuds pour aller plus rapidement vers la destination? On qualifiera de fonction heuristique une
fonction qui estime le coût de la distance entre un noeud et le noeud de destination. Proposez des fonctions
heuristiques.
— Question : exploitation
Comment exploiter simplement l’information précédente? Implémenter un algorithme de type Best-First
exploitant uniquement cette information. Visualiser l’espace des noeuds visités.
— Question : optimisation
Comment exploiter au mieux l’information utilisée par l’algorithme de Dijkstra et celle utilisée par l’algo-
rithme Best-first? Implémenter cet algorithme qu’on appelle algorithme 𝐴⋆et comparer avec les algorithmes
Uniform Cost Search et Best First Search.
— Question : optimalité
On qualifie d’heuristique admissible une fonction heuristique qui ne surestime jamais le coût réel du chemin
optimal entre un noeud et le noeud de destination. Montrez que si on utilise une heuristique admissible et
que la fonction de coût des noeuds est croissante monotone, l’algorithme 𝐴⋆est complet et optimal.
— Question : BFS bi-directionnel
Une idée permettant également de diminuer l’espace à explorer dans certains cas consiste à explorer si-
multanément depuis la source et depuis la destination. Lorsque les deux frontières de noeuds que les ex-
plorations développent se rencontrent, on a trouvé un chemin. Implémentez un algorithme d’exploration
bi-directionnelle.
5