\section{Chapitre 3: Recherche non informée}
\label{sec:ch3a}

\subsection{Agent de résolution de problèmes}
\label{sec:ch3agentresolution}

\begin{enumerate}
\item But: Ensemble d'états à atteindre
\item Problème: États et actions à considérer
\item Recherche: Indentifier la meilleure séquence d'actions menant à un état but
\item Exécution: Accomplir la séquence d'actions
\end{enumerate}

\subsection{Formulation du problème}

\begin{itemize}
\item État initial $x$
\item Actions: une fonction $S(x)$ permet de trouver l'ensemble des états successeurs sous forme de paires
\item Test de but: Déterminer si le but est atteint
\item Coût du chemin: Fonction qui assigne un coût à un chemin. C'est la mesure de la performance de l'agent.
\end{itemize}

\begin{mydef}
  Une abstraction est \textbf{valide} si l'on peut développer toutes les solutions abstraites vers une solution dans le monde réel.
\end{mydef}

\paragraph{Exemple}

Le problème du 8-puzzle

\PuzzleSolution
\begin{Puzzle}{3}{3}
  |5|7|3|.
  |8|{}|1|.
  |4|2|6|.
\end{Puzzle}

\begin{itemize}
\item États: Position des 8 tuiles dans les cases
\item Actions: Déplacement du trou
  \begin{enumerate}
  \item Droite
  \item Gauche
  \item Haut
  \item Bas
  \end{enumerate}
\item Test de but: Vérifie si l'état correspond à l'état final
  \PuzzleSolution
  \begin{Puzzle}{3}{3}
    |1|2|3|.
    |4|5|6|.
    |7|8|{}|.
  \end{Puzzle}
\item Coût du chemin: chaque action coûte 1.
\end{itemize}

\subsection{Recherche dans un arbre}
\label{sec:ch3recherchearbre}

Objectif: Simuler l'exploration d'états en générant des successeurs pour les états déjà explorés. Pour chaque noeud de recherche, on définit les éléments suivants:
\begin{itemize}
\item État: dans l'espace d'état
\item Noeud parent: Noeud de l'arbrbe de recherche qui a généré ce noeud
\item Action: appliquée au noeud parent pour atteindre générer l'état de ce noeud
\item Coût du chemin $g(n)$: Depuis l'état initial jusqu'à ce noeud
\item Profondeur: Nombre d'actions(étapes) dans le chemin depuis l'état initial
\end{itemize}

\paragraph{Algorithme de recherche général}


