Notes ch 1 et partie ch 2
This commit is contained in:
parent
868fc9ea47
commit
cf14678c7a
6 changed files with 280 additions and 2 deletions
146
chapitre1.tex
146
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:
|
|
@ -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:
|
|
@ -0,0 +1,7 @@
|
|||
\section{Chapitre 3}
|
||||
\label{sec:ch3}
|
||||
|
||||
%%% Local Variables:
|
||||
%%% mode: latex
|
||||
%%% TeX-master: "notes_de_cours"
|
||||
%%% End:
|
|
@ -0,0 +1,7 @@
|
|||
\section{Chapitre 4}
|
||||
\label{sec:ch4}
|
||||
|
||||
%%% Local Variables:
|
||||
%%% mode: latex
|
||||
%%% TeX-master: "notes_de_cours"
|
||||
%%% End:
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue