\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}