\begin{algorithm}[h!]
  \Deb{
    \Entree{$P$:Problème($n_0$: État initial,$A$: Actions,$B$: États buts),$S$: Stratégie}
    \Sortie{$C(n)$: Chemin vers un état but}
    \Donnees{$\mathbf{E}$: Ensemble d'expansion}
    \Repeter{$\mathbf{E}=\emptyset$}{
      $n \leftarrow S(P,\mathbf{E})$\;
      \Si{$n \in B(P)$}{\Retour{$C(n)$}}
      \Sinon{
        \Pour{$a \in A(n)$}{
          $\mathbf{E} \leftarrow \mathbf{E} \cup \text{Noeud-Enfant}(P,\text{Parent}(n),a)$\;
        }
      }
    }
    \Retour{$\emptyset$}
  }
  \caption{Algorithme de recherche général en arbre}
\end{algorithm}

Pour chercher dans un graphe, on conserve une liste des noeuds visités (la frontière ou liste fermée)
Avant de développer un noeud, on vérifie qu'il n'est pas dans la liste fermée. Une fois développé, on l'ajoute à la liste fermée.

\subsection{Évaluation des stratégies}
\label{sec:ch3strategie}

\begin{itemize}
\item Complétude: Trouve solution si $\exists$
\item Optimalité: solution trouvée est optimale?
\item Complexité de temps: Temps nécessaire pour trouver une solution, nombre de noeuds générés
\item Complexité d'espace: Quantité de mémoire nécessaire, nombre de noeuds maximum en mémoire
\end{itemize}

Quantités utilisées
\begin{itemize}
\item $b$: Facteur de branchement, nombre maximum de successeurs d'un noeud (pire cas)
\item $d$: Profondeur du noeud but le moins profond (meilleur cas)
\item $m$: Longueur maximale d'un chemin dans l'espace d'états (pire cas)
\end{itemize}

\subsection{Largeur d'abord}
\label{sec:ch3largeur}
\begin{itemize}
\item Noeuds de profondeur $i$ avant profondeur $i+1$
\item Le but est évalué après l'expansion
\item Nouveaux successeurs à la fin de la file
\end{itemize}

\begin{table}[ht]
  \centering
\begin{tabular}{p{4cm}|p{3cm}|p{4cm}}
  Propriété&Valeur&Conditions\\
  \hline
  Complétude&Oui&Si $b$ est fini\\
  Complexité en temps &$\sum_{i=0}^{d}b^i = O(b^d)$&\\
  Complexité en espace&$O(b^d)$&\\
  Optimalité&Non&Oui, si le coût des actions est constant\\
\end{tabular}
\caption{Largeur d'abord: propriétés}
\end{table}

\subsection{Coût uniforme}
\label{sec:ch3uniformcost}

\begin{itemize}
\item Noeud avec la fonction de coût la moins élevée en premier.
\item Le but est évalué avant l'expansion
\item Nouveaux successeurs dans une file triée
\end{itemize}

\begin{table}[ht]
  \centering
\begin{tabular}{p{4cm}|p{3cm}|p{4cm}}
  Propriété&Valeur&Conditions\\
  \hline
  Complétude&Oui& Si $g(n) \geq \epsilon < 0$\\
  Complexité en temps &$O(b^{\ceil{C^{\star}/{\epsilon}}})$&\\
  Complexité en espace&$O(b^{\ceil{C^{\star}/{\epsilon}}})$&\\
  Optimalité&Oui&Les noeuds sont développés en ordre de $g(n)$\\
\end{tabular}
\caption{Coût uniforme: propriétés}
\end{table}

\subsection{Profondeur d'abord}
\label{sec:ch3profondeur}

\begin{itemize}
\item Noeud le plus profond d'abord
\item Implémenté à l'aide d'une pile
\end{itemize}

\begin{table}[ht]
  \centering
\begin{tabular}{p{4cm}|p{3cm}|p{4cm}}
  Propriété&Valeur&Conditions\\
  \hline
  Complétude&Non& Si profondeur infinie ou cycles, Oui, si on évite les états répétés et que l'espace de recherche est fini\\
  Complexité en temps &$O(b^{m})$&Mauvais si $m>d$. $m < \infty$\\
  Complexité en espace&$O(bm)$&\\
  Optimalité&Non&\\
\end{tabular}
\caption{Profondeur d'abord: propriétés}
\end{table}

\subsection{Profondeur limitée}
\label{sec:ch3profondeurlimite}

\begin{itemize}
\item Noeud le plus profond d'abord
\item Implémenté à l'aide d'une pile
\end{itemize}

\begin{table}[ht]
  \centering
\begin{tabular}{p{4cm}|p{3cm}|p{4cm}}
  Propriété&Valeur&Conditions\\
  \hline
  Complétude&Oui& Si $l \geq d$\\
  Complexité en temps &$O(b^{l})$&\\
  Complexité en espace&$O(bl)$&\\
  Optimalité&Non&\\
\end{tabular}
\caption{Profondeur limitée: propriétés}
\end{table}

\subsection{Profondeur itérative}
\label{sec:ch3profondeuriter}

\begin{itemize}
\item Profondeur limitée, en itérant sur la profondeur
\item Avantage de la largeur d'abord (complet et optimal), complexité en espace linéaire de profondeur d'abord
\end{itemize}

\begin{table}[ht]
  \centering
\begin{tabular}{p{4cm}|p{3cm}|p{4cm}}
  Propriété&Valeur&Conditions\\
  \hline
  Complétude&Oui&\\
  Complexité en temps &$O(b^{d})$&\\
  Complexité en espace&$O(bd)$&\\
  Optimalité&Oui&Si le coût de chaque action est 1. Peut être modifié pour le coût uniforme\\
\end{tabular}
\caption{Profondeur itérative: propriétés}
\end{table}

\subsection{Recherche bidirectionnelle}
\label{sec:ch3bidirectionnelle}

\begin{itemize}
\item Recherche simultanée depuis le départ et le but
\item Applicable seulement si on peut rechercher depuis le but
\end{itemize}

\begin{table}[ht]
  \centering
\begin{tabular}{p{4cm}|p{3cm}|p{4cm}}
  Propriété&Valeur&Conditions\\
  \hline
  Complétude&Oui&\\
  Complexité en temps &$O(b^{d/2})$&\\
  Complexité en espace&$O(b^{d/2})$&\\
  Optimalité&Oui&\\
\end{tabular}
\caption{Recherche bidirectionnelle: propriétés}
\end{table}


%%% Local Variables:
%%% mode: latex
%%% TeX-master: "notes_de_cours"
%%% End:

