368 lines
14 KiB
TeX
368 lines
14 KiB
TeX
\documentclass[a4paper,french,12pt]{article}
|
|
|
|
\title{Optimisation et complexité}
|
|
\author{}
|
|
\date{Dernière compilation~: \today{} à \currenttime}
|
|
|
|
\usepackage{styles}
|
|
\usepackage{tikz}
|
|
\usetikzlibrary{shapes.multipart}
|
|
\usepackage{xfrac}
|
|
\usepackage{xcolor,colortbl}
|
|
\definecolor{Red}{rgb}{1,0.2,0.2}
|
|
\newcolumntype{r}{>{\columncolor{Red}}Y}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
\tableofcontents
|
|
|
|
\clearpage
|
|
|
|
\section{Introduction}
|
|
|
|
\subsection{Définition}
|
|
|
|
L'optimisation est une branche des mathématiques cherchaant à modéliser, analyser et résoudre des problèmes.
|
|
|
|
Un problème d'optimisation est un problème de \emph{minimisation} ou de \emph{maximisation}.
|
|
|
|
\subsection{Classification}
|
|
|
|
Il y a deux grandes classes de problèmes d'optimisation~:
|
|
|
|
\begin{enumerate}
|
|
|
|
\item Mono-objectif~:
|
|
|
|
Un seul objectif à atteindre.
|
|
Sa résolution conduit à la solution optimale.
|
|
|
|
\item Multi-objectif~:
|
|
|
|
Plusieurs objectifs à atteindre.
|
|
La résolution donne lieu à un ensemble de solutions.
|
|
|
|
\end{enumerate}
|
|
|
|
\subsection{Conception}
|
|
|
|
\begin{itemize}
|
|
|
|
\item Les décideurs (DM)
|
|
|
|
\item Objectifs
|
|
|
|
\item Contraintes
|
|
|
|
\item Caractéristiques
|
|
|
|
\end{itemize}
|
|
|
|
\subsection{Exemple}
|
|
|
|
\begin{align*}
|
|
\mathrm{Max}\; Z(x) = 3x_1 + 2x_2 \text{ tel que }
|
|
\left\{
|
|
\begin{array}{l}
|
|
2x_1 + x_2 \leq 30 \; (d_1) \\
|
|
x_1 - 2x_2 \geq 10 \; (d_2) \\
|
|
x_1 \geq 0 \\
|
|
x_2 \geq 0 \\
|
|
\end{array}
|
|
\right.
|
|
\end{align*}
|
|
|
|
\begin{center}
|
|
\begin{tikzpicture}[xscale=0.1,yscale=0.1]
|
|
\fill [red!30,domain=0:2,variable=\x]
|
|
(0,0) -- (0,30) -- (14,2) -- (10,0) -- cycle
|
|
;
|
|
\draw[-latex] (-10,0) -- (40,0) node[below]{$x_1$};
|
|
\draw[-latex] (0,-10) -- (0,40) node[right]{$x_2$};
|
|
\draw[thick, teal](-5,40) -- (20,-10);
|
|
\node at (23,-7) {$d_1$};
|
|
\draw[thick, teal](-10,-10) -- (30,10);
|
|
\node at (20,10) {$d_2$};
|
|
\end{tikzpicture}
|
|
\end{center}
|
|
|
|
\section{Programmation Linéaire}
|
|
|
|
\subsection{Modélisation}
|
|
|
|
Afin de modéliser un problème linéaire, il faut suivre certaines étapes~:
|
|
|
|
\begin{itemize}
|
|
|
|
\item chercher les variables
|
|
|
|
\item chercher les fonctions
|
|
|
|
\item chercher les contraintes
|
|
|
|
\end{itemize}
|
|
|
|
\paragraph{Exemple --- Problème de maximisation}
|
|
|
|
Une machine MA met 1h à produire Pdt1 avec 2kg de MP1 et 9kg de MP2, ce qui entaîne un profit unitaire de 50€.
|
|
Une machine MA met 2h à produire Pdt1 avec 2kg de MP1 et 4kg de MP2, ce qui entaîne un profit unitaire de 60€.
|
|
Les contraintes sont le temps de disponibilité de la machine MA et la quantité de matière première disponible (8h, 10kg de MP1 et 36kg de MP2).
|
|
|
|
\begin{multicols}{2}
|
|
|
|
\begin{tabularx}{\linewidth}{lYYY}
|
|
\toprule
|
|
& Pdt1 & Pdt2 & Dispo \\
|
|
\toprule
|
|
MA & 1h & 2h & 8h \\
|
|
\midrule
|
|
MP1 & 2kg & 2kg & 10kg \\
|
|
\midrule
|
|
MP2 & 9kg & 4kg & 36kg \\
|
|
\midrule
|
|
Profit & 50€ & 60€ & \\
|
|
\bottomrule
|
|
\end{tabularx}
|
|
|
|
\begin{equation*}
|
|
Z = 50x_1 + 60x_2 \text{ avec }
|
|
\left\{
|
|
\begin{array}{l}
|
|
x_1 + 2x_2 \leq 8 \\
|
|
2x_1 + 2x_2 \leq 10 \\
|
|
9x_1 + 4x_2 \leq 36 \\
|
|
\end{array}
|
|
\right.
|
|
\end{equation*}
|
|
|
|
\end{multicols}
|
|
|
|
\subsection{Résolution}
|
|
|
|
Il y a deux types de résolutions, suivant le nombre de variables rencontrées.
|
|
|
|
\begin{itemize}
|
|
|
|
\item \textbf{Méthode graphique} ---
|
|
Pour les problèmes linéaires à deux ou trois variables maximum.
|
|
Avec deux variables on utilise un plan simple ($x_1 = x$ et $x_2 = y$).
|
|
Avec trois variables on utilise un espace à 3 dimensions.
|
|
|
|
\item \textbf{Méthode de simplexe} ---
|
|
Adapté à tout type de problèmes linéaires même les plus complexes.
|
|
|
|
\end{itemize}
|
|
|
|
\subsubsection{Méthode graphique}
|
|
|
|
La résolution graphique se fait en trois étapes~:
|
|
|
|
\begin{enumerate}
|
|
|
|
\item Représentation de la région réalisable
|
|
|
|
\item Représentation de la fonction objectif
|
|
|
|
\item Détermination de la solution optimale
|
|
|
|
\end{enumerate}
|
|
|
|
Si la région est bornée, il existe une solution optimale.
|
|
Si la région n'est pas bornée, il n'existe pas de solution optimale pour minimiser, maximiser, ou les deux.
|
|
|
|
Il faut alors trouver la solution optimale.
|
|
|
|
\paragraph{Méthode de recensement des sommets}
|
|
|
|
Il s'agit de comparer chacun des sommets à la valeur de l'objectif.
|
|
On calcule donc l'écart.
|
|
La plus grande valeur réalise le maximum, la plus petite valeur réalise le minimum.
|
|
|
|
\paragraph{Méthode des droites parallèles}
|
|
|
|
On trace la droite correspondant à l'objectif, puis on la translate de manière parallèle jusqu'à ce qu'elle croise le point maximum dans le cas d'une maximisation, ou le point minimum dans le cas d'une minimisation.
|
|
|
|
\subsubsection{Méthode de simplexe}
|
|
|
|
Dans la pratique, les programmes linéaires comportent plusieurs dizaines de variables et de contraintes.
|
|
Une résolution par la méthode graphique n'est alors pas possible.
|
|
Il faut donc utiliser une méthode algébrique.
|
|
|
|
\paragraph{Forme standard}
|
|
|
|
Avec la forme standard, les equations sont représentées sous forme d'égalités (pas de $\leq$ ou de $\geq$, juste des $=$).
|
|
La première étape est donc de passer sous la forme standard.
|
|
|
|
Pour cela, on ajoute des variables à chaque equation pour la ``compléter''~:
|
|
\begin{align*}
|
|
\left\{
|
|
\begin{array}{l}
|
|
2x_1 + x_2 \leq 3 \\
|
|
3x_1 - x_2 \leq 4 \\
|
|
x_1, x_2 \geq 0 \\
|
|
\end{array}
|
|
\right.
|
|
\implies
|
|
\left\{
|
|
\begin{array}{l}
|
|
2x_1 + x_2 + x_3 = 3 \\
|
|
3x_1 - x_2 + x_4 = 4 \\
|
|
x_1, x_2, x_3, x_4 \geq 0 \\
|
|
\end{array}
|
|
\right.
|
|
\end{align*}
|
|
|
|
On peut également la représenter sous forme matricielle~:
|
|
\begin{align*}
|
|
\begin{pmatrix}
|
|
2 & 1 & 1 & 0 \\
|
|
3 & -1 & 0 & 1 \\
|
|
\end{pmatrix}
|
|
\begin{pmatrix}
|
|
x_1 \\
|
|
x_2 \\
|
|
x_3 \\
|
|
x_4 \\
|
|
\end{pmatrix}
|
|
=
|
|
\begin{pmatrix}
|
|
3 \\
|
|
4 \\
|
|
\end{pmatrix}
|
|
\end{align*}
|
|
|
|
\paragraph{Tableau}
|
|
|
|
La méthode simplexe est une solution itérative pour la résolution des programmes linéaires.
|
|
Une représentation sous forme de tableau facilite considérablement les calculs de la méthode.
|
|
|
|
\paragraph{Principe de résolution}
|
|
|
|
En appliquant la méthode simplexe au programme linéaire suivant~:
|
|
\begin{align*}
|
|
\mathrm{Max}Z = 300x_1 + 500 x_2 \\
|
|
\left\{
|
|
\begin{array}{l}
|
|
x_1 \leq 4 \\
|
|
2x_2 \leq 12 \\
|
|
3x_1 + 2x_2 \leq 18 \\
|
|
x_1, x_2 \geq 0
|
|
\end{array}
|
|
\right.
|
|
\end{align*}
|
|
|
|
\begin{itemize}
|
|
|
|
\item Passage à la forme standard~:
|
|
\begin{align*}
|
|
\mathrm{Max}Z = 300x_1 + 500 x_2 \\
|
|
\left\{
|
|
\begin{array}{l}
|
|
x_1 + x_3 = 4 \\
|
|
2x_2 + x_4 = 12 \\
|
|
3x_1 + 2x_2 + x_5 = 18 \\
|
|
x_1, x_2, x_3, x_4, x_5 \geq 0
|
|
\end{array}
|
|
\right.
|
|
\end{align*}
|
|
|
|
\item Expression sous forme matricielle~:
|
|
\begin{align*}
|
|
A =
|
|
\begin{pmatrix}
|
|
1 & 0 & 1 & 0 & 0 \\
|
|
0 & 2 & 0 & 1 & 0 \\
|
|
3 & 2 & 0 & 0 & 1 \\
|
|
\end{pmatrix}
|
|
\quad B =
|
|
\begin{pmatrix}
|
|
4 \\
|
|
12 \\
|
|
18 \\
|
|
\end{pmatrix}
|
|
\quad C =
|
|
\begin{pmatrix}
|
|
300 & 500 & 0 & 0 & 0 \\
|
|
\end{pmatrix}
|
|
\end{align*}
|
|
|
|
\item Tableau initial~:
|
|
\begin{tabularx}{0.7\linewidth}{|Y|Y|Y|Y|Y|Y|Y|Y|}
|
|
\hline
|
|
Max & \multicolumn{2}{|c|}{$C_i$} & 300 & 500 & 0 & 0 & 0 \\
|
|
\hline
|
|
$C_B$ & $B$ & $b$ & $x_1$ & $x_2$ & $x_3$ & $x_4$ & $x_5$ \\
|
|
\hline
|
|
0 & $x_3$ & 4 & 1 & 0 & 1 & 0 & 0 \\
|
|
0 & $x_4$ & 12 & 0 & 2 & 0 & 1 & 0 \\
|
|
0 & $x_5$ & 18 & 3 & 2 & 0 & 0 & 1 \\
|
|
\hline
|
|
& $Z_i$ & 0 & 0 & 0 & 0 & 0 & 0 \\
|
|
\hline
|
|
& \multicolumn{2}{|c|}{$C_i - Z_i$} & 300 & 500 & 0 & 0 & 0 \\
|
|
\hline
|
|
\end{tabularx}
|
|
|
|
\item Changement de base~:
|
|
|
|
On veut augmenter la valeur $Z$.
|
|
On va donc examiner une nouvelle solution de base.
|
|
Pour cela, on remplace une variable dans la base (variable sortante) par une autre (variable entrante).
|
|
|
|
Dans la dernière ligne ($C_i - Z_i$), le coefficient le plus élevé donne la \emph{colonne pivot}.
|
|
|
|
Il faut ensuite sélectionner la \emph{ligne pivot}.
|
|
Elle correspond au minimum du rapport des coefficients du vecteur $b$ sur les coefficients correspondant de la colonne pivot (si ce dernier est $> 0$).
|
|
|
|
\begin{center}
|
|
\begin{tabularx}{0.7\linewidth}{|Y|Y|Y|Y|r|Y|Y|Y|}
|
|
\hline
|
|
Max & \multicolumn{2}{|c|}{$C_i$} & 300 & 500 & 0 & 0 & 0 \\
|
|
\hline
|
|
$C_B$ & $B$ & $b$ & $x_1$ & $x_2$ & $x_3$ & $x_4$ & $x_5$ \\
|
|
\hline
|
|
0 & $x_3$ & 4 & 1 & 0 & 1 & 0 & 0 \\
|
|
\rowcolor{Red}
|
|
0 & $x_4$ & 12 & 0 & 2 & 0 & 1 & 0 \\
|
|
0 & $x_5$ & 18 & 3 & 2 & 0 & 0 & 1 \\
|
|
\hline
|
|
& $Z_i$ & 0 & 0 & 0 & 0 & 0 & 0 \\
|
|
\hline
|
|
& \multicolumn{2}{|c|}{$C_i - Z_i$} & 300 & 500 & 0 & 0 & 0 \\
|
|
\hline
|
|
\end{tabularx}
|
|
\end{center}
|
|
|
|
\item Pivotage~:
|
|
|
|
Le pivotage va nous donner un deuxième tableau. \\
|
|
Transformer la ligne pivot~: diviser tous ses éléments par le pivot. \\
|
|
Transformer la colonne pivot~: les éléments au dessous et en dessous du pivot deviennent 0. \\
|
|
Pour les autres cases, on applique la règle du \emph{rectangle}~: $a' = a - \frac{b\times c}{\text{pivot}}$.
|
|
|
|
\begin{center}
|
|
\begin{tabularx}{0.7\linewidth}{|Y|Y|Y|Y|Y|Y|Y|Y|}
|
|
\hline
|
|
Max & \multicolumn{2}{|c|}{$C_i$} & 300 & 500 & 0 & 0 & 0 \\
|
|
\hline
|
|
$C_B$ & $B$ & $b$ & $x_1$ & $x_2$ & $x_3$ & $x_4$ & $x_5$ \\
|
|
\hline
|
|
0 & $x_3$ & 4 & 1 & 0 & 1 & 0 & 0 \\
|
|
500 & $x_2$ & 6 & 0 & 1 & 0 & $\sfrac{1}{2}$ & 0 \\
|
|
0 & $x_5$ & 6 & 3 & 0 & 0 & -1 & 1 \\
|
|
\hline
|
|
& $Z_i$ & 3000 & 0 & 500 & 0 & 250 & 0 \\
|
|
\hline
|
|
& \multicolumn{2}{|c|}{$C_i - Z_i$} & 300 & 0 & 0 & -250 & 0 \\
|
|
\hline
|
|
\end{tabularx}
|
|
\end{center}
|
|
|
|
D'après ce tableau, la deuxième solution de base réalisable est $x_{B2} = (0,6,4,0,6)$, et la valeur de la fonction $Z$ en $x_{B2} = 3000$.
|
|
|
|
On atteint le maximum de la fonction quand il n'y a plus de coefficients positifs dans la dernière ligne.
|
|
|
|
\end{itemize}
|
|
|
|
\end{document}
|