From cf14678c7aa8faab0e85873583c743ae9cd28bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Pelletier?= Date: Sun, 25 Feb 2018 22:44:15 -0500 Subject: [PATCH] Notes ch 1 et partie ch 2 --- chapitre1.tex | 146 +++++++++++++++++++++++++++++++++++++++++++++ chapitre2.tex | 95 +++++++++++++++++++++++++++++ chapitre3.tex | 7 +++ chapitre4.tex | 7 +++ notes_de_cours.tex | 20 ++++++- pagetitre.tex | 7 ++- 6 files changed, 280 insertions(+), 2 deletions(-) diff --git a/chapitre1.tex b/chapitre1.tex index e69de29..8e0cde3 100644 --- a/chapitre1.tex +++ b/chapitre1.tex @@ -0,0 +1,146 @@ +\section{Chapitre 1: Introduction} +\label{sec:ch1} + +\subsection{NP-Complétude} +\label{sec:ch1npc} + +\paragraph{Instance SAT} + +\begin{itemize} +\item $x_i \in \lbrace 0,1 \rbrace$ +\item Un \textbf{litéral}: $x_i$ ou $\neg x_i$ +\item Une \textbf{clause} SAT = disjonction de litéraux +\item Une \textbf{solution} satisfait l'ensemble des clauses de l'\textbf{instance} +\item Si au moins une solution existe, l'instance est réalisable ou \textbf{satisfiable} +\end{itemize} + +\paragraph{La classe NP} + +\begin{itemize} +\item \textbf{Problème de décision}: La réponse est \textit{oui} ou \textit{non} +\item \textbf{Certificat}: Donnée prouvant que la solution au problème de décision est \textit{oui} +\item \textbf{Algorithme de vérification}: vérifie si une donnée est un certificat valide +\item \textbf{Classe NP}: Ensemble des problèmes de décision qui admettent un algorithme de vérification en temps polynomial. +\end{itemize} + +\subsection{Problèmes de satisfaction et d'optimisation avec contraintes} +\label{sec:ch1propt} + +\paragraph{Satisfaction} + +\begin{itemize} +\item Variables: $x_1, \ldots, x_n$ +\item Domaine: $\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$ +\item Contraintes: $C_1, \ldots, C_m$ +\end{itemize} + +\paragraph{Optimisation} + +\begin{itemize} +\item Reprend les éléments du problème de satisfaction +\item Ajoute une fonction objectif réelle à minimiser ou maximiser: $f(x_1, \ldots, x_n): \R$ +\end{itemize} + +\subsection{Contraintes} +\label{sec:ch1cont} + +\begin{itemize} +\item \textbf{Contrainte}: condition imposée à un sous-ensemble de variables, appelé \textbf{portée}. +\item \textbf{Arité}: nombre de variables dans la portée +\end{itemize} + +\paragraph{Quelques contraintes} + +\begin{itemize} +\item $\textsc{Ou}(x_1,x_2) \equiv x_1 \vee x_2$ +\item $\textsc{Et}(x_1,x_2) \equiv x_1 \wedge x_2$ +\item $\textsc{Addition}(a,b,c) \equiv a+b=c$ +\item $\textsc{Soustraction}(a,b,c) \equiv a-b=c$ +\item $\textsc{Multiplication}(a,b,c) \equiv ab=c$ +\item $\textsc{Division}(a,b,c) \equiv \frac{a}{b}=c$ +\item $\textsc{Tableau}(x_1,x_2,x_3,T)$ +\item $\textsc{AllDifferent}(x_1, \ldots, x_n) \equiv x_1 \neq \ldots \neq x_n$ +\item $\textsc{Croissant}(x_1,x_2) \equiv x_1 \leq x_2$ +\item $\textsc{Décroissant}(x_1,x_2) \equiv x_1 \geq x_2$ +\end{itemize} + +\subsection{Modélisation} + +\begin{enumerate} +\item Utiliser les contraintes du solveur +\item Concevoir un modèle: + \begin{itemize} + \item Variables + \item Domaines + \item Fonction objectif + \item Contraintes + \end{itemize} +\item Soumettre un modèle au solveur +\item Recevoir une solution +\end{enumerate} + +\paragraph{Exemple} + +Problème du commis voyageur: Figure \ref{fig:ch1commis} + +\begin{figure}[ht] + \centering + \begin{tikzpicture} + \Vertex[x=0,y=0]{A} + \Vertex[x=4,y=0]{B} + \Vertex[x=0,y=4]{C} + \Vertex[x=4,y=4]{D} + \Edge[label= $1$](A)(B) + \Edge[label= $3$](A)(C) + \Edge[label= $2$](B)(D) + \Edge[label= $6$](C)(D) + \tikzset{EdgeStyle/.append style = {bend left}} + \Edge[label= $1$](A)(D) + \tikzset{EdgeStyle/.append style = {bend right}} + \Edge[label= $5$](B)(C) + \end{tikzpicture} + \caption{Exemple de problème du commis voyageur} + \label{fig:ch1commis} +\end{figure} + +\begin{align} + \begin{aligned} + \argmin_{d_0 \ldots d_3} & \left( d_0+ \ldots +d_3 \right) \\ + \textrm{s.t.} &\\ + &\mathtt{dom}(x_i) = \lbrace A,B,C,D \rbrace & \forall i \in {0,\ldots,3}\\ + &\mathtt{dom}(d_i) = \lbrace 1,2,3,5,6 \rbrace & \forall i \in {0,\ldots,3}\\ + &\textsc{Tableau}(x_i,x_{i+1 mod 4}, d_i, T) & \forall i \in {0,\ldots,3}\\ + &x_i \neq x_j & 0 \leq i \leq j \leq 3 + \end{aligned} +\end{align} + +\paragraph{Caractéristiques d'un bon modèle} + +\begin{itemize} +\item Taille d'un modèle: + \begin{itemize} + \item Nombre de variables + \item Nombre de contraintes (une ligne dans un tableau = une contrainte) + \item Cardinalité des domaines + \end{itemize} +\item Notation asymptotique $\mathcal{O}$ ou $\mathcal{\Theta}$ +\item Taille polynomiale +\end{itemize} + +\paragraph{Exemple} + +Problème du commis voyageur + +\begin{itemize} +\item $2n$ variables +\item $n^2+\frac{n^2(n+1)}{2} \in \mathcal{\Theta}(n^3)$ valeurs +\item $n$ contraintes tableau $+\frac{n(n+1)}{2}$ différences $\in \Theta(n^2)$ +\end{itemize} + + + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "notes_de_cours" +%%% End: diff --git a/chapitre2.tex b/chapitre2.tex index e69de29..702a5a9 100644 --- a/chapitre2.tex +++ b/chapitre2.tex @@ -0,0 +1,95 @@ +\section{Chapitre 2: Fouille et filtrage} +\label{sec:ch2} + +\subsection{Processus de résolution} +\label{sec:ch2res} + +\paragraph{Énumération} + +\begin{itemize} +\item Force brute: énumérer toutes les solutions candidates +\item Itération et filtration +\item Au moins une unité de temps sur chaque solution candidate +\item Compléxité dans + \begin{align} + \Omega \left( \prod_{i=1}^{n} \| \texttt{dom}(x_i) \| \right) + \end{align} +\item Fondement des algorithmes les plus sophistiqués +\end{itemize} + +\paragraph{Fouille en profondeur} + +\begin{itemize} +\item Créer un arbre de recherche +\item Chaque noeud équivaut à une solution partielle +\item Ordre de visite: + \begin{itemize} + \item Racine + \item Premier enfant non visité depuis la gauche + \item Si tous les enfants visités, retour au noeud parent + \end{itemize} +\item Validité + \begin{itemize} + \item Doit visiter toutes les solutions candidates possibles + \item Ne devrait pas visiter deux fois la même solution partielle ou candidate + \end{itemize} +\item Décisions de l'arbre de recherche: \textbf{heuristique} décide de la politique de choix +\item Voir Algorithme \ref{alg:fouilleprofcomp}: $K$=Solution candidate, $P$=Solution partielle, $S$=Solution +\end{itemize} + +\begin{algorithm} + \DontPrintSemicolon + \Deb{ + \Repeter{$S \neq \emptyset$}{ + $K \leftarrow \lbrace x_i \mid \left\lVert \mathtt{dom}(x_i) > 1 \right\rVert \rbrace$ \; + \Si{$K = \emptyset$}{ + \Si{$\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n) \text{ satisfait contraintes}$}{ + \Retour{$\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$} + } + \Sinon{\Retour{$\emptyset$}} + } + Choisir une variable $x_i \in K$\; + Choisir une valeur $v\in \mathtt{dom}(x_i)$\; + $S \leftarrow \texttt{FouilleEnProfondeurComplète}(\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_{i-1}),\lbrace v \rbrace, \mathtt{dom}(x_{x+1}), \ldots, \mathtt{dom}(x_{n}))$\; + \Si{$S=\emptyset$}{$\mathtt{dom}(x_i) \leftarrow \mathtt{dom}(x_i) \setminus \lbrace v \rbrace$} + } + \Retour{$S$} + } +\caption{FouilleEnProfondeurComplète($\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$)} +\label{alg:fouilleprofcomp} +\end{algorithm} + +\paragraph{Fouille en profondeur avec retours arrières} + +On améliore l'algorithme précédent en validant les contraintes pour chaque solution partielle. Algorithme \ref{alg:fouilleprofretarr}. Seul un sous-ensemble des noeuds est exploré. Permet de résoudre certains problèmes en temps polynomial. + +\begin{algorithm} + \DontPrintSemicolon + \Deb{ + \Repeter{$S \neq \emptyset$}{ + $K \leftarrow \lbrace x_i \mid \left\lVert \mathtt{dom}(x_i) > 1 \right\rVert \rbrace$ \; + $P \leftarrow \lbrace x_i \mid \left\lVert \mathtt{dom}(x_i) = 1 \right\rVert \rbrace$ + \Pour{$C_j \in \mathcal{C}$}{ + \Si{$Portée(C_j) \subseteq P \wedge \neg C_j$}{\Retour{$\emptyset$}} + } + \Si{$C = \emptyset$}{ \Retour{$\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$}} + Choisir une variable $x_i \in K$\; + Choisir une valeur $v\in \mathtt{dom}(x_i)$\; + $S \leftarrow \texttt{FouilleEnProfondeurRetArr}(\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_{i-1}),\lbrace v \rbrace, \mathtt{dom}(x_{x+1}), \ldots, \mathtt{dom}(x_{n}))$\; + \Si{$S=\emptyset$}{$\mathtt{dom}(x_i) \leftarrow \mathtt{dom}(x_i) \setminus \lbrace v \rbrace$} + } + \Retour{$S$} + } +\caption{FouilleEnProfondeurRetArr($\mathtt{dom}(x_1), \ldots, \mathtt{dom}(x_n)$)} +\label{alg:fouilleprofretarr} +\end{algorithm} + +\paragraph{Vérification anticipée} + + + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "notes_de_cours" +%%% End: diff --git a/chapitre3.tex b/chapitre3.tex index e69de29..53ed12d 100644 --- a/chapitre3.tex +++ b/chapitre3.tex @@ -0,0 +1,7 @@ +\section{Chapitre 3} +\label{sec:ch3} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "notes_de_cours" +%%% End: diff --git a/chapitre4.tex b/chapitre4.tex index e69de29..1f50d20 100644 --- a/chapitre4.tex +++ b/chapitre4.tex @@ -0,0 +1,7 @@ +\section{Chapitre 4} +\label{sec:ch4} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "notes_de_cours" +%%% End: diff --git a/notes_de_cours.tex b/notes_de_cours.tex index 7b37d56..6e29511 100644 --- a/notes_de_cours.tex +++ b/notes_de_cours.tex @@ -49,14 +49,32 @@ \usepackage{color} % Pour inclure du texte en couleur \usepackage{units} % Pour pouvoir tapper les unités correctement \usepackage{pgf,tikz} % Utilisation du module tikz, qui permet de tracer des belles images -\usetikzlibrary{shapes.geometric, arrows} % Quand on exporte une image GeoGebra, on a besoin de préciser cela +\usepackage{tkz-graph} +\usetikzlibrary{shapes.geometric,arrows} % Quand on exporte une image GeoGebra, on a besoin de préciser cela +\usepackage[upright]{fourier} \usepackage{hyperref} % Pour include des liens dans le document +\usepackage[linesnumbered,vlined,boxruled,algosection,french,frenchkw]{algorithm2e} \newcommand{\N}{\mathbb{N}} % Commande personnelle, plus rapide pour tapper les ensembles \newcommand{\Z}{\mathbb{Z}} % Commande personnelle, plus rapide pour tapper les ensembles \newcommand{\R}{\mathbb{R}} % Commande personnelle, plus rapide pour tapper les ensembles +\DeclareMathOperator*{\argmax}{arg\,max} +\DeclareMathOperator*{\argmin}{arg\,min} \usepackage{cprotect} % Pour pouvoir personaliser la légende des figures %---------------------------------------------------------------- +%graph-colors------------------ + +\SetVertexNormal[Shape = circle, + FillColor = orange, + LineWidth = 2pt] +\SetUpEdge[lw = 1.5pt, + color = black, + labelcolor = white, + labeltext = blue, + labelstyle = {sloped,draw,text=blue}] + +%------------------------------ + \begin{document} \input{pagetitre} % Inclut le code contenu dans un fichier comme s'il était entré ici \tableofcontents diff --git a/pagetitre.tex b/pagetitre.tex index 148577d..5d6aa6c 100755 --- a/pagetitre.tex +++ b/pagetitre.tex @@ -4,10 +4,15 @@ \begin{center} % On centre le texte {\huge \bf \titre}\\ % \huge fait que le texte est gros, \bf fait que le texte est gras \vspace{4cm} -\large Travail présenté à \destinataire \\ \cours\\ +\large Dans le cadre du cours \destinataire \\ \cours\\ \vspace{4cm} Réalisé par \\ \auteurs ;\\ \matricules \vfill % On va jusqu'au bas de la page avant de mettre le texte ci-dessous Dernière version produite le~\today~à~\currenttime \pagebreak \end{center} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "notes_de_cours" +%%% End: