$$ \gdef\block#1#2#3#4#5{ \begin{aligned} &\texttt{#1 } #4 \texttt{ #2} \\ &\enspace \left#3 \enspace \begin{aligned} #5 \end{aligned} \right. \end{aligned} } \gdef\if#1#2{\block{si}{alors}{|}{#1}{#2}} \gdef\eif#1#2{\block{si}{alors}{\lfloor}{#1}{#2}} \gdef\elif#1#2{\block{sinon si}{alors}{|}{#1}{#2}} \gdef\eelif#1#2{\block{sinon si}{alors}{\lfloor}{#1}{#2}} \gdef\else#1{\block{sinon}{}{\lfloor}{}{#1}} \gdef\for#1#2{\block{pour}{faire}{\lfloor}{#1}{#2}} \gdef\foreach#1#2{\block{pour tout}{faire}{\lfloor}{#1}{#2}} $$

TD AAIA

Cours Sujet

Exercice 5.1

A la fin de son cours de botanique, Harry P. reçoit un message d’Hagrid lui disant :

Rejoins-moi dans ma cabane dès que possible, mais méfie-toi de Rusard : s’il te voit, Griffondor perdra des points !

Avec l’aide de Ron W. et Hermione G., il estime pour chaque zone du chateau, la probabilité qu’il ne rencontre pas Rusard ainsi que le temps nécessaire, en minutes (chiffre entre parenthèses).

  1. Quel algorithme peut-il utiliser pour trouver le chemin le plus sûr allant des serres de Botanique (B) à la cabane de Hagrid (H) ? Quelles adaptations faut-il apporter à cet algorithme ? Déterminez un itinéraire optimal en détaillant les étapes de la résolution.

Question 1

Pour résoudre le problème il faut utiliser l’algorithme de Dijkstra. Les adaptations nécessaires à apporter à l’algorithme sont :

  • Modifier l’initialisation de l’algorithme ;
  • Modifier la fonction de relâchement.

En effet l’algorithme de Dijstra fonctionne pour des fonctions coût monotone.

L’initialisation se fera: $$ \htmlStyle{margin-left: 1rem}{ \begin{aligned} &\foreach{s \in S}{ &p[s_i] \leftarrow 0 \textcolor{grey}{\texttt{ // Pire probabilité}} \\ &\pi[s_i] \leftarrow \texttt{null} \\ &\texttt{Colorier } s_i \text{ en } \texttt{blanc} } \\ &p[s_0] \leftarrow 1 \end{aligned} } $$

La fonction de relachement sera : $$ \htmlStyle{margin-left: 1rem}{ \eif{p[s_j] < p[s_i] \times \texttt{p(}s_i,s_j\texttt{)}}{ &p[s_j] \leftarrow p[s_i] \times \texttt{p(}s_i,s_j\texttt{)} \\ &\pi[s_j] \leftarrow s_i } } $$

Le tri des noeuds se fera par ordre décroissant.


Résolution

Étape 1

On sélectionne le noeud B.

$$F = [(B, 1.00)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$NoneNoneNoneNoneNoneNone
$\delta(B, s_k)$$1.00$NoneNoneNoneNoneNoneNone

Étape 2

Un chemin plus court a été découvert pour C.

$$F = [(B, 1.00), (C, 0.80)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNoneNoneNoneNone
$\delta(B, s_k)$$1.00$$0.80$NoneNoneNoneNoneNone

Étape 3

Un chemin plus court a été découvert pour N.

$$F = [(B, 1.00), (C, 0.80), (N, 0.50)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNone$B$NoneNone
$\delta(B, s_k)$$1.00$$0.80$NoneNone$0.50$NoneNone

Étape 4

Le noeud B n’a plus de voisin, on le supprime de la file.

$$F = [(C, 0.80), (N, 0.50)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNone$B$NoneNone
$\delta(B, s_k)$$1.00$$0.80$NoneNone$0.50$NoneNone

Étape 5

On sélectionne le noeud C.

$$F = [(C, 0.80), (N, 0.50)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNone$B$NoneNone
$\delta(B, s_k)$$1.00$$0.80$NoneNone$0.50$NoneNone

Étape 6

Un chemin plus court a été découvert pour P.

$$F = [(C, 0.80), (N, 0.50), (P, 0.24)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNone$B$$C$None
$\delta(B, s_k)$$1.00$$0.80$NoneNone$0.50$$0.24$None

Étape 7

Un chemin plus court a été découvert pour S.

$$F = [(C, 0.80), (S, 0.72), (N, 0.50), (P, 0.24)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNone$B$$C$$C$
$\delta(B, s_k)$$1.00$$0.80$NoneNone$0.50$$0.24$$0.72$

Étape 8

Le noeud C n’a plus de voisin, on le supprime de la file.

$$F = [(S, 0.72), (N, 0.50), (P, 0.24)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNone$B$$C$$C$
$\delta(B, s_k)$$1.00$$0.80$NoneNone$0.50$$0.24$$0.72$

Étape 9

On sélectionne le noeud S.

$$F = [(S, 0.72), (N, 0.50), (P, 0.24)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$NoneNone$B$$C$$C$
$\delta(B, s_k)$$1.00$$0.80$NoneNone$0.50$$0.24$$0.72$

Étape 10

Un chemin plus court a été découvert pour E.

$$F = [(S, 0.72), (N, 0.50), (E, 0.36), (P, 0.24)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$None$B$$C$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$None$0.50$$0.24$$0.72$

Étape 11

Un chemin plus court a été découvert pour P.

$$F = [(S, 0.72), (N, 0.50), (E, 0.36), (P, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$None$B$$S$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$None$0.50$$0.36$$0.72$

Étape 12

Le noeud S n’a plus de voisin, on le supprime de la file.

$$F = [(N, 0.50), (P, 0.36), (E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$None$B$$S$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$None$0.50$$0.36$$0.72$

Étape 13

On sélectionne le noeud N.

$$F = [(N, 0.50), (P, 0.36), (E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$None$B$$S$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$None$0.50$$0.36$$0.72$

Étape 14

Un chemin plus court a été découvert pour P.

$$F = [(N, 0.50), (P, 0.40), (E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$None$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$None$0.50$$0.40$$0.72$

Étape 15

Le noeud N n’a plus de voisin, on le supprime de la file.

$$F = [(P, 0.40), (E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$None$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$None$0.50$$0.40$$0.72$

Étape 16

On sélectionne le noeud P.

$$F = [(P, 0.40), (E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$None$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$None$0.50$$0.40$$0.72$

Étape 17

Un chemin plus court a été découvert pour H.

$$F = [(P, 0.40), (E, 0.36), (H, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$$P$$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$$0.36$$0.50$$0.40$$0.72$

Étape 18

Le noeud P n’a plus de voisin, on le supprime de la file.

$$F = [(H, 0.36), (E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$$P$$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$$0.36$$0.50$$0.40$$0.72$

Étape 19

On sélectionne le noeud H.

$$F = [(H, 0.36), (E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$$P$$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$$0.36$$0.50$$0.40$$0.72$

Étape 20

Le noeud H n’a plus de voisin, on le supprime de la file.

$$F = [(E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$$P$$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$$0.36$$0.50$$0.40$$0.72$

Étape 21

On sélectionne le noeud E.

$$F = [(E, 0.36)]$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$$P$$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$$0.36$$0.50$$0.40$$0.72$

Étape 22

Le noeud E n’a plus de voisin, on le supprime de la file.

$$F = []$$

// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$$P$$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$$0.36$$0.50$$0.40$$0.72$

Conclusion
// Loading
$B$$C$$E$$H$$N$$P$$S$
$\pi[s_k]$$B$$B$$S$$P$$B$$N$$C$
$\delta(B, s_k)$$1.00$$0.80$$0.36$$0.36$$0.50$$0.40$$0.72$

Le chemin avec le plus grand taux de réussite est Serres de Botanique, Salle de divinatioN, Tour de Poufsouffle et la cabane de Hagrid.

Auteurs

Christine Solnon