On note P (Respectivement $P'$) la perte sur l'objectif engendrée par les 3 premières composantes de y (Resp. $y'$). On note G les gains sur la contraintes engendrés par les 3 premières composantes de y. On note $L' = y_1 + y_2 + y_3$. On trouve alors $y'_1$ et $y'_3$ grâce au équations suivantes :

$$L' = y'_{1} + y'_{3} \qquad (126)$$

$$G = G_{1}y'_{1} + P_{3}(L' - y'_{1}) \qquad (127)$$

On a donc en utilisant plusieurs fois (123) :

$$P - P' = P_{1}y_{1} + P_{2}y_{2} + P_{3}y_{3} - P_{1}\frac{G - G_{3}L'}{G_{1} - G_{3}} - P_{3}\left(L' - \frac{G - G_{3}L'}{G_{1} - G_{3}}\right) \qquad (128)$$

$$= (\mu + \lambda_{0}G_{1})y_{1} + (\mu + \lambda_{0}G_{2})y_{2} + (\mu + \lambda_{0}G_{3})y_{3} + \lambda_{0}(G - G_{3}L') - P_{3}L' \qquad (129)$$

$$= \mu L' + \lambda_{0}G - \lambda_{0}G + \lambda_{0}G_{3}L' - P_{3}L' \qquad (130)$$

$$= 0 \qquad (131)$$

On a donc une perte et un gain égaux pour y et $y'$, on a bien une solution faiblement dominante avec une nombre de composantes non-nulles strictement plus faibles que n.

Ce raisonnement étant vrai pour tout $n > 2$, on a bien le résultat attendu. ☐

Durant cette preuve on a montré un résultat sur la forme des solutions optimales.

**Propriété H.2.** Soit y solution optimale à 2 composantes non-nulles. On suppose sans perte de généralité que ces 2 composantes sont $y_1$ et $y_2$. Il y a alors 2 cas possibles :

$$— P_{1} = P_{2}$$

$$— La condition (39) est saturée. Et alors $G_1 \neq G_2$ et $P_1 < P_2 \Leftrightarrow G_1 < G_2$.$$

**Démonstration.** C'est la distinction entre $\lambda_0 = 0$ et $\lambda_0 > 0$ dans la preuve de la proposition (H.1). ☐

**Propriété H.3.** Soit y solution optimale à 2 composantes non-nulles. On suppose sans perte de généralité que ces 2 composantes soient $y_1$ et $y_2$ et que $P_1 \leq P_2$. Il y a alors 2 cas possibles :

$$— P_1 = P_2 \text{ et y est faiblement dominée par une solution avec une seule composante non-nulles.}$$

$$— \Pi_{1,2} = \max_{j \neq 1} \{ \Pi_{1,j} | G_j > G_1 \}.$$

**Démonstration.** Dans le premier cas, si $G_1 \leq G_2$ alors la solution $y'$ avec $y'_1 = y_1 + y_2 = L$ et $y_j = 0, \forall j > 1$ domine faiblement y car elle ont la même perte et que le gain de $y'$ et supérieur à celui de y.

Dans le second cas, on utilise la saturation de la contrainte (39) et on a donc :

$$L = y_{1} + y_{2} \qquad (132)$$

$$C = G_{1}y_{1} + G_{2}y_{2} \qquad (133)$$

Or $G_1 \neq G_2$ par les conditions KKT, donc :

$$y_1 = \frac{C - LG_1}{G_1 - G_2} \qquad (134)$$

$$y_2 = \frac{C - LG_2}{G_2 - G_1} \qquad (135)$$
On peut donc calculer la perte P :

$$P = P_1 \frac{C - LG_1}{G_1 - G_2} + P_2 \frac{C - LG_2}{G_2 - G_1} \quad (136)$$

$$= \frac{P_1 - P_2}{G_1 - G_2} C - L \frac{P_1 G_2 - P_2 G_1}{G_1 - G_2} \quad (137)$$

$$= \frac{C}{\Pi_{1,2}} - L \frac{P_1(G_2 - G_1) + P_1 G_1 - P_2 G_1}{G_1 - G_2} \quad (138)$$

$$= \frac{C - LG_1}{\Pi_{1,2}} + LP_1 \quad (139)$$

Supposons qu'il existe $j$ tel que $G_j > G_1$ et $\Pi_{1,2} > \Pi_{1,j}$, on peut alors proposer $y'$ tel que :

$$y'_{1} = \frac{C - LG_{1}}{G_{1} - G_{j}} \quad (140)$$

$$y'_{j} = \frac{C - LG_{j}}{G_{j} - G_{1}} \quad (141)$$

$$y'_{i} = 0 \qquad \forall i \notin \{1, j\} \quad (142)$$

Cette solution est admissible car elle respecte les conditions (132) et (133) et par les même calculs sa perte est :

$$P' = \frac{C - LG_1}{\Pi_{1,j}} + LP_1 < P \quad (143)$$

Ce qui contredit la optimalité de y. C'est absurde donc $\Pi_{1,2} = \max_{j \neq 1} \{\Pi_{1,j} | G_j > G_1\}$. $\square$

**Définition :** (Premier meilleur compromis)

On appelle $j_i^c$ le premier meilleur compromis pour le sol $i$, le choix qui respecte les conditions suivantes :

$$\Omega = \underset{j \neq j_0^c}{\operatorname{Argmax}} \left\{ \prod_{i^c, j_0^c, j} |G_j > G_{j_0^c}| \right\} \quad (144)$$

$$j_{i^c}^c = \underset{j \in \Omega}{\operatorname{Argmax}} \{G_j^c\} \quad (145)$$

**Propriété H.4.** Si $C \le G_{j_0^c}^c L_{i^c, 1}$ alors la stratégie qui n'a des $y_j$ non-nuls uniquement pour $j_i^O$ et $j_i^c$ est faiblement dominante et dans cette stratégie, P est affine en C de pente $\frac{1}{\Pi_{i^c, j_i^O, j_i^c}^{O,c}}$.

**Démonstration.** Dans ce cas ci, on peut satisfaire le critère uniquement avec $j_{i^c}^O$ et $j_{i^c}^c$ et d'après la proposition précédente, la perte de la solution proposée est $\frac{C}{\Pi_{j_{i^c}^O, j_{i^c}^c}^{O,c}}$. Soit y une solution optimale avec $y_1$ et $y_2$ les 2 seules composantes non-nulles.
★ Supposons $P_1 \neq P_2$ et calculons la perte :

$$ \left\{ \begin{array}{l} P = y_1 P_{j_0,1}^O + y_2 P_{j_0,2}^O \\ C = y_1 G_{j_0,1}^c + y_2 G_{j_0,2}^c \end{array} \right. \qquad (146) $$

$$ \left\{ \begin{array}{l} P = \frac{z_1}{\Pi_{j_0,1}^O} + \frac{z_2}{\Pi_{j_0,2}^O} \\ C = z_1 + z_2 \end{array} \right. \qquad (147) $$

La perte est donc minorée ainsi :

$$ P \geq \frac{z_1 + z_2}{\Pi_{j_0,jc}^O} = \frac{C}{\Pi_{j_0,jc}^O} \qquad (148) $$

★ Supposons $P_1 = P_2$, la solution est donc faiblement dominée par $y'$ tel que $y'_1 = \frac{C}{G_1}$ et $y'_j = 0, \forall j > 1$. La perte associée est minorée ainsi :

$$ P = \frac{P_1 C}{G_1} \geq \frac{C}{\Pi_{j_0,jc}^O} \qquad (149) $$

Dans les deux cas, la perte est bien minorée par la perte de la solution proposée. ☐

Lorsque $C$ est suffisamment petit, on sait résoudre le problème et si $C$ est plus grand, on peut se ramener au cas précédent grâce à cette propriété.

**Propriété H.5.** Soit y une solution optimale du problème avec $C \geq G_{j_0}^{jc} L_{i_0}$. Alors les choix $j \neq j_0^c$ tels que $G_j \leq G_{j_0}^{jc}$ sont associés à des $y_j$ nuls.

**Démonstration.** Supposons qu'il existe $j_1$ tel que $y_{j_1} > 0$ et $G_{j_1} \leq G_{j_0}^{jc}$ alors il entraîne un gain égal à $\tilde{G} = y_{j_1} G_{j_1}$ et une perte égale à $\frac{\tilde{G}}{\Pi_{j_0,j_1}^c}$. On peut alors proposer une solution alternative $y'$ :

$$ y'_{j} = \begin{cases} y_j + \frac{\tilde{G}}{G_{j_0}^{jc}} & \text{Si } j = j_{0}^{c} \\ y_{j_0} + y_{j_1} - y_{j_0}^{c} & \text{Si } j = j^0 \\ 0 & \text{Si } j = j_1 \\ y_j & \text{Sinon} \end{cases} \qquad (150) $$

Cette solution est réalisable car $G_{j_1} \leq G_{j_0}^{jc}$ et a un gain égal au gain de y.

La perte associée à cette solution est $P' = P - \tilde{G} \left( \frac{1}{\Pi_{j_0,j_1}^c} - \frac{1}{\Pi_{j_0,j_0}^{jc}} \right) < P$. L'inégalité est vraie par définition de $j^c$. ☐

**Remarque.** On peut donc si $C \geq G_{j_0}^{jc} L_{i_0}$, supprimer les choix $j \neq j_0^c$ tels que $G_j \leq G_{j_0}^{jc}$ et reconsidérer le problème avec les proposition précédentes. En effet, dans ce problème (qui est équivalent au premier d'après la proposition précédente), on a le choix optimal pour le sol $i_0$ qui est $j_{i_0}^c$.

★ On regarde maintenant le problème dans sa globalité. On peut appliquer les conditions KKT comme pour la proposition (H.1) est conclure :
**Propriété H.6.** Les stratégies avec $q$ ou $q+1$ composantes non-nulles sont faiblement dominantes.

*Démonstration.* Par la condition (113), on sait qu’au moins $q$ composantes sont non nulles et par la proposition (H.1), on sait qu’il n’y a pas plus de 2 composantes non-nulles par sols.

Soit y un solution optimale, on peut appliquer les conditions KKT et elles s’écrivent ainsi :

$$ \forall i, j \in [1, m] \times [1, q], P_{i,j} = \mu_i + \lambda_0 G_{i,j} + \lambda_{i,j} \quad (151) $$

$$ \forall i, j \in [1, m] \times [1, q], \quad 0 \le \lambda_{i,j} \quad (152) $$

$$ 0 \le \lambda_0 \quad (153) $$

$$ \forall i, j \in [1, m] \times [1, q], \quad 0 = y_{i,j} \lambda_{i,j} \quad (154) $$

$$ 0 = \lambda_0 \left( \sum_j \sum_i G_{i,j} y_{i,j} - C \right) \quad (155) $$

Supposons que 2 sols (sans perte de généralité i=1 et i=2) aient 2 composantes non-nulles chacun (que nous notons respectivement $j_1, j_2, j_3, j_4$). On note $P_{1,j_1} = P_1$, $P_{1,j_2} = P_2$, $P_{2,j_1} = P_3$ et $P_{2,j_2} = P_4$ et de même pour le gain et les $y_{i,j}$, ce qui donne :

$$ P_1 = \mu_1 + \lambda_0 G_1 \quad (156) $$

$$ P_2 = \mu_1 + \lambda_0 G_2 \quad (157) $$

$$ P_3 = \mu_2 + \lambda_0 G_3 \quad (158) $$

$$ P_4 = \mu_2 + \lambda_0 G_4 \quad (159) $$

On distingue alors 2 cas :

$\lambda_0 = 0$ : On sait alors que $P_1 = P_2$ et $P_3 = P_4$, on peut alors dominer par une solution $y'$ qui a moins de composantes non-nulles comme fait dans les cas précédents.

$\lambda_0 > 0$ : on suppose sans perte de généralité que $G_1 < G_2$ et $G_3 < G_4$ et donc de même pour les pertes. et on suppose sans perte de généralité que $\Pi_{1,2} < \Pi_{3,4}$. On propose alors une solution $y'$ qui domine faiblement y avec une composante nulle supplémentaire :

— Si $L_2 \le \frac{(G_2-G_1)y_1+G_3(y_3-L_2)+G_4y_4}{G_4-G_3}$ alors on propose :

$$ y'_{i,j} = \begin{cases} 0 & \text{Si}(i,j) = 1, j_1 \\ \frac{L_1 = y_1 + y_2}{\frac{(G_2-G_1)y_1+G_3(y_3-L_2)+G_4y_4}{G_4-G_3}} & \text{Si}(i,j) = 1, j_2 \\ \frac{L_2 - y'_{2,j_4}}{y_{i,j}} & \text{Si}(i,j) = 2, j_4 \\ \frac{L_2 - y'_{2,j_4}}{y_{i,j}} & \text{Si}(i,j) = 2, j_3 \\ \frac{(G_3-G_4)y_3+G_1(y_1-L_1)+G_2y_2}{G_2-G_1} & \text{Sinon} \end{cases} \quad (160) $$

— Sinon on propose :

$$ y'_{i,j} = \begin{cases} \frac{(G_3-G_4)y_3+G_1(y_1-L_1)+G_2y_2}{G_2-G_1} & \text{Si}(i,j) = 1, j_2 \\ \frac{L_1 - y'_{1,j_2}}{0} & \text{Si}(i,j) = 1, j_1 \\ \frac{L_2 = y_3 + y_4}{y_{i,j}} & \text{Si}(i,j) = 2, j_3 \\ \frac{L_2 = y_3 + y_4}{y_{i,j}} & \text{Si}(i,j) = 2, j_4 \\ \frac{(G_3-G_4)y_3+G_1(y_1-L_1)+G_2y_2}{G_2-G_1} & \text{Sinon} \end{cases} \quad (161) $$
Cette solution est faisable et a le même gain et une perte plus petite ou égale.
On a alors bien la domination annoncée.

☐

**Définition :** (Premier meilleur sol pour compromis)

On appelle $i^c$ le premier meilleur sol pour compromis, le sol qui respecte la condition suivante :

$$ \Omega = \underset{i}{\operatorname{Argmax}} \left\{ \prod_{i,j_i^o, j_i^c} \right\} \qquad (162) $$

$$ j_{i0}^c = \underset{i \in \Omega}{\operatorname{Argmax}} \left\{ G_{i, j_i^c}^c \right\} \qquad (163) $$

**Définition :** (Premier meilleur compromis global)

On appelle $j^c$ le premier meilleur compromis global, le choix tel que $j^c = j_{i^c}^c$.

**Remarque.** Dans les faits on peut s'affranchir de la notion de Premier meilleur compromis pour le sol $i$ en définissant $i^c$ et $j^c$ comme le couple qui respecte cette condition :

$$ \Omega = \underset{(i,j), j \neq j_i^o}{\operatorname{Argmax}} \left\{ \prod_{i,j_i^o,j} G_j > G_{j_i^o} \right\} \qquad (164) $$

$$ (i^c, j^c) = \underset{(i,j) \in \Omega}{\operatorname{Argmax}} \left\{ G_{i,j}^c \right\} \qquad (165) $$

**Propriété H.7.** Si $C \le G_{i^c,j^c}^c L_{i^c,l} + \sum_{i \neq i^c} G_{i,j_i^o}^c L_{i,l}$,

alors la stratégie qui n'a des $y_{i,j}$ non-nulles uniquement pour les doublets $(i, j_i^O)$ et $(i^c, j^c)$ est faiblement dominante et dans cette stratégie, P est affine en C de pente $\frac{1}{\prod_{i^c,j_{i^c}^O,j^c}^{O,c}}$.

**Démonstration.** Dans ce cas ci, on peut satisfaire le critère uniquement avec $(i^c, j^c)$ et d'après la proposition (H.3), la perte de la solution proposée est $\frac{C}{\prod_{i^c,j_{i^c}^O,j^c}^{O,c}}$.

Soit y une solution optimale avec 1 le sol qui a 2 composantes non-nulles qui sont $y_{1,j_1}$ et $y_{1,j_2}$. Pour les autres sols, on note $y_{i,j_i}$ la composante non-nulle.

★ Supposons $P_{1,j_1} \neq P_{1,j_2}$ et calculons la perte :

$$ \left\{ \begin{array}{l} P = y_{1,j_1} P_{1,j^o,j_1}^O + y_{1,j_2} P_{1,j^o,j_2}^O + \sum_{i>1} L_{i,l} P_{i,j_i^O,j_i}^O \\ C = y_{1,j_1} G_{1,j^o,j_1}^c + y_{1,j_2} G_{1,j^o,j_2}^c + \sum_{i>1} L_{i,l} G_{i,j_i^o,j_i}^O \end{array} \right. \qquad (166) $$

$$ \left\{ \begin{array}{l} P = \frac{z_{1,j_1}}{\prod_{1,j^O,j_1}^{O,c}} + \frac{z_{1,j_2}}{\prod_{1,j^O,j_2}^{O,c}} + \sum i > 1 \frac{z_{i,j_1}}{\prod_{i,j^O,j_1}^{O,c}} \\ C = z_1 + z_2 + \sum_{i>1} z_{i,j_i} \end{array} \right. \qquad (167) $$

La perte est donc minorée ainsi :

$$ P \ge \frac{z_1 + z_2 + \sum_{i>1} z_{i,j_i}}{\prod_{j^O,j^c}^{O}} = \frac{C}{\prod_{j^O,j^c}^{O}} \qquad (168) $$
★ Supposons $P_{1,j_1} = P_{1,j_2}$, la solution est donc faiblement dominée par $y'$ tel que

$$y'_{1,j_1} = \frac{C - \sum_{i>1} L_{i,l} G^O_{i,j_i, j_i}}{G_1}, y'_{1,j} = 0, \forall j \neq j_1 \text{ et } y'_{i,j} = y_{i,j}, \forall i > 1. \text{ La perte associée est minorée ainsi :}$$

$$P = \frac{P_{1,j_1} \left( C - \sum_{i>1} L_{i,l} G^O_{i,j_i, j_i} \right)}{G_{1,j_1}} + \sum_{i>1} \frac{L_{i,l} G^O_{i,j_i, j_i}}{\Pi^{O,c}_{i,j_i, j_i}} \geq \frac{C}{\Pi^{O,j_o, j_c}} \quad (169)$$

Dans les deux cas, la perte est bien minorée par la perte de la solution proposée. ☐

Lorsque C est suffisamment petit, on sait résoudre le problème et si C est plus grand, on peut se ramener au cas précédent grâce à cette propriété.

**Propriété H.8.** Soit y une solution optimale du problème avec $C \geq G_{i^c, j^c} L_{i^c, j^c}$. Alors les doublets $(i, j)$ tels que $G(i, j) \leq G_{i^c, j^c}$, $i = i^c$ et $j \neq j^c$ sont associés à des $y_{i,j}$ nuls.

**Démonstration.** Supposons qu'il existe $j_1$ tel que $y_{i^c, j_1} > 0$ et $G_{i^c, j_1} \leq G_{i^c, j^c}$ alors il entraîne un gain égale à $\tilde{G} = y_{i^c, j_1} G_{i^c, j_1}$ et une perte égale à $\frac{\tilde{G}}{\Pi^{O,j_o, j_c}}$. On peut alors proposer une solution alternative $y'$ :

$$y'_{i^c, j} = \begin{cases} y_{i^c, j} + \frac{\tilde{G}}{G_{i^c, j^c}} & \text{Si } j = j^c \\ y_{i^c, j} + y_{i^c, j_1} - y'_{i^c, j^c} & \text{Si } j = j^0 \\ 0 & \text{Si } j = j_1 \\ y_j & \text{Sinon} \end{cases} \quad (170)$$

Cette solution est réalisable car $G_{i^c, j_1} \leq G_{i^c, j^c}$ et a un gain égale au gain de y.

La perte associée à cette solution est $P' = P - \tilde{G} \left( \frac{1}{\Pi^{O,j_o, j_c}} - \frac{1}{\Pi^{O,j_o, j_c}} \right) < P$. L'inégalité est vraie par définition de $j^c$. ☐

On peut donc en appliquant la proposition (H.8) simplifier le problème jusqu'à ce que le problème respecte les hypothèses de la proposition (H.7) et alors on applique cette proposition et on obtient le résultat optimal. On peut alors décrire la forme des solutions et de l'objectif.

**Théorème 5.** Soit le problème Prob_1(C), le problème Prob_1 avec la constante C de l'inéquation (111) comme paramètre du problème.

On fait l'hypothèse que pour toute paire de doublets :

$$(G_{i_1, j_1}, P_{i_1, j_1}) = (G_{i_2, j_2}, P_{i_2, j_2}) \Rightarrow (i_1, j_1) = (i_2, j_2), \text{ et pour toute paire de triplets :}$$

$$\Pi_{i_1, j_1, j_2} = \Pi_{i_2, j_3, j_4} \notin \{0, \pm\infty\} \Rightarrow (i_1, j_1, j_2) = (i_2, j_3, j_4).$$

Lorsqu'il existe une unique solution au problème, elle est notée $\tilde{y}(C)$ et associée à la fonction objectif $\tilde{P}(C)$, alors :

— Il existe une constante positive $C_{lim} = \sum_i L_i * \text{Max}_j (G_{i,j})$ telle que :
$$ \forall C \in [0, C_{lim}], \exists! \tilde{y}(C) \text{ solution de Prob}_1(C). $$

— La fonction $\tilde{P}$ est affine par morceaux, continue, croissante et concave en C sur l'intervalle $[0, C_{lim}]$.

— La fonction $\tilde{y}$ est affine par morceaux et continue en C sur l'intervalle $[0, C_{lim}]$.
— Les "points de brisures" de $\tilde{y}$ et $\tilde{P}$ sont identiques et notés $(C_k)_{k \in [0,nb]}$ avec
$0 = C_0 < C_1 < \dots < C_{nb-1} < C_{nb} = C_{lim}$.

— Si C est un "point de brisure" alors $\tilde{y}(C)$ a $q$ composantes non-nulles. Sinon et si $C < C_{lim}$ alors $\tilde{y}(C)$ a $q+1$ composantes non-nulles.

Démonstration. Si on prouve la première affirmation, les 4 autres affirmations sont des conclusions directes des propositions (H.8) et (H.7).

Pour $C = 0$, il existe une unique solution optimale qui est :

$$
y_{i,j} = \delta_{j}^{o}(j) L_{i} \tag{171}
$$

Pour $C > C_{lim}$, il n'y a évidemment pas de solution.

Pour $0 \le C \le C_{lim}$, il y a une solution qui satisfait les contraintes qui est :

$$
y_{i,j} = \delta_j \left( \operatorname{Argmax}_{j'} (G_{i,j'}) \right) L_i \quad (172)
$$

Il y a donc un solution au problème Prob_1(C).

Supposons qu’il y ait 2 solutions $\tilde{y}^1$ et $\tilde{y}^2$. D’après la proposition (H.6), elles n’ont qu’un seul sol chacune avec 2 composantes non-nulles et on note ces composantes :
$\tilde{y}_1^1, \tilde{y}_1^2, \tilde{y}_2^1, \tilde{y}_2^2$ et supposons sans perte de généralité que $G1, j_1 \le G_{1,j_2}$ et $G2, j_3 \le G_{2,j_4}$.

★ Si $\Pi_{1,j_1}, \Pi_{1,j_2} \neq \Pi_{2,j_3}, \Pi_{2,j_4}$, supposons sans perte de généralité que $\Pi_{1,j_1}, \Pi_{1,j_2} < \Pi_{2,j_3}, \Pi_{2,j_4}$.

Soit $0 < \varepsilon = \min \left( \tilde{y}_{1,j_2}^1, \tilde{y}_{2,j_3}^2 \frac{G_{2,j_4} - G_{2,j_3}}{G_{1,j_2} - G_{1,j_1}} \right)$. Soit $\tilde{y}^3$, une solution tel que :

$$
\tilde{y}_{i,j}^3 = \begin{cases}
\frac{\tilde{y}_{1,j_1}^1 + \tilde{y}_{1,j_1}^2}{2} + \frac{\epsilon}{2} & \text{Si}(i,j) = (1,j_1) \\
\frac{\tilde{y}_{1,j_2}^1 + \tilde{y}_{1,j_2}^2}{2} - \frac{\epsilon}{2} & \text{Si}(i,j) = (1,j_2) \\
\frac{\tilde{y}_{2,j_3}^1 + \tilde{y}_{2,j_3}^2}{2} - \frac{\epsilon}{2} \frac{G_{1,j_2} - G_{1,j_1}}{G_{2,j_4} - G_{2,j_3}} & \text{Si}(i,j) = (2,j_3) \\
\frac{\tilde{y}_{2,j_4}^1 + \tilde{y}_{2,j_4}^2}{2} + \frac{\epsilon}{2} \frac{G_{1,j_2} - G_{1,j_1}}{G_{2,j_4} - G_{2,j_3}} & \text{Si}(i,j) = (2,j_3) \\
\frac{\tilde{y}_{i,j}^1 + \tilde{y}_{i,j}^2}{2} & \text{Sinon}
\end{cases} \tag{173}
$$

Cette solution est strictement meilleure que $\tilde{y}^1$ et $\tilde{y}^2$ et a le même gain, ce qui contredit
l'optimalité de $\tilde{y}^1$ et $\tilde{y}^2$.

★ Si $\Pi_{1,j_1}, \Pi_{1,j_2} = \Pi_{2,j_3}, \Pi_{2,j_4}$ alors $(1, j_1, j_2) = (2, j_3, j_4)$. Les solutions sont donc différentes sur au moins deux sols que l’on note $\alpha$ et $\beta$. On choisit $j_5, j_6, j_7, j_8$ tels que

$$
\tilde{y}_{\alpha, j_5}^1 + \tilde{y}_{\alpha, j_5}^2 > 0
$$

$$
\tilde{y}_{\alpha, j_6}^1 + \tilde{y}_{\alpha, j_6}^2 > 0
$$

$$
\tilde{y}_{\beta, j_7}^1 + \tilde{y}_{\beta, j_7}^2 > 0
$$

$$
\tilde{y}_{\beta, j_8}^1 + \tilde{y}_{\beta, j_8}^2 > 0
$$

Supposons sans perte de généralité que $\Pi_{\alpha,j_5,j_6} < \Pi_{\beta,j_7,j_8}$.
Soit $0 < \varepsilon = \min \left( \frac{\tilde{y}_{\alpha,j6}^1 + \tilde{y}_{\alpha,j6}^2}{2}, \frac{\tilde{y}_{\beta,j7}^1 + \tilde{y}_{\beta,j7}^2}{2} \frac{G_{\beta,j8} - G_{\beta,j7}}{G_{\alpha,j6} - G_{\alpha,j5}} \right)$. Soit $\tilde{y}^3$, une solution telle que :

$$ \tilde{y}_{i,j}^3 = \begin{cases} \frac{\tilde{y}_{\alpha,j5}^1 + \tilde{y}_{\alpha,j5}^2}{2} + \frac{\varepsilon}{2} & \text{Si}(i, j) = (\alpha, j_5) \\ \frac{\tilde{y}_{\alpha,j6}^1 + \tilde{y}_{\alpha,j6}^2}{2} & \text{Si}(i, j) = (\alpha, j_6) \\ \frac{\tilde{y}_{\beta,j7}^1 + \tilde{y}_{\beta,j7}^2}{2} - \frac{\varepsilon}{2} \frac{G_{\alpha,j6} - G_{\alpha,j5}}{G_{\beta,j8} - G_{\beta,j7}} & \text{Si}(i, j) = (\beta, j_7) \\ \frac{\tilde{y}_{\beta,j8}^1 + \tilde{y}_{\beta,j8}^2}{2} + \frac{\varepsilon}{2} \frac{G_{\alpha,j6} - G_{\alpha,j5}}{G_{\beta,j8} - G_{\beta,j7}} & \text{Si}(i, j) = (\beta, j_8) \\ \frac{\tilde{y}_{i,j}^1 + \tilde{y}_{i,j}^2}{2} & \text{Sinon} \end{cases} \quad (174) $$

Cette solution est strictement meilleure que $\tilde{y}^1$ et $\tilde{y}^2$ et a le même gain, ce qui contredit l'optimalité de $\tilde{y}^1$ et $\tilde{y}^2$.

□

# I Preuves des résultats des parties 2.3.4 et 2.3.5

## Preuve de la proposition 2.13

*Démonstration.* Soit $Y$, une solution optimale.

Le respect de l'équation (58) montre qu'il y a au moins $q$ composantes non-nulles.

Supposons que $Y$ ait strictement plus de $q + N_{cri}$ composantes non-nulles.

On peut choisir $\mathcal{T}$ les indices de $q + N_{cri} + 1$ composantes non-nulles et restreindre $Y$ et $C \in \mathcal{T}$, on note : $\tilde{Y} = Y|_{\mathcal{T}}$, $\tilde{C} = C|_{\mathcal{T}}$ et $\tilde{B} = \tilde{C}\tilde{Y}$.

Ainsi $\tilde{Y} \in (\mathbb{R}_+^*)^{q+N_{cri}+1}$ et $\tilde{C} \in \mathcal{M}_{q+N_{cri},q+N_{cri}+1}$ et donc son noyau n'est pas trivial. Soit $x \in \text{Ker}(\tilde{C})$ non-nul.

On a donc $\forall \lambda \in \mathbb{R}$, $\tilde{C}(\tilde{Y} + \lambda x) = \tilde{B}$. C'est à dire que on peut modifier $Y$ en suivant la direction donnée par $x$ et continuer à respecter les conditions (57) et (58).

Comme $\tilde{Y} \in (\mathbb{R}_+^*)^{q+N_{cri}+1}$ et par positivité de $\tilde{C}$, il existe :

$$ \lambda_1 = \underset{\lambda < 0}{\text{Max}} (\tilde{Y} + \lambda x) \notin (\mathbb{R}_+^*)^{q+N_{cri}+1} \quad (175) $$

$$ \lambda_2 = \underset{\lambda > 0}{\text{Min}} (\tilde{Y} + \lambda x) \notin (\mathbb{R}_+^*)^{q+N_{cri}+1} \quad (176) $$

On note $\tilde{x} \in \mathbb{R}^{qm}$, le vecteur dont les composantes sont égales à celles de $x$ sur $\mathcal{T}$ et nulles sinon.

Par linéarité de la perte en fonction de $Y$, La suite $Obj(Y + \lambda_1(\tilde{x}))$, $Obj(Y)$, $Obj(Y + \lambda_2(\tilde{x}))$ est monotone. Par optimalité de $Y$, elle est constante. On a donc 2 solutions optimales est qui ont au moins une composante non-nulle de moins.

Ce raisonnement étant vrai pour toutes les solutions ayant strictement plus de $q + N_{cri}$ composantes non-nulles, on peut trouver une solution optimale avec moins de $q + N_{cri}$ composantes non-nulles. □

## Preuve du théorème 4

*Démonstration.* Soit $Y$ une solution optimale.

Prenons tout d'abord $\mathcal{E} = \llbracket 1, n \rrbracket$ alors $\mathcal{E}$ sélectionne les lignes $\llbracket 1, m_E \rrbracket$. On note $C = \begin{pmatrix} C_I \\ C_E \end{pmatrix}$.
Supposons que $Y$ ait strictement plus de $m_E + m_I$ composantes non-nulles.

On peut choisir $\mathcal{T}$ les indices de $m_E + m_I + 1$ composantes non-nulles et restreindre $Y$ et $C$ à $\mathcal{T}$, on note : $\tilde{Y} = Y|_{\mathcal{T}}$, $\tilde{C} = C|_{\mathcal{T}}$ et $\tilde{B} = \tilde{C}\tilde{Y}$.

Ainsi $\tilde{Y} \in (\mathbb{R}_+^*)^{m_E+m_I+1}$ et $\tilde{C} \in \mathcal{M}_{m_E+m_I,m_E+m_I+1}$ et donc son noyau n'est pas trivial.

Soit $x \in \text{Ker}(\tilde{C})$ non-nul.

On a donc $\forall \lambda \in \mathbb{R}$, $\tilde{C}(\tilde{Y} + \lambda x) = \tilde{B}$. C'est à dire que on peut modifier $Y$ en suivant la direction donnée par $x$ et continuer à respecter les conditions (67) et (66).

Comme $\tilde{Y} \in (\mathbb{R}_+^*)^{m_E+m_I+1}$ et par positivité de $\tilde{C}$, il existe :

$$ \lambda_1 = \underset{\lambda<0}{\text{Max}} (\tilde{Y} + \lambda x) \notin (\mathbb{R}_+^*)^{m_E+m_I+1} \quad (177) $$

$$ \lambda_2 = \underset{\lambda>0}{\text{Min}} (\tilde{Y} + \lambda x) \notin (\mathbb{R}_+^*)^{m_E+m_I+1} \quad (178) $$

On note $\tilde{x} \in \mathbb{R}^n$, le vecteur dont les composantes sont égales à celles de $x$ sur $\mathcal{T}$ et nulles sinon.

Par linéarité de l'objectif, La suite $Obj(Y + \lambda_1 \tilde{x})$, $Obj(Y)$, $Obj(Y + \lambda_2 \tilde{x})$ est mono-tone. Par optimalité de $Y$, elle est constante. On a donc 2 solutions optimales qui ont au moins une composante non-nulle de moins.

Ce raisonnement étant vrai pour toutes les solutions ayant strictement plus de $m_E + m_I$ composantes non-nulles, on peut trouver une solution optimale $Y_1$ avec moins de $m_E + m_I$ composantes non-nulles et qui n'a aucune composante non-nulle sur des indices qui non pas de composante non-nulle pour $Y$.

**Dans le cas général** d'un $\mathcal{E}$ sélectionnant les lignes $\mathcal{L}$.

On note $Y_{1,\mathcal{E}}$ le vecteur $Y_1$ restreint à $\mathcal{E}$ et $Y_{1,\mathcal{E}C}$, le vecteur $Y_1$ restreint à $\mathcal{E}C$.

En renumérotant les lignes et les colonnes on peut écrire $C_E$ sous la forme :

$$ C_E = \begin{pmatrix} \mathcal{E} & \mathcal{E}^c \\ C_{E,\mathcal{E}} & 0 \\ 0 & C_{E,\mathcal{E}C} \end{pmatrix} $$

On peut aussi écrire $C_I$ sous la forme :

$$ C_I = \begin{pmatrix} \mathcal{E} & \mathcal{E}^c \\ C_{I,\mathcal{E}} & C_{I,\mathcal{E}C} \end{pmatrix} $$

On peut alors reformuler les conditions de la maximisation ainsi :

$$ B_L \le C_{I,\mathcal{E}} Y_{1,\mathcal{E}} + C_{I,\mathcal{E}C} Y_{1,\mathcal{E}C} \quad (179) $$

$$ B_E = \begin{pmatrix} C_{E,\mathcal{E}} Y_{1,\mathcal{E}} \\ C_{E,\mathcal{E}C} Y_{1,\mathcal{E}C} \end{pmatrix} = \begin{pmatrix} B_{E,\mathcal{E}} \\ B_{E,\mathcal{E}C} \end{pmatrix} \quad (180) $$

$$ 0 \le \begin{pmatrix} Y_{1,\mathcal{E}} \\ Y_{1,\mathcal{E}C} \end{pmatrix} \quad (181) $$

Ainsi tout vecteur de la forme : $\begin{pmatrix} \tilde{Y}_{1,\mathcal{E}} \\ Y_{1,\mathcal{E}C} \end{pmatrix}$ avec $\tilde{Y}_{1,\mathcal{E}}$ solution optimale du problème :

Minimisation l'objectif $Obj(Y) = \langle P_{\mathcal{E}}, Y \rangle$, sous les contraintes :

$$ B_I - C_{I,\mathcal{E}C} Y_{1,\mathcal{E}C} \le C_{I,\mathcal{E}} Y \quad (182) $$

$$ B_{E,\mathcal{E}} = C_{E,\mathcal{E}} Y \quad (183) $$

$$ 0 \le Y \quad (184) $$
est optimal.

On peut donc appliquer la première partie de la preuve à $Y_{1,\mathcal{E}}$ pour obtenir un $Y_{2,\mathcal{E}}$ ayant un nombre de composantes non-nulles inférieure à $m_{E,\mathcal{E}} + m_{I,\mathcal{E}}$ sans avoir de composante non-nulle là où $Y_{1,\mathcal{E}}$ n'avait que des composantes nulles. $Y_2 = \begin{pmatrix} Y_{2,\mathcal{E}} \\ Y_{1,\mathcal{E}}^c \end{pmatrix}$ est donc une solution optimale du problème avec moins de $n_E + n_I$ composantes non-nulles et moins de $m_{E,\mathcal{E}} + m_{I,\mathcal{E}}$ composantes non-nulles sur $\mathcal{E}$.

**Conclusion** : On peut itérer à tout les sous-ensembles de $[[1,n]]$ sélectionnant des lignes (Il y en a un nombre fini car $\mathcal{P}([[1,n]])$ est fini.) et obtenir un vecteur de la forme attendue. □

## Preuves des propositions 2.17 et 2.18

**Analyse** :Soit $\tilde{Y}$ une solution de Prob_perte(0, $\alpha_0$) qui respecte les conclusions du théorème 4. Sans perte de généralités, on suppose que pour tout $\alpha$, on vérifie $n_\alpha \le n_{\alpha+1}$. On peut donc ensuite en appliquant le théorème 2 supposer que $n_1 = 1$.

Comme pour le problème à un critère, on procède par étape :

* Supposons dans un premier temps qu'il n'y a qu'un seul type de sol.

On définit le problème $P^{\alpha_0}$, le problème avec seulement les $\alpha_0$ premiers critères. Nous allons prendre ces problèmes dans l'ordre. C'est à dire qu'on ajoute les critère un part un.

Il y a 2 possibilités :

- Le critère est seul sur son territoire ou à ses sous-territoires alors on applique les méthodes de la sous partie précédentes.

- Il y a $c$ autres critères qui s'appliquent au même territoire ou à ses sous-territoires. Ces contraintes sont rassemblée dans l'ensemble $\mathcal{C}ri_{\alpha_0}$.

En reprenant les $Y$ comme il était pour le problème précédent ($P^{\alpha_0-1}$) et en le notant $\tilde{Y}$, on a alors :

Les égalités vérifiées par $\tilde{Y}$.

$$C_{i\alpha}^{\alpha} = D_{i\alpha}^{\alpha}(\tilde{Y}) \qquad \forall \alpha \in \mathcal{C}ri_{\alpha_0} \qquad (185)$$

$$C'_{i\alpha_0} = C_{i\alpha_0}^{\alpha_0} - D_{i\alpha_0}^{\alpha_0}(\tilde{Y}) \qquad (186)$$

$$L_{i,l} = \sum_{j} \tilde{Y}_{i,j,l} \qquad \forall i, l \qquad (187)$$

$$\tilde{Y}_{i,j,k} = X_{i,j,l} L_{i,l} \geq 0 \qquad (188)$$

On va chercher une solution à Prob_perte($\lambda, \alpha_0$) en écart avec $\tilde{Y}$, on note $\Delta Y$ cette écart. le problème s'exprime alors :

$\text{Prob}_\delta(\lambda, \alpha_0)$.

On minimise l'objectif $Obj(\Delta Y) = \langle P, \Delta Y \rangle$, sous les contraintes :

$$\lambda e_{(\alpha_0 \le C_G |_{\alpha_0, [[1,qN^1]}) \Delta Y}} \qquad (189)$$

$$0 = C_L \Delta Y \qquad (190)$$

$$-\tilde{Y} \le \Delta Y \qquad (191)$$

Lorsqu'il y a une on peut appliquer le théorème (4) et particulièrement sur le groupe-ment FC des fermes concernées par $\alpha_0$.

Ainsi il y a au plus $q+1$ composantes non-nulles et il y a au plus $\text{Card}(FC) + 1$ com-
posantes non-nulles sur les sols de FC. Observons dans un premier temps les valeurs
sur les fermes qui ne sont pas concernées par α₀, elles suivent le problème suivant :

On minimise l'objectif $Obj(Y) = \langle P, Y \rangle$, sous les contraintes :

$$
0 = MY \tag{192}
$$

$$
V \le Y \tag{193}
$$

Avec $V = -\tilde{Y}|_{FC} \le 0$ et $M \ge 0$.

Le vecteur nul est donc la solution optimale par optimalité de $\tilde{Y}$ pour le problème
$Prob\_Perte(0, \alpha_0)$

Observons maintenant le groupement de ferme FC. On a fait l'hypothèse que dans
le choix optimal les inégalités des inégalités des critères sont des égalités. On consi-
dère uniquement A un ensemble de $card(FC) + 1 = N_A$ composantes qui contient les
composantes non-nulles et $\Delta Y|_A$ vérifie l'équation suivante :

$$
\begin{pmatrix} 0 \\ \vdots \\ 0 \\ \lambda \end{pmatrix} = D_{FC}(\Delta Y) \qquad (194)
$$

avec $D_{FC} = \begin{pmatrix} C_L|_{(FC,A)} \\ C_G|_{(\alpha_0,A)} \end{pmatrix}$ Et donc on a

$$
\Delta Y|_{A} = D_{FC}^{-1} \begin{pmatrix} 0 \\ \vdots \\ 0 \\ \lambda \end{pmatrix} = \begin{pmatrix} (D_{FC}^{-1})_{1,N_A} \\ (D_{FC}^{-1})_{2,N_A} \\ \vdots \\ (D_{FC}^{-1})_{N_A,N_A} \end{pmatrix} \lambda \quad (195)
$$

On peut alors calculer la perte associée :

$$
P'(\Delta Y) = \lambda \sum_{\beta \in A} (D_{FC}^{-1})_{\beta, N_A} P^{Q}_{i^\beta, j^\beta, l^\beta} \quad (196)
$$

On connaît donc la forme d'une solution optimale et de la perte en fonction de ΔY.
On en déduit la proposition suivante.

**Propriété I.1.** Soit $\alpha_0$ et $\lambda$ tel qu'il existe une solution à Prob_delta($\lambda$, $\alpha_0$) avec la condition (189) saturée. Pour tout A sous ensemble de $[1, N^1]$ à $N_A = card(FC) + 1$ éléments, on note $\Delta Y_A(\lambda)$ le vecteur de $\mathbb{R}^{qN^1}$ tel que $\Delta Y_A(\lambda)|_{AC} = 0$ et

$$
\Delta Y_A(\lambda)|_A = \begin{pmatrix} (D_{FC}^{-1})_{1,N_A} \\ (D_{FC}^{-1})_{2,N_A} \\ \vdots \\ (D_{FC}^{-1})_{N_A,N_A} \end{pmatrix} \lambda \quad (197)
$$

avec $D_{FC} = \begin{pmatrix} C_L|_{(FC,A)} \\ C_G|_{(\alpha_0,A)} \end{pmatrix}$.

Soit $A_1$ sous ensemble de $[[1,N^1]]$ à $N_A$ éléments. $\Delta Y_{A_1}(\lambda)$ est solution optimale de $Prob\_delta(\lambda, \alpha_0)$. si et seulement si pour tout A sous ensemble de $[[1,N^1]]$ à $N_A$ éléments tel que $\Delta Y_A(\lambda) \ge \tilde{Y}$, $P'(\Delta Y_{A_1}(\lambda)) \le P'(\Delta Y_A(\lambda))$ et $\Delta Y_{A_1}(\lambda) \ge -\tilde{Y}$.
Démonstration. On a supposé qu'une solution optimale existait et on a prouvé qu'elle était forcément de cette forme lors de l'analyse, on choisit seulement celui qui a la plus petit perte.

L'ensemble des sous-ensemble de [[1, N¹]] à N<sub>A</sub> éléments est fini il y a donc un A<sub>1</sub> qui
a la perte minimale.
☐

On peut ajouter la proposition suivante qui nous permettra de trouver les solutions
en fonction des solutions proches.

**Propriété I.2.** *Pour tout $B \in \mathbb{R}^{N_{\text{Cri}}}$ tel que $\text{Prob\_perte}(0,0)$ ait une solution $\tilde{Y}$, pour tout $\alpha_0 \in [1, N_{\text{Cri}}]$, il y a 2 cas :*

— $\forall \lambda > 0$, $\text{Prob\_perte}(\lambda, \alpha_0)$ n'est pas de solution avec la première contrainte saturée.

ou

— $\exists \lambda_1 > 0, \exists A \subset [1, qN^1], \text{Card}(A) = N_A, \forall \lambda \in [0, \lambda_1], \tilde{Y} + \Delta Y_A(\lambda) \text{ soit solution optimale.}$

Démonstration. Supposons que l’on ne soit pas dans le 1er cas alors :∃λ₂ > 0 tel que Prob_perte(λ₂, α₀) admette une solution. D’après la proposition I.1, il existe A₂ ⊂ [[1, qN¹]] tel que ΔYₐ(λ₂) soit solution de Prob_delta(λ₂, α₀) avec la première contrainte saturée. Par linéarité des contraintes :

∀λ ∈ [0, λ₂], ΔYₐ₂(λ) respecte les critères de Prob_delta(λ, α₀).

Ainsi pour tout $\lambda \in [0, \lambda_2]$, $\text{Prob\_delta}(\lambda, \alpha_0)$ admet une solution.

De même, si un sous ensemble A de [[1, qN¹]] à N<sub>A</sub> éléments est tel que ΔY<sub>A</sub>(λ) respecte les critères de Prob_delta(λ, α<sub>0</sub>) alors pour tout 0 ≤ λ' ≤ λ, ΔY<sub>A</sub>(λ') respecte les critères de Prob_delta(λ', α<sub>0</sub>).

Comme il y a un nombre fini de sous-ensemble de [[1, qN¹]] à N<sub>A</sub> éléments, il existe un
λ₁ > 0 tel que le nombre de A ⊂ [[1, qN¹]], Card(A) = N<sub>A</sub> tel que ΔY<sub>A</sub>(λ) respecte les
critères de Prob_delta(λ, α₀) est constant sur [0, λ₁].

Sur cet intervalle, la perte associée à un A est linéaire en λ, donc si ΔY_A(λ') est
optimal pour Prob_delta(λ', α₀) avec 0 < λ' ≤ λ₁, alors ΔY_A(λ) est optimal pour
Prob_delta(λ, α₀) pour tout λ ∈ [0, λ₁].
☐

J Le programme python

Voici le premier programme qui créer toute les fonctions nécessaire.

Le programme modele_LUA.py

1 import cvxpy as cp

2 import numpy as np

3 from math import inf

4 from numpy import norm

5 from cvxpy.atoms.affine import multiply

6

7 import matplotlib.pyplot as plt

8 import matplotlib.image as mpimg

9 colorNames = ['blue', 'red', 'green', 'yellow', 'fuchsia', 'orange', 'limegreen', 'darkviolet', 'orangered', 'peru', 'midnightblue', 'coral', 'seagreen', 'tomato', 'darkturquoise', 'gray', 'magenta', 'olive', 'royalblue', 'greenyellow', 'deeppink']

10 #on ne peut depasser les 20 choix différents

11 plt.ion()

12
```python
if prob.status != 'optimal':
    print('Le probleme n est pas solvable')
else:
    print('Le probleme est solvable')
    valeur_par_f_et_s=x.value
    label = []
    r1 = range(N)
    barWidth = 0.8/q

y_liste = [[np.array([valeur_par_f_et_s[i, k*q+j]*L[k*q+j] for k in range(N)]) for j in range(q)] for i in range(m)]
for i in range(m):
    label += ['choix'+str(i)]
    for j in range(q):
        r=[x + j*barWidth for x in r1]
        y=y_liste[i][j]
        z(np.array([0 for k in range(N)]))
        for k in range(i):
            z = z + y_liste[k][j]
            if j==0:
                plt.bar(r, y, color = colorNames[i], bottom=z,
                         width = barWidth, edgecolor = ['black' for i in y], linewidth = 1,
                         label='choix'+str(i+1))
            else:
                plt.bar(r, y, color = colorNames[i], bottom=z,
                         width = barWidth, edgecolor = ['black' for i in y], linewidth = 1)
                fermes = ['F'+str(k+1) for k in range(N)]
                plt.xticks([r + 0.8*(1-2./q) for r in r1], fermes)
                plt.gca().set_ylim(0, surface_max+0.2)

        plt.legend(loc='best')
        plt.title('la contraintes est a'.format(c))
        plt.show()
        plt.clf()
        print("la valeur de l'objectif est a ":.3f).format(result))

def affichage_rassembles(x, prob, result, rassemblement, c, infos):
    q, m, L=infos[1], Infos[2], Infos[3]
    print("
    la contraintes est a
    ")
    if prob.status != 'optimal':
        print('Le probleme n est pas solvable')
    else:
        print('Le probleme est solvable')
        NR = len(rassemblement)
        valeur_par_f_et_s=x.value
        valeur_rassemblee = [[0 for j in range(m)] for i in range(NR*q)]
        surface_rassemblee_max=0
        for i in range(NR):
            for k in range(q):
                for j in range(m):
                    valeur_rassemblee[i*q+k][j] = sum([L[i*q+k]*
                                                valeur_par_f_et_s[j][l*q+k] for l in rassemblement[i]])
                    surface_rassemblee_max = max(surface_rassemblee_max, sum([L[l*q+k] for l in rassemblement[i]]))
                label = []
                r1 = range(NR)
                barWidth = 0.8/q
```
(NR)]) for j in range(q)] for i in range(m)]
for i in range(m):
    label += ['choix'+str(i)]
for j in range(q):
    r=[x + j*barWidth for x in r1]
    y=y_liste[i][j]
    z= np.array([0 for k in range(NR)])
    for k in range(i):
        z = z + y_liste[k][j]
        if j==0:
            plt.bar(r, y, color = colorNames[i], bottom=z,
                     width = barWidth, edgecolor = ['black' for i in y], linewidth = 1,
                     label='choix'+str(i+1))
        else:
            plt.bar(r, y, color = colorNames[i], bottom=z,
                     width = barWidth, edgecolor = ['black' for i in y], linewidth = 1)
    fermes = ['F'+str(k+1) for k in range(NR)]
    plt.xticks([r + 0.8*(1-2./q) for r in r1], fermes)
    plt.gca().set_ylim(0, surface_rassemblee_max+0.2)
    plt.legend(loc='best')
    plt.title('la contraintes est a'.format(c))
    plt.show()
    plt.clf()
    print("la valeur de l'objectif est a ":.3f}
    print(result)
#affichage des pertes, puissance et gain
def opt(ind, sol):
    return(np.amax(ind[sol,:]))
def perte(ind, sol):
    k = max(ind[sol,:])
    return (k-ind[sol,:])
def gain(ind, sol, k):
    return (ind[sol,:]-ind[sol,k])
def puissance(Obj, contr, sol):
    k=opt(Obj,sol)
    Perte=perte(Obj,sol)
    Gain=gain(contr,sol,k)
    Puissance =[]
    for i in range(len(Obj[sol,:])):
        if Perte[i==0:
            if Gain[i==0:
                Puissance +=[0]
            elif Gain[i]<0:
                Puissance +=[-inf]
            else :
                Puissance +=[+inf]
            else :
                Puissance +=[Gain[i]/Perte[i]]
    return (Puissance)
def affichage_info (Obj, contr, sol):
    k=opt(Obj,sol)
    Perte=perte(Obj,sol)
    Gain=gain(contr,sol,k)
    Puissance=puissance(Obj,contr,sol)
    print(' Perte Gain Puissance')
    for i in range(len(Obj[sol,:])):
178
Perte[i], Gain[i], Puissance[i]))

179

def affichage_infostout_sols (Obj, contr, infos):
180
    q=infos[1]
181
    for i in range(q):
182
        print("
183
            affichage_info斯(Obj, contr, i)
184
        # ln[]
185
        # Resolution et affichage dynamique
186
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
187
        # Solve le probleme 'prob' pour un contrainte qui va de 0 a '
188
        fin_contrainte' avec 'nb_points' points
189
        # et affiche les affectations a chaque etapes si 'barplot=True'
190
        def resolution_dynamique(prob,x,Parametre,fin_contrainte,nb_points,
191
                                   infos,regroupement,barplot=False):
192
            N,q,m,L,F=infos[0],infos[1],infos[2],infos[3],infos[5]
193
            resultats_objectif =[]
194
            affectation_sols =[[[] for k in range(m)] for i in range(N*q)]
195
            liste_contraintes =np.linspace(0,fin_contrainte+2./nb_points,
196
                                           nb_points)
197
            for c in liste_contraintes:
198
                Parametre.value =([c for k in range(len(regroupement))])
199
                result = probsolve()
200
                if barplot:
201                    affichage_rassembles(x,prob,F,regroupement,c,infos)
202                affichage en barplot !!! choisir la resolution !!!
203                if prob.status == 'optimal':
204                    resultats_objectif +=[result]
205                xv=x.value
206                for k in range(m):
207                    for i in range(N*q):
208                        affectation_sols[i][k] +=[xv[k][i]*L[i]]
209                else:
210                    resultats_objectif +=[0]
211                for k in range(m):
212                    for i in range(N*q):
213                        affectation_sols[i][k] +=[0]
214            return (liste_contraintes, resultats_objectif, np.array(
215                      affectation_sols))
216
217
218
219
220
221
222
223
# Affiche la valeur de l'objectif en fonction de la contrainte
224
def affichage_objectif_contrainte(liste_contraintes, resultats_objectif):
225
    plt. plot(liste_contraintes, resultats_objectif, "-.", label='objectif')
226
    #affichage
227    plt. title('Objectif en fonction de la contrainte')
228    plt. ylabel('Contrainte')
229    plt. ylabel('Objectif')
230    plt. show()
231
232
233
# Affiche l'affectation des sols les fermes de 'unite' en fonction de
234    la contrainte
235
def affichagesol_contrainte (liste_contraintes, affectation_sols, unite,
236                      infos):
237
    N,q,m=infos[0],infos[1],infos[2]
238
    fig, ax = plt. subplots(q, figsize=(8, max(q*2.3,5)), dpi=max(q*100,150)
239)
240
    fig. suptitle('Surfaces en fonction de la contrainte pour les
228 differentes sols des fermes '+str(unite))
229 for i in range(q):
230 for k in range(m):
231 ax[i].plot(liste_contraintes, sum(affectation_sols[ferme*q+i][k] for ferme in unite), '-.', label='Choix'+str(k), color=colorNames[k])
232 if i==N-q-1:
233 ax[i].set_xlabel('Contraintes')
234 ax[i].set_ylabel('Sol'+str(i+1))
235 if i==0:
236 ax[i].legend(loc='right')
237 plt.show()
238 plt.clf()
239
240 # ln[]:
241 #creation de contraintes
242 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
243 def contrainte_fixe_unifiee(x, constraints, regroupement, ind, c, infos):
244 return (constraints + [resultat_rassembles(x, ind, regroupement, infos)
245 >= [c for k in range(len(regroupement))]) ])
246 def contrainte_fixe_specialisee(x, constraints, regroupement, ind, vecteur, infos):
247 return (constraints + [resultat_rassembles(x, ind, regroupement, infos)
248 >= vecteur])
249 def contrainte_parametrique(x, constraints, regroupement, ind, infos):
250 Parametre= cp.Parameter(len(regroupement), nonneg=True)
251 constraints = constraints + [resultat_rassembles(x, ind, regroupement,
252 infos) >= Parametre]
253 return (Parametre, constraints)

Voici le programme qui permet de créer un scénario.

Le programme scenario_exemple_LUA.py

1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 ""
4 Created on Tue Jun 8 11:35:05 2021
5
6 @author: leon
7 ""
8 import cvxpy as cp
9 import numpy as np
10 from math import inf
11 from numpy import norm
12 from cvxpy.atoms.affine.binary_operators import multiply
13 import modele_LUA_info as ml
14
15
16 #
17 ###########################################
18 ###########################################
19 #
```python
20 #cartographie des sols ([F1S1,F1S2, F1S3,...],[F2S1,F2S2,...],[.....,
21 cartographie_fermes=[[1,1,2],
22                  [1,2,3]]
23
24 # grandeur des donnees
25 m = 3 #nb de choix
26 F,infos=ml.calcul_informations_territoirecartographie_fermes,m)
27 N=infos[0] # nb de fermes
28 q=infos[1] #nb de sols
29 L=infos[3]
30 Somme_surSol= np.ones(m)
31
32 #rassemblement des territoires
33 R=[[k for k in range(N)]] #il y a une region qui contient les 6 fermes
34 SR=[[0,1]] #il y a 2 sous regions
35 F=F # La liste des fermes
36
37 #
38
39 #
40
41
42 #
43 #la fonction objectif
44 Obj = np.array([[0 ,1 ,2], #les lignes sont les sols, les colonnes
45                  [0.1,1 ,3],
46                  [0.2,2 ,0.5]])
47 Mobj=ml.Mind(Obj,infos)
48
49 #autres indicateurs
50 Riz = np.array([[1 ,0.75 ,0],
51                  [0.2,1 ,0],
52                  [0.5,0 ,0.5]])
53
54 Grain = np.array([[1 ,2 ,0],
55                  [0.1,3 ,0],
56                  [0.2,5 ,0]])
57 #
58
59 #
60 #
61
62 #
63 x = cp.Variable((m,N,q)) #definition des variables de decisions
64 objective = cp.Maximizecp.sum(multiply(x,Mobj)@L)) #la fonction
65
66 constraints = [0 <= x, Somme sur sol@x ==1] #les contraintes de
67 surfaces
c=0 #valeur initiale de la contraintes
```
```python
67
68 #
69 ###########################################La contrainte parametrique
70 #
71 #les paramettres de la contrainte parametrique
72 regroupement=R #echelle a laquelle on impose la contrainte
73 indicateur_contraint = Riz
74
75 Parametre,constraints=ml.contrainte_parametrique(x,constraints,
76 regroupement, indicateur_contraint,infos) #les contraintes du
77 scenario
78 #paramettre d'affichage pour la contrainte parametrique
79 regroupement_affichage=F #echelle a laquelle on souhaite afficher les
80 barplot = False #Veut-on afficher les barplot a chaque etapes ?
81 fin_contrainte = 10 #la liste de contrainte va de 0 a 'fin_contrainte'
82 nb_points = 300 #le nb de points de la liste de contraintes
83
84
85 #
86 ###########################################Les autres contraintes
87 #
88 #constraints=contrainte_fixe_specialisee(x,constraints, regroupement,
89 #constraints = contrainte_fixe_unifiee(x,constraints, regroupement, ind
90
91
92 # ln[]:
93 #resolution et affichage
94 ###NE PAS TOUCHER LE DEBUT###
95
96 prob = cp.Problem(objective, constraints)
97 Parametre.value=[c for k in range(len(regroupement))])
98 result = prob>solve()
99
100 liste_contraintes, resultats_objectif,affectation_sols=ml.
101 resolution_dynamique(prob,x,Parametre,fin_contrainte,nb_points,
102 infos,regroupement,barplot=barplot)
103 ml.affichage_objectif_contrainte(liste_contraintes, resultats_objectif)
104 for unite in regroupement_affichage:
105 ml.affichage sol_contrainte(liste_contraintes,affectation_sols,
106 unite,infos)
107 ml.affichageInfos_tout_sols(Obj,Riz,infos)
108
109
110 ###AJOUTER LES AFFICHAGE VOULUS ICI###
```