Notons $I_A$ le poids des déchets incinérés par l'usine $A$ et $I_B$ celui incinéré par l'usine $B$.
Le coût d'élimination des déchets dépend de leur incinération et de l'enfouissement de ceux qui ne le sont pas :
\[
C = 4.2 I_A + 5 I_B + 6 (100 - I_A - I_B)\,\,\,\,\, \text{et}\,\,\,\,\, C = 600- 1.8 I_1 - I_B
\]
En ce qui concerne les contraintes de capacité, on a :
\[
\begin{array}{c}
I_A\leq 30\\
I_B \leq 32
\end{array}
\]
En ce qui concerne la contrainte d'émission des hydrocarbones, on aura :
\[
2 I_A + 3 I_B\leq 90
\]
et pour la contrainte sur les particules :
\[
10 I_A + 6 I_B\leq 230
\]
Tout ceci conduit au programme suivant :
\[
\begin{array}{c}
\min_{\{I_A, I_B\}} C = 600- 1.8 I_A - I_B\\\\
\text{sous les contraintes :}\\\\
I_A\leq 30\\
I_B \leq 32\\
2 I_A + 3 I_B\leq 90\\
10 I_A + 6 I_B\leq 230\\
I_A \geq 0\\
I_B \geq 0\\
\end{array}
\]
ou encore (Attention: l'ordre des options est impératif.)
L1
Ce programme peut être resolu par la commande suivante :
L1
L'inconvénient de cette modélisation est qu'elle ne donne pas la quantité enfouie (même s'il n'est pas trop
difficile de l'obtenir, il est quand même intéressant de la dériver directement). On obtient ceci en introduisant
la variable $E$ telle que :
\[
E = 100 - I_A -I_B
\]
La représentation du problème devient :
\[
\begin{array}{c}
\min_{\{I_A, I_B, E\}} C = 4.2 I_A + 5 I_B + 6 E\\\\
\text{sous les contraintes :}\\\\
I_A\leq 30\\
I_B \leq 32\\
2 I_A + 3 I_B\leq 90\\
10 I_A + 6 I_B\leq 230\\
I_A + I_B + E = 100\\
I_A \geq 0\\
I_B \geq 0\\
\end{array}\,\,\,\,\,\Longleftrightarrow\,\,\,\,\,
\begin{array}{c}
\min_{\{I_A, I_B,E\}} C = 4.2 I_A + 5 I_B + 6 E\\\\
\text{sous les contraintes :}\\\\
\begin{bmatrix}
1 & 0 & 0\\
0 & 1 & 0\\
2 & 3 & 0\\
10 & 6 & 0\\
1 & 1 & 1
\end{bmatrix}
\begin{bmatrix}
<=\\
<=\\
<=\\
<=\\
==
\end{bmatrix}
\begin{bmatrix}
I_A\\
I_B\\
E
\end{bmatrix}=
\begin{bmatrix}
30\\
32\\
90\\
230\\
100
\end{bmatrix}
\end{array}
\]
La solution de ce problème est obtenue avec le code suivant qui fait appel à
MixedIntegerLinearProgram :
L2
L2