On peut déduire de la structure des exemples précédents un certain nombre d'informations:
Avant d'aller plus loin, il est intéressant de se poser la question de savoir si toutes ces observations sont pérennes.
Ensembles convexes et non convexes
Considérons le quadran $\mathrm{A}$ de la figure ci-dessus, où on a laissé en fins pointillés les droites qui supportent les frontières des inégalités qui forment le polyèdre des points faisables, afin que le lecteur puisse s'appercevoir qu'elles peuvent tout aussi bien être du type $\geq$ que du type $\leq$. Après l'exemple traité, on peut constater que, si tant est que l'ensemble délimité par les contraintes est convexe, on trouvera toujours une configuration des paramètres $(a_1, a_2)$ telle que chaque sommet et chaque arrête du polygone puisse être solution d'un problème de maximisation. On constate aussi que chaque sommet demeure solution tant que la rotation de l'objectif demeure dans l'angle saillant qui a été représenté sur le sommet, puis devient un côté du polygone$\ldots$
Il est aussi aisé de s'apercevoir qu'en aucun cas, les solutions sont des points intérieurs. La convexité est aussi fondamentale pour que tout sommet soit candidat à être un optimum. Considérons le quadran $\mathrm{B}$ de la figure ci-dessus.
Il est évident que $A$ ne peut pas être un optimum pour l'objectif représenté par la ligne en pointillés qui passe par $A$. Tous les sommets du polygone ne peuvent être des optima que si le polygone est convexe. Tous les ensembles d'inégalités dans $\mathbb{R}^2$ conduisent-ils à la construction d'un polygone ? Non. Observez le graphique ci-dessous. Il est construit à partir de deux inégalités incompatibles. Il ne donne donc pas naissance à un domaine de points réalisables.
Peut-on considérer des contraintes strictes? La question est difficile mais doit être réglée une fois pour toute. Considérons les trois cadrans de la figure ci-après.
Contraintes inégalitaires strictes
On constate que dans le cas de la contrainte représentée au quadran $(A)$ de la figure ci-dessus, il n'existe aucune solution unique pour toute pente de l'objectif. Ceci provient du fait que la frontière n'appartient pas au domaine.
En ce qui concerne la contrainte représentée au quadran $(B)$, il existe de manière évidente trois points qui sont potentiellement des solutions uniques et, sur les quatre côtés du polygone, seuls deux peuvent être solution (tout dépend de la pente de l'objectif). Enfin, dans le cas de la dernière contrainte représentée au quadran $(C)$ , tous les sommets peuvent être des optima. Seul un côté ne peut pas l'être. Toutes ces configurations posent des difficultés qui doivent être éliminées d'une présentation canonique de la programmation linéaire C'est pourquoi, en général, elles ne sont pas traitées.
Ceci nous indique que pour tous les problèmes représentables dans $\mathbb{R}^2$, il n'est pas nécessaire d'utiliser les instruments plus lourds qui seront développés par la suite, mais qu'il est préférable de suivre la démarche suivante:
Il est important d'apprendre au plus vite à se servir du logiciel qui va être le support du cours. Ce qui est présenté ici n'est pas forcément facile pour un débutant. Mais il n'y a pas d'autre voie. À moins d'être informatitien, il n'y a qu'en se confrontant à un problème réel qu'on peut comprendre comment faire. Pour ce faire et éviter au maximum d'être obligé de réaliser des dessins à la main, voici comment tracer le domaine délimité par les contraintes, de trouver les sommets du polygone et dévaluer l'optimum, tout ceci pour les problèmes en dimension 2. Considérons l'ensemble de contraintes suivant :
\[ \begin{array}{l} x_1 - 2 x_0 \geq 20\\ 2 x_1 + x_0 \geq 22\\ -x_1 + x_0 \geq 5 \end{array} \]Pour tracer le domaine délimité par ces équations, il faut les mettre sous la forme
\[ x_2 \lesseqqgtr \mathrm{lin}(x_1) \]expression dans laquelle le symbol $\lesseqqgtr$ est utilisé pour signifier soit $\geq$, soit $\leq$ selon le cas mais certainement pas les deux et où $\mathrm{lin}$ signifie qu'il s'agit d'une expression linéaire en $x_1$. Évidemment, on peut réaliser cette opération à la main, mais il est tellement plus simple de demander à l'ordinateur de le faire. La cellule suivante permet de réaliser cela sur la première équation.
En ce qui concerne le résultat, il est affiché en deux éléments : la frontière des points faisables (signe =) et le domaine intérieur des points faisables dans lequel doit se trouver $x_2$. On peut récupérer l'un comme l'autre, mais ici on n'a besoin que de créer une fonction linéaire pour tracer la frontière. Attention, le serveur ne conserve pas longtemps les résultats. Donc en cas de cellules liées, il est nécessaire de ne pas trop attendre pour lancer la suivante, snon il est nécessaire de les relancer toutes.
Attention : $\mathrm{LatexExpr(..)}$ n'est qu'un ornement de présentation. $\texttt{SageMath}$ ne connaît pas $f_1(x_1)$ mais $f1(x_1)$. Il est maintenant possible de tracer cette fonction.
Ici :
Si ces couleurs ne suffisent pas il existe d'autres possibilités comme d'avoir accès aux couleurs HTML. Par exemple, on remplacera 'aquamarine' par fillcolor='#DC0005'. C'est peut-être la méthode la plus simple, parce qu'en cherchant sur le net on peut trouver des colors pickers comme celui qui suit Un Color Picker. L'inconvénient, c'est qu'on risque de rechercher dans un fichier une couleur à l'aveuglette si ce fichier comprend beaucoup de couleurs. Une solution c'est de la sauvegarder sous un nom et de l'appeler par ce nom. Par exemple, on insérera dans le codevenetianred='#DC0005' et on passera la couleur par fillcolor=venetianred..
On peut maintenant regrouper la représentation des trois équations en utilisant des couleurs différentes pour voir ce qui se produit. Cela va être fait en deux temps parce qu'il faut observer le sens des inégalités avant de pouvoir obtenir le domaine des points faisables.
En observant $S1$, $S2$ et $S3$, on en conclut que les deux premières inégalités sont
dans le même sens, mais que la troisième est dans le sens contraire. On obtient donc le graphique désiré comme suit :
Ainsi, l'ensemble des points faisables est clairement établi. Mais on peut encore améliorer sa présentation en coloriant complètement le polygone formé par ces points. Pour ce faire, il est nécessaire d'avoir accès à ses sommets. Or, ceux-ci sont délimités par les intersections des frontières des inégalités auxquelles il ne faut pas oublier de rajouter les inégalités constituées par les conditions de positivité. Mais attention, comme le montre une observation du graphique toutes les intersections ne sont pas valides. Voici comment on peut opérer pour obtenir les intersections valides : deux sont le résultat des intersections des droites frontières de faisabilité, deux peuvent se calculer directement soit comme $f_2(0) = x_1$, soit comme $f3(x_0)=0$. On va commencer par se concentrer sur les deux autres sommets. En d'autres termes, on a besoin de : \[ \begin{array}{cl} (x_0,x_1)^a &(x_0,x_1)= (0,0)\\ x_0,x_1)^b & x_0 = 0, x_1 = f1(0) \\ (x_0,x_1)^c & x_0 \text{ solution de } f1(x_ 0)=f2(x_ 0), x_1 = f1(x_0)=f2(x_0)\\ (x_0,x_1)^d & x_0 \text{ solution de } f1(x_ 0)=f3(x_ 0), x_1 = f1(x_0)=f3(x_0)\\ (x_0,x_1)^e & x_0 \text{ solution de } 0=f3(x_0),x_1=0 \end{array} \]
On dispose de tous les points. On peut donc les positionner sur le graphique. Mais au paravant, il est peut-être nécessaire de commenter le code qui a été utilisé dans la dernière cellule.
Tout ceci semble un peu particulier pour des personnes qui n'ont qu'une approche élémentaire de la programmation, mais en travaillant avec une feuille et du papier avant de s'attaquer à la programmation, même éléments par éléments, on y arrive.
On peut maintenant rajouter les points sur le graphique.
Ici, deux commentaires s'imposent :
Maintenant, supposons que l'on cherche à maximiser la fonction objectif suivante :
\[ Z= .35 x_0 + 1.75 x_1 \]La méthode qui s'apparente le plus à la méthode feuille/crayon est la suivante : on évalue les différentes valeurs de $Z$ calculée en chaque sommet
et on cherche la valeur maximale. Ceci peut être réalisé avec le code suivant :
Il est maintenant facile de compléter le graphique.
Juste un dernier mot pour finir sur ce point : l'approche proposée ici n'est pas simple. Mais, elle permet de substituer l'imprécision des tracés à mainlevée sur une feuille de papier. Si dans un cours, les choses semblent aller de soi, ne vous faites pas d'illusion : il faut tatônner, remettre mille fois le métier sur l'ouvrage pour atteindre une bonne pratique.
Considérer le programme suivant
\[ \begin{array}{c} \max_{\{x_1,x_2\}} \left\{\left.3 x_1+ 2 x_2\right| 2 x_1+x_2\leq 18, 2x_1 + 3x_2\leq 42,3x_1+x_2\leq 24,x_1 \geq 0,x_2\geq0\right\} \end{array} \]Considérer le programme suivant
\[ \begin{array}{c} \max_{\{x_1,x_2\}} \left\{\left.3 x_1+ 5 x_2\right| x_1\leq 4, 3x_2\leq 12,3x_1+2x_2\leq 18,x_1 \geq 0,x_2\geq0\right\} \end{array} \]Considérer le programme suivant
\[ \begin{array}{c} \min_{\{x_1,x_2\}} \left\{\left.5 x_1+ 6 x_2\right| 3x_1+ 2x_2\geq 6, 3x_1-x_2\leq 12,-x_1+x_2\leq 4,2x_1 + 5 x_2 \leq 20,x_1 \geq 0,x_2\geq0\right\} \end{array} \]Considérer le programme suivant
\[ \begin{array}{c} \max_{\{x_1,x_2\}} \left\{\left. 4 x_1+ x_2\right| x_1+ 3x_2\geq 5, 3x_1+x_2\geq 8,-x_1+3x_2\leq 7,x_1 \geq 0,x_2\geq0\right\} \end{array} \]Considérer le programme suivant
\[ \begin{array}{c} \max_{\{x_1,x_2\}} \left\{\left. x_1+ x_2\right| x_1- x_2\geq 2, x_1+x_2\leq 2,x_1\leq 5,x_2 \leq 7, x_1 \geq 0,x_2\geq0\right\} \end{array} \]Construire un exemple de programmation linéaire qui n'est pas faisable et représenter son domaine.
☕RéponseConsidérons un ménage dont les préférences sont décrites une fonction d'utilité linéaire : $u(c, l) = \alpha c - \beta l$, où $c$est le montant de sa consommation, dont le prix est $p$, $l$ le nombre d'heures travaillées, $\alpha$ et $\beta$ étant des paramètres positifs. On suppose également que le ménage reçoit un niveau de salaire nominal $w$, et que le temps disponible dans la journée est $l_0$.