Vous êtes sur la page 1sur 113

UNIVERSITE CHARLES DE GAULLE - LILLE 3

UFR DE MATHEMATIQUES,
SCIENCES ECONOMIQUES
ET SOCIALES.

Licence MASS

Théorie et pratique de l’optimisation

Daniel DE WOLF

Villeneuve d’Ascq, Octobre 2002


Table des matières

I Les méthodes d’optimisation 7

1 La programmation linéaire. 9
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Un simple exemple . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.1 Choix des variables . . . . . . . . . . . . . . . . . . . . 10
1.2.2 Expression de l’objectif . . . . . . . . . . . . . . . . . . 11
1.2.3 Expression des contraintes . . . . . . . . . . . . . . . . . 11
1.3 Résolution graphique . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.1 Représentation graphique de la région réalisable . . . . . 12
1.3.2 Représentation graphique de l’objectif . . . . . . . . . . . 12
1.3.3 Détermination graphique de l’optimum . . . . . . . . . . 14
1.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2 Algorithme du Simplexe. 17
2.1 Principe de l’algorithme . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Formes canoniques d’un programme linéaire. . . . . . . . . . . . 18
2.3 Notion de solution de base . . . . . . . . . . . . . . . . . . . . . 19
2.4 Initialisation de l’algorithme . . . . . . . . . . . . . . . . . . . . 20
2.5 Une itération Simplexe . . . . . . . . . . . . . . . . . . . . . . . 21
2.5.1 Choix de la direction . . . . . . . . . . . . . . . . . . . . 21
2.5.2 Choix de la variable sortante . . . . . . . . . . . . . . . . 21
2.5.3 Calcul du nouveau sommet . . . . . . . . . . . . . . . . 22
2.5.4 Test d’optimalité . . . . . . . . . . . . . . . . . . . . . . 24
2.6 Tableau Simplexe et pivotage . . . . . . . . . . . . . . . . . . . 25

3
4 Table des matières

2.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3 Analyse postoptimale. 31
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Variation par rapport au second membre . . . . . . . . . . . . . . 32
3.2.1 Interprétation des prix cachés . . . . . . . . . . . . . . . 33
3.2.2 Domaine de validité des prix cachés . . . . . . . . . . . . 34
3.3 Variation des coefficients objectifs . . . . . . . . . . . . . . . . . 36
3.3.1 Domaine de validité de la solution optimale . . . . . . . . 36
3.4 Coût réduit des variables hors base . . . . . . . . . . . . . . . . . 38
3.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4 La programmation en nombres entiers. 41


4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Formulation des problèmes mixtes . . . . . . . . . . . . . . . . . 41
4.2.1 Problèmes avec coûts fixes . . . . . . . . . . . . . . . . . 41
4.2.2 Problèmes avec contrainte logique . . . . . . . . . . . . . 43
4.2.3 Mélange avec nombre limité d’ingrédients . . . . . . . . 44
4.2.4 Choix parmi un nombre discret de valeurs . . . . . . . . . 45
4.3 Méthode de branch and bound . . . . . . . . . . . . . . . . . . . 45
4.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

5 Les modèles non linéaires 51


5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.2 Différence avec la programmation linéaire . . . . . . . . . . . . . 52
5.3 Les problèmes convexes . . . . . . . . . . . . . . . . . . . . . . 54
5.4 Programmation séparable . . . . . . . . . . . . . . . . . . . . . 56
5.5 La méthode de Franck-Wolfe . . . . . . . . . . . . . . . . . . . 58
5.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Table des matières 5

II Logiciels d’optimisation 63

6 Le solveur d’EXCEL. 65
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.2 Les rapports du solveur . . . . . . . . . . . . . . . . . . . . . . 69
6.2.1 Le rapport des réponses . . . . . . . . . . . . . . . . . . 69
6.2.2 Le rapport de sensibilité . . . . . . . . . . . . . . . . . . 70
6.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

7 Le language GAMS 75
7.1 Un exemple de transport . . . . . . . . . . . . . . . . . . . . . . 75
7.1.1 Choix des variables de décision . . . . . . . . . . . . . . 75
7.1.2 Expression de l’objectif . . . . . . . . . . . . . . . . . . 76
7.1.3 Expression des contraintes . . . . . . . . . . . . . . . . . 76
7.2 Ecriture en GAMS . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.2.1 Section SET . . . . . . . . . . . . . . . . . . . . . . . . 78
7.2.2 Les données . . . . . . . . . . . . . . . . . . . . . . . . 79
7.2.3 Section VARIABLES . . . . . . . . . . . . . . . . . . . 81
7.2.4 Section EQUATIONS . . . . . . . . . . . . . . . . . . . 82
7.2.5 Section MODEL . . . . . . . . . . . . . . . . . . . . . . 84
7.2.6 Section SOLVE . . . . . . . . . . . . . . . . . . . . . . 84
7.3 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

8 Fonctions plus avancées en GAMS 87


8.1 Les sous-ensembles . . . . . . . . . . . . . . . . . . . . . . . . 87
8.2 Les ensembles multi-dimensionnaux . . . . . . . . . . . . . . . . 87
8.3 Définition et initialisation de paramètres . . . . . . . . . . . . . . 88
8.4 Définition des variables et de leur type . . . . . . . . . . . . . . . 90
8.5 Utilisation de l’opérateur d’exceptions . . . . . . . . . . . . . . . 91
8.6 Section SOLVE . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6 Table des matières

9 Interprétation de la solution 95
9.1 Un exemple de planification de production . . . . . . . . . . . . 95
9.1.1 Choix des variables de décisions . . . . . . . . . . . . . . 96
9.1.2 Definition de la fonction objectif . . . . . . . . . . . . . 96
9.1.3 Expression des contraintes . . . . . . . . . . . . . . . . . 96
9.2 Interprétation économique . . . . . . . . . . . . . . . . . . . . . 98
9.2.1 Interprétation des prix duaux . . . . . . . . . . . . . . . 99
9.2.2 Interprétation des coûts réduits . . . . . . . . . . . . . . 99
9.3 Output de GAMS . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.3.1 Echo du programme GAMS . . . . . . . . . . . . . . . . 100
9.3.2 Liste des contraintes . . . . . . . . . . . . . . . . . . . . 102
9.3.3 Liste des colonnes . . . . . . . . . . . . . . . . . . . . . 102
9.3.4 Statistiques du modèle . . . . . . . . . . . . . . . . . . . 103
9.3.5 Status du solveur . . . . . . . . . . . . . . . . . . . . . . 103
9.3.6 Rapport des solutions . . . . . . . . . . . . . . . . . . . 104
9.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

10 Résolution de modèles non linéaires 107


10.1 Modèles en nombres entiers . . . . . . . . . . . . . . . . . . . . 107
10.2 Utilisation du solveur MIP avec GAMS . . . . . . . . . . . . . . 107
10.3 Modèles non linéaires . . . . . . . . . . . . . . . . . . . . . . . 108
10.4 Résolution de problèmes non linéaires avec GAMS . . . . . . . . 108
10.5 Conditions de Kuhn et Tucker . . . . . . . . . . . . . . . . . . . 109
10.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Partie I
Les méthodes d’optimisation

7
Chapitre 1

La programmation linéaire.

1.1 Introduction

Dans cette première partie du cours, nous allons donner une introduction aux
techniques de résolution des problèmes d’optimisation, c’est-à-dire des problèmes
où l’on veut maximiser une fonction de plusieurs variables sous des contraintes.
En effet, bon nombre de problèmes de gestion se formulent de cette manière.
Nous commencerons par le cas des problèmes linéaires, c’est-à-dire les pro-
blèmes où la fonction objectif et les contraintes sont purement linéaires. Lorsqu’il
n’y a que deux variables de décision, un problème linéaire peut être résolu de
manière purement graphique. Lorsqu’il y a un plus grand nombre de variables,
un algorithme mis en œuvre sous la forme d’un programme informatique s’avère
nécessaire. Il s’agit de l’algorithme du Simplexe que nous verrons au chapitre 2.
Lorsque les variables doivent prendre des valeurs entières, on parle de problè-
mes en nombres entiers. On devrait à proprement parler de problèmes linéaires en
nombres entiers car on impose, en plus, aux contraintes et à la fonction objectif
d’être linéaires. Nous verrons au chapitre 4 une technique de résolution de ces
problèmes : il s’agit de la méthode de branch and bound.
Lorsque les contraintes et/ou la fonction objectif sont non linéaires, on parle
de problèmes non linéaires. Nous verrons au chapitre 5 deux algorithmes de
résolution de problèmes non linéaires.
Il est à remarquer que ces méthodes de résolutions étant mises en œuvre dans des
logiciels commerciaux, il ne viendrait plus à l’idée de les programmer soi-même.
La seconde partie du cours sera consacrée au solveur d’Excel [4] et au logiciel
GAMS [1] qui disposent tous deux d’une implémentation de ces algorithmes.

9
10 Chapitre 1. La programmation linéaire.

1.2 Un simple exemple

Nous prenons un exemple tiré de Hillier et Lieberman [6]. Il s’agit d’une entreprise
de fabrication de chassis qui envisage la production de deux nouveaux modèles
au moyen des capacités résiduelles de ses trois ateliers. Il s’agit respectivement
d’un chassis en aluminium et d’un chassis en bois. Le premier produit nécessite
le passage dans le premier atelier pour fabriquer le cadre en aluminium et dans le
troisième atelier où le verre est monté sur le chassis. Tandis que le second produit
nécessite le passage dans le deuxième atelier pour fabriquer le cadre en bois et
dans le troisième atelier où le verre est monté sur le chassis. Les marges unitaires,
les temps de fabrication de chacun des produits dans chacun des ateliers ainsi que
les capacités hebdomadaires résiduelles de ces ateliers sont donnés au tableau 1.1.
La question qui se pose est la suivante : “Combien faut-il produire de chassis de
chaque type par semaine pour maximiser le profit net ?”

Produit 1 Produit 2 Capacité disponible


(heures/produit) (heures/produit) (heures/semaine)
Atelier 1 1 0 4
Atelier 2 0 2 12
Atelier 3 3 2 18
Marge 3$ 5$

Tableau 1.1: Marges, temps d’usinage et capacités.

La formulation d’un problème d’optimisation comporte toujours trois étapes :

1. choix des variables du modèle,

2. formulation de l’objectif,

3. formulation des contraintes.

1.2.1 Choix des variables

Définition 1.1 On appelle variable toute quantité utile à la résolution du problème


dont le modèle doit déterminer la valeur.

Cette définition permet de différencier les variables des paramètres, qui sont des
données qui peuvent varier, par exemple d’une période à l’autre. Ici les quantités
Section 1.2. Un simple exemple 11

que le modèle doit déterminer sont les productions de chassis par semaine :
x1 = nombre de chassis de type 1 produits par semaine,
x2 = nombre de chassis de type 2 produits par semaine.

1.2.2 Expression de l’objectif

Définition 1.2 On appelle fonction objectif d’un problème d’optimisation le cri-


tère de choix entre les diverses solutions possibles.

Ici l’entreprise désire maximiser son profit net qui s’exprime comme suit :
max z = 3x1 + 5x2

1.2.3 Expression des contraintes

Définition 1.3 On appelle contraintes du problème toutes les relations limitant


le choix des valeurs possibles des variables.

Ces relations peuvent être de simples bornes sur les variables. Par exemple, les
quantité produites ne peuvent être négatives. Mathématiquement :
x1 , x2 ≥ 0.

Elles peuvent être plus complexes comme les contrainte de capacité de produc-
tion. Le temps pour assembler 1 chassis de type 1 dans l’atelier 1 est de 1 heure
où il reste 4 heures disponibles. D’où la contrainte de capacité de l’atelier 1 :
x1 ≤ 4
Semblablement, on peut écrire les contraintes de capacité des 2 autres ateliers :
2x2 ≤ 12
3x1 + 2x2 ≤ 18

Il est alors très utile de reprendre sous une forme condensée la formulation
complète du problème. Ici, on obtient la formulation suivante :
max z = 
3 x 1 + 5 x2

 x1
 ≤ 4



 2x2 ≤ 12
 (1.1)
s.c.q. 
3x1 + 2x2 ≤ 18




 x1 ≥ 0


x2 ≥ 0
12 Chapitre 1. La programmation linéaire.

1.3 Résolution graphique

Comme annoncé dans l’introduction, dans le cas de deux variables de décision,


un problème linéaire peut être résolu de manière purement graphique en suivant le
processus en trois étapes suivant :

1. représentation graphique de la région réalisable;

2. représentation graphique de l’objectif,

3. détermination graphique du point optimal.

1.3.1 Représentation graphique de la région réalisable

Définition 1.4 On appelle région réalisable, l’ensemble des valeurs de variables


de décision qui satisfont toutes les contraintes.

Dans le cas de l’exemple, c’est l’ensemble des points (x1 , x2 ) satisfaisant les
inégalités de (1.1).
Graphiquement une inégalité telle que 3x1 + 2x2 ≤ 18 correspond à un demi-
plan limité par la droite obtenue en prenant l’inéquation à l’égalité (ici 3x1 +2x2 =
18). Lorsque l’on fait l’intersection des cinq demi-plans correspondant aux cinq
inégalités, suivantes :



 x1 ≤ 4 (1)



 2x2 ≤ 12 (2)


3x1 + 2x2 ≤ 18 (3)




 x1 ≥ 0 (4)


x2 ≥ 0 (5)

on obtient le polygone hachuré à la figure 1.1. En économie, cet ensemble réalisable


est encore appelé l’ensemble de production.

1.3.2 Représentation graphique de l’objectif

On voit ici clairement que le système est sous-déterminé. On va devoir choisir entre
ces différents plans de production. Pour ce faire, on va représenter graphiquement
des lignes d’isovaleur de la fonction objectif :

z = 3x1 + 5x2 .
Section 1.3. Résolution graphique 13

x2
(4)
10

8 (1)
(2)
6

2 (3)
(5)
0 2 4 6 8 x1

Figure 1.1: Ensemble de production.

En effet, on remarquera que l’expression de la fonction objectif fait intervenir trois


variables et ne peut donc être représentée que dans l’espace. Pour se ramener dans
le plan, on va considérer des valeurs successives de l’objectif :

z = k.

Ce qui correspond graphiquement à des droites parallèles

3x1 + 5x2 = k.

Les points d’une de ces droites sont donc le lieu de tous les points donnant la même
valeur du profit (d’où le nom de droite d’isovaleur de la fonction objectif). Ceci
est fait à la figure 1.2 où l’on a représenté z = 10, 20 et 36.
x2

10

8
(2, 6)
6

4
(4 , 3)
2 z = 36

0 2 6 8 x1
z = 10 z = 20

Figure 1.2: Droites d’isoprofit.


14 Chapitre 1. La programmation linéaire.

1.3.3 Détermination graphique de l’optimum

L’optimum sera déterminé graphiquement comme le plan de production situé sur


la droite d’isoprofit la plus élevée, c’est-à-dire celle qui donne le profit le plus
élevé. On voit à la figure 1.2 qu’il s’agit du point

x∗ = (2, 6).

Justifions ce choix. Comme on maximise le profit on a intérêt à prendre la droite


d’isovaleur la plus élevée possible. Bien sûr, il faut que le plan de production soit
encore réalisable : autrement dit, il faut se restreindre à la région réalisable.
Observation 1 :
Pour maximiser l’objectif, il faut prendre la droite d’isovaleur de l’objectif qui
touche encore la région réalisable et qui donne la plus grande valeur à l’objectif.
Observation 2 :
On constate que la solution optimale est à un sommet de la région réalisable.
On peut alors se demander si la solution optimale sera toujours à un sommet de
la région réalisable. En fait, lorsque la ligne d’iso-marge est parallèle à un côté du
polygone, on a que tout le côté du polygone est optimal. Par exemple, si l’objectif
avait été z = 3x1 + 2x2 , tout le segment entre (2,6) et (4,3) aurait été optimum.
Observation 3 :
Même si tout un côté du polygone est optimal, on peut toujours choisir une solution
optimale correspondant à un sommet.
En conclusion, on peut voir qu’il suffit d’évaluer la valeur de l’objectif en
chacun des sommets pour déterminer l’optimum d’un problème linéaire.
Mais on peut aller plus loin encore pour limiter le nombre de sommets à
examiner en se basant sur la quatrième observation suivante.
Observation 4 :
Le long d’un côté du polygone, la valeur de l’objectif peut être soit constante, soit
strictement croissante, soit strictement décroissante.
On peut donc suggérer l’algorithme suivant :

i) Choisir comme point de départ un sommet x∗ de la région réalisable.

ii) Déterminer les côtés passant par ce sommet x∗ . Trouver un côté le long
duquel z croı̂t. S’il n’y en n’a pas, STOP : le x∗ courant est optimal.

iii) Déterminer le sommet y ∗ à l’autre bout du côté et poser x∗ = y ∗ . Retour


en ii).
Section 1.4. Exercices 15

1.4 Exercices

1.1. La minimisation des coûts. Une entreprise peut fabriquer un même produit
dans deux usines différentes. Les capacités de production de ces deux usines,
exprimées en quantité de produit par jour, sont de 7 pour la première usine et
de 10 pour la seconde. D’autre part, on suppose que le nombre d’heures de
main d’œuvre que l’on peut affecter globalement à cette production est de 60
par jour. Or chaque unité produite nécessite 10 heures de main d’œuvre dans
la première usine alors qu’elle n’en nécessite que 5 dans la seconde. Enfin,
la production totale doit permettre de satisfaire au moins une demande de 8
unités par jour. Sachant que les coûts variables unitaires sont de 2 pour la
première usine et de 3 pour la seconde, l’entreprise désire produire à coût
minimum.

(a) Ecrire le programme linéaire correspondant.


(b) Résoudre graphiquement.

1.2. Recyclage du papier. Une société de tri de déchets et recyclage de pa-


pier peut se fournir en déchets auprès de deux villes. Son rôle consiste à
séparer les listes d’ordinateur et les journaux. La répartition entre ménages
et sociétés est différente d’une ville à l’autre expliquant un pourcentage
différent de listes d’ordinateur et de journaux dans les déchets. Ces pour-
centages ainsi que la quantité maximum de déchets que peuvent fournir par
an ces deux villes sont reprises au tableau suivant :

Ville Listes Journaux Offre


% % tonnes par an
Ville 1 5 20 10.000
Ville 2 15 30 20.000

La société offre aux villes un prix de 35 EURO par tonne de déchet. Elle
doit décider du montant optimal de déchets à acheter à chaque ville pour
minimiser son coût d’achat. Pour couvrir ses frais fixes, la société doit au
moins collecter 1.500 tonnes de listing d’ordinateur par an. Au delà de 6.000
tonnes de journaux mis sur le marché par an, le prix que la société reçoit
pour la vente de journaux chute et donc la compagnie ne désire pas vendre
plus que cette quantité. Combien la société doit-elle acheter de déchets par
an à chacune des villes ?

(a) Formuler mathématiquement le problème (choix des variables, expres-


sion des contraintes et de l’objectif);
16 Chapitre 1. La programmation linéaire.

(b) Déterminer graphiquement le plan d’achat optimal et en déduire le coût


d’achat minimum.

1.3. Planification de production sur coût variable. Une entreprise fabrique


deux produits P1 et P2 . Chaque produit doit passer dans deux ateliers (usi-
nage et finition). Le mois dernier, 500 unités de P1 ont été produites grâce
à 750 heures de travail dans l’atelier usinage et 250 heures dans l’atelier
finition. De même, 700 unités de P2 ont été produites, nécessitant 700
heures dans l’atelier usinage et 350 heures dans l’atelier finition. L’entre-
prise dispose également d’une section administration. Une partie du coût de
production est indépendante du nombre d’heures passées à la production (les
frais fixes), une partie est directement proportionnelle au nombre d’heures
passées à la production (les frais variables). Le mois passé, on a observé la
répartition suivantes entre frais fixes et frais variables :

Section frais fixes frais variables


Administration 50.000 0
Usinage 60.000 11.600
Finition 40.000 6.000

Il y a également un coût de conditionnement du produit qui est de 8 EURO


par unité du produit P1 et de 6 EURO par unité du produit P2 . Les prix de
vente unitaires sont de 55 EURO et 43 EURO respectivement.

(a) Calculer les marges sur coûts variables (différence entre prix de vente
et coût variable de production) par unité de chacun des deux produits.
Indication : calculer d’abord le prix de l’heure dans chacun des ateliers
et le temps nécessaire dans chacun des ateliers par produit.
(b) Les capacités de production sont de 1.200 heures par mois pour l’atelier
d’usinage et de 500 heures par mois pour l’atelier de finition. Formuler
le programme linéaire correspondant à la maximisation de la marge sur
coûts variables (choix des variables, expression des contraintes et de
l’objectif).
(c) Déterminer graphiquement les productions qui maximise la marge sur
coût variable.
Chapitre 2

Algorithme du Simplexe.

2.1 Principe de l’algorithme

Le principe de l’algorithme du Simplexe est de déterminer une solution optimale


en allant de sommet en sommet adjacent. Rappelons la formulation de l’exemple
introductif :
max z = 3 x1 + 5 x2




x1 ≤ 4

 2x2 ≤ 12 (2.1)
s.c.q. 

 3x1 + 2x2 ≤ 18


x1 , x2 ≥ 0
dont la représentation graphique est donnée à la figure 2.1.
x1 = 0

10
(0, 9)
8 x1 = 4

(2, 6) (4 , 6)
(0, 6) 2x2 = 12

4 (4, 3)
2 3x1 + 2x2 = 18

(0 , 0) 2 (4, 0) (6 , 0) 8 x2 = 0

Figure 2.1: Un exemple de programme linéaire

Partant du point (0,0), l’algorithme va déterminer une arête le long de laquelle


l’objectif s’accroı̂t : par exemple, l’arête en direction de (0,6). Ensuite, on va
aller jusqu’au bout de cette arête : c’est-à-dire au sommet (0,6). Et le processus

17
18 Chapitre 2. Algorithme du Simplexe.

continue de manière itérative. On détermine une arête le long de laquelle l’objectif


s’accroı̂t : l’arête en direction de (2,6). On va jusqu’au bout de l’arête et là on
constate que tout mouvement, en arrière vers (0,6) ou en avant vers (4,3), conduit
à diminuer l’objectif. On est donc à l’optimum.

2.2 Formes canoniques d’un programme linéaire.

La forme canonique d’un programme linéaire dans l’espace des variables originales
avait été illustrée par l’exemple introductif (2.1). Observons qu’il est toujours pos-
sible de transformer une contrainte d’inégalité générale en une contrainte d’égalité
par ajout d’une variable à laquelle on impose d’être non négative. Considérons,
par exemple, la contrainte
3x1 + 2x2 ≤ 18.
Imposer que le membre de gauche soit inférieur ou égal au membre de droite,
revient à dire qu’il faudrait ajouter une quantité non négative au membre de gauche
pour qu’il y ait égalité :
3x1 + 2x2 + x3 = 18,
avec la condition que la variable x3 soit non négative

x3 ≥ 0.

Définition 2.1 La variable d’écart est la quantité qui, ajoutée au membre de


gauche d’une contrainte, permet de transformer la contrainte en égalité.

Appliquons ceci au problème (2.1). On obtient le problème sous forme standard


avec égalités suivant :

max z = 3x1 + 5x2




 x1 +x3 = 4



 2x2 +x4 = 12 (2.2)
s.c.q. 

 3x1 +2x2 +x5 = 18



x1 , x2 , x3 , x4 , x5 ≥ 0

Remarquons qu’il y a équivalence totale entre les deux formes. En effet,


d’une part, toute solution réalisable du problème (2.1) peut être augmentée en une
solution réalisable pour le problème (2.2). Toute solution réalisable du problème
(2.2) peut être tronquée en une solution réalisable pour le problème (2.1). Comme,
d’autre part, les fonctions objectifs sont identiques, on a bien équivalence entre les
deux problèmes.
Section 2.3. Notion de solution de base 19

2.3 Notion de solution de base

On remarquera que les égalités du problème (2.2) forment un système de m =3


égalités en n + m = 2 + 3 = 5 inconnues. Donc la valeur de n = 2 variables peut
être fixée arbitrairement. Par exemple, dans le système d’égalités :




 x1 +x3 = 4


2x2 +x4 = 12 (2.3)





 3x1 +2x2 +x5 = 18

les deux variables x1 et x2 peuvent être fixées à zéro. On dit qu’elles sont mises
hors base.

Définition 2.2 On appelle variables hors base (v.h.b.) les n variables de Rn+m
fixées à zéro. Les m variables restantes sont appelées variables de base (v.b.).

Dans l’exemple, les variables de base sont donc x3 , x4 et x5 dont on peut lire
la valeur dans (2.3) :

x3 = 4
x4 = 12
x5 = 18

Définition 2.3 On appelle solution de base une solution où en ayant choisi n
variables hors base, on obtient une solution unique en résolvant les m contraintes
d’égalités obtenues en ajoutant les variables d’écart.

Définition 2.4 On appelle solution de base réalisable une solution de base qui,
en plus, vérifie les contraintes de positivité.

Dans l’exemple, la solution de base suivante :

x1 = 0, x2 = 0 variables hors base


x3 = 4, x4 = 12, x5 = 18 variables de base
est réalisable car toutes les variables de base sont positives.
Le lien entre l’algèbre et la géométrie est alors donné par la propriété suivante.

Propriété 2.1 La notion géométrique de sommet du polygone correspond à la


notion algébrique de solution de base réalisable.
20 Chapitre 2. Algorithme du Simplexe.

Nous avons déjà annoncé que l’algorithme du Simplexe revient à aller de


sommet en sommet adjacent. Interprété algébriquement, cela revient à considérer
un passage d’une solution de base réalisable à une autre solution de base réalisable.
La notion d’adjacence doit être étendue aux solutions de base.

Définition 2.5 On appelle solutions de base adjacentes deux solutions de base


dont les variables de base sont les mêmes sauf une qui est de base dans la première
base et hors base dans la seconde.

Dans l’exemple, les deux solutions de base suivantes sont adjacentes :


x1 = 0, x1 = 0,
x2 = 0, x2 = 6,
x3 = 4, x3 = 4,
x4 = 12, x4 = 0,
x5 = 18, x5 =6
car elles ne diffèrent que par une seule variable hors base.

Propriété 2.2 La notion géométrique de sommets adjacents correspond à la no-


tion algébrique de solutions de base réalisables adjacentes.

2.4 Initialisation de l’algorithme

La question qui se pose est : “Comment choisir le point de départ ?” Si le problème


est mis sous forme d’inégalités du type ≤ avec des membres de droite tous positif,
il suffit de prendre l’origine comme point de départ :
(x1 , x2 ) = (0, 0)
En termes algébriques, toutes les variables originales sont mises hors base. Auto-
matiquement , dans le système d’égalités :


 x1 +x3 = 4


2x2 +x4 = 12 ,


3x1 +2x2 +x5 = 18
on lit la valeur des variables de base :
x3 = 4
x4 = 12
x5 = 18
Section 2.5. Une itération Simplexe 21

2.5 Une itération Simplexe

Pour rappel, le principe de l’algorithme du Simplexe consiste à se déplacer de


sommet en sommet adjacent de façon à améliorer la fonction objectif. On va donc
se déplacer à partir de notre solution de base de départ vers une solution de base
réalisable en suivant une arête le long de laquelle l’objectif s’accroı̂t.

2.5.1 Choix de la direction

La question qui se pose est alors : comment choisir la direction ? Remarquez


qu’algébriquement, cette question se formule de manière équivalente par : quelle
variable hors base va entrer en base ?
Le critère de sélection de la variable entrante est de prendre la variable hors
base qui fournit le plus fort taux d’augmentation de la fonction objectif :

z = 3x1 + 5x2 .

Pour une augmentation unitaire de x1 , z augmente de 3. Pour une augmentation


unitaire de x2 , z augmente de 5.
Le critère de sélection de la variable entrante est donc le suivant : on choisit
la variable avec le coefficient objectif le plus élevé.
Remarquez que pour pouvoir appliquer ce critère simple (choisir la variable
de coefficient objectif le plus élevé), la fonction objectif z doit être exprimée en
fonction des seules variables hors base.

2.5.2 Choix de la variable sortante

La question qui se pose est : quand s’arrêter le long de la direction ?


Géométriquement, on se dirige sur l’axe x2 et on s’arête en (6,0), à la première
contrainte rencontrée. Algébriquement, on constate qu’en ce point la variable
d’écart x4 s’annule et aller au delà conduirait à la rendre négative. On va donc pous-
ser x2 le plus loin possible, tant que les variables de base restent non négatives.
Le critère de sélection de la variable sortante est donc le suivant : prendre
comme variable sortante la première variable de base à s’annuler.
En maintenant x1 hors base dans (2.3), on obtient la variation des variables de
base en fonction de x2 :

x3 = 4 ≥ 0
22 Chapitre 2. Algorithme du Simplexe.

x4 = 12 − 2x2 ≥ 0
x5 = 18 − 2x2 ≥ 0

ou encore :
12
x2 ≤ =6
2
18
x2 ≤ =9
2

On en conclut que la variable sortante est x4 , c’est-à-dire la première qui


s’annule (pour x2 = 6).
De manière générale, on calcul le minimum du rapport du coefficient du membre
de droite sur le coefficient de la variable entrante dans la même ligne lorsque
celui-ci est positif. La variable sortante est celle dont on lit la valeur dans la
ligne où ce minimum se produit.

2.5.3 Calcul du nouveau sommet

La question qui se pose est : comment calculer la nouvelle solution de base ?


On va y répondre en utilisant la résolution de systèmes. Plus précisément, on
va calculer la nouvelle solution de base en explicitant le système (2.3) en fonction
des nouvelles variables de base.
Ceci peut être fait au moyen de deux types d’opérations qui ne modifient pas
l’ensemble des solutions d’un système d’équations :

1. Multiplier une égalité par une constante non nulle;


2. Additionner un multiple d’une équation à une autre équation.

Appliquons ceci à l’exemple. Ajoutons au système de départ (2.3) en première


ligne la définition de la fonction objectif :

z −3x1 −5x2 = 0 (0)


x1 +x3 = 4 (1)
2x2 +x4 = 12 (2)
3x1 +2x2 +x5 = 18 (3)

Donc x2 remplace x4 comme variable de base. On veut donc expliciter x2 dans


la contrainte (2) en lieu et place de x4 . Pour ce faire, il faut :
Section 2.5. Une itération Simplexe 23

1. Amener un 1 comme coefficient de x2 dans (2). Autrement dit, la nouvelle


contrainte notée (2’) est l’ancienne (2) multipliée par 1/2 :
1
(2 ) = (2) ×
2

2. Eliminer x2 des autres équations. Ceci en retranchant à la contrainte (3) la


contrainte (2) et en ajoutant à l’objectif (0) cinq fois la nouvelle contrainte
(2’) :

(3 ) = (3) − (2)


(0 ) = (0) + 5 × (2 )

Le nouveau système est donc le suivant :

z −3x1 + 52 x4 = 30 (0 )
x1 +x3 = 4 (1)
x2 + 12 x4 = 6 (2 )
3x1 −x4 +x5 = 6 (3 )

où l’on peut lire directement (en se souvenant que x1 et x4 sont hors base
donc nulles) :

z = 30
x3 = 4
x2 = 6
x5 = 6

On en déduit la valeur de la nouvelle solution de base :

(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6)

qui donne la nouvelle valeur de l’objectif :

z = 30.

Remarquez que les opérations d’élimination de x2 des lignes autres que la


deuxième se font obligatoirement en retranchant à chacune de ces lignes un mul-
tiple de la deuxième ligne. Toute autre opération détruirait les colonnes de la
matrice identité dans le système résultant comme on peut le constater en essayant,
par exemple, de faire :
(3 ) = −1 × (3) + (2).
24 Chapitre 2. Algorithme du Simplexe.

2.5.4 Test d’optimalité

La question qui se pose maintenant est la suivante : comment déterminer le fait


d’être optimum.
Un sommet est optimal si tous les sommets adjacents donnent des valeurs
inférieures ou égales à la fonction objectif. Comment peut-on voir s’il existe
encore un sommet adjacent profitable ?
Pour répondre à cette question, nous allons utiliser la ligne de définition de
l’objectif. L’équation (0’) se récrit :
5
z = 30 + 3x1 − x4 .
2
Comme x1 a un coefficient positif, il est intéressant de faire entrer x1 en base.
Le critère d’arrêt sera donc le suivant : la solution de base courante est opti-
male si tous les coefficients objectif sont négatifs ou nuls lorsque z est exprimée
en fonction des seules variables hors base.
Effectuons donc la seconde itération de l’algorithme du Simplexe. Au vu de
5
z = 30 + 3x1 − x4 .
2
on sélectionne donc pour la variable entrante x1 . En effet, c’est la variable avec
le plus grand coefficient objectif, et d’ailleurs la seule possible.
Pour déterminer la variable sortante, étudions la variation des variables de
base en fonction d’une augmentation de x1 :

x3 = 4 − x1
x2 = 6
x5 = 6 − 3x1

La variable sortante est x5 , c’est elle qui est la première à s’annuler (pour x1 = 2).
Pour calculer le nouveau sommet, on exprime le système en fonction des nou-
velles variables de base (x1 prend la place de x5 ) :

z + 32 x4 +x5 = 36
x3 + 13 x4 − 13 x5 = 2
x2 + 12 x4 = 6
x1 − 13 x4 + 13 x5 = 2
Section 2.6. Tableau Simplexe et pivotage 25

Donnant la nouvelle solution de base réalisable :

(2, 6, 2, 0, 0)

Appliquons à nouveau le test d’optimalité. La ligne objectif s’écrit :


3
z = 36 − x4 − x5 .
2
Comme tous les coefficients objectifs sont négatifs, la solution courante

x∗1 = 2
x∗2 = 6

est optimale. Elle donne sa valeur maximale à l’objectif qui est de :

z ∗ = 36.

Nous allons maintenant voir une autre façon de présenter les mêmes calculs.
Il s’agit de la présentation du Simplexe en tableaux.

2.6 Tableau Simplexe et pivotage

On effectue généralement les calculs sur le tableau des coefficients qui porte le
nom de tableau Simplexe. Mais il faut bien garder à l’esprit que ce tableau et les
opérations que l’on va y effectuer ne sont qu’une traduction des opérations sur le
système d’équations algébriques correspondantes.

Définition 2.6 Un tableau Simplexe est constitué des coefficients des équations
algébriques sans le nom des variables. On aura donc :

1. les coefficients de la fonction objectif;

2. les coefficients des variables dans le membre de gauche des contraintes;

3. les coefficients du membre de droite.

où l’on sépare les coefficients de objectif des contraintes d’une barre horizontale
et les coefficients du membre de gauche des contraintes des coefficients du membre
de droite par une barre verticale.
26 Chapitre 2. Algorithme du Simplexe.

Par exemple, le système de départ :

z −3x1 −5x2 = 0
x1 +x3 = 4
2x2 +x4 = 12
3x1 +2x2 +x5 = 18

se met sous la forme du tableau suivant :

z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 2 0 1 0 12
0 3 2 0 0 1 18

où l’on a ajouté au dessus du tableau le nom des variables pour voir à quelle variable
correspond chaque colonne du tableau.
Plusieurs caractéristiques d’un tableau sont à remarquer.

• Tout d’abord les valeurs du membre de droite donnent les valeurs courantes
des variables de base.

• Ensuite la première ligne donne l’opposé des coefficients objectif.

• Enfin, le dernier coefficient première ligne donne la valeur courante de


l’objectif.

• On identifie des variables de base à une colonne de coefficient de la matrice


identité et à un coefficient objectif nul.

On en déduit la solution courante :

(x1 , x2 , x3 , x4 , x5 ) = (0, 0, 4, 12, 18)

A la première itération, on sélection comme variable entrante la variable x2 de


coefficient le plus négatif dans la ligne objectif. On indique ceci dans le tableau
Section 2.6. Tableau Simplexe et pivotage 27

en encadrant la colonne de la variable entrant que l’on appelle la colonne pivot :

z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 2 0 1 0 12
0 3 2 0 0 1 18

On sélectionne la variable sortante comme étant la variable de base qui s’annule


la première. Mathématiquement, cela revient à calculer le minimum du rapport du
coefficient du membre de droite de chaque contrainte sur le coefficient correspon-
dant de la colonne pivot lorsque ce dernier est strictement positif :
 
12 18
min −, , = 6.
2 2
Dans le cas où le coefficient dans la colonne entrante est négatif ou nul, la ligne
n’entre pas en compte dans le calcul du minimum. La variable sortante est alors la
variable de base dont la valeur se lit dans la ligne où le minimum se produit : ici,
il s’agit de la deuxième ligne et donc de la variable x4 . On encadre alors la ligne
où le minimum se produit. Cette ligne reçoit le nom de ligne pivot :

z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 2 0 1 0 12
0 3 2 0 0 1 18

Définition 2.7 On appelle élément pivot le coefficient situé à l’intersection de la


colonne pivot et de la ligne pivot.

C’est donc le centre de la croix ainsi formée par la ligne et la colonne pivot.
Le pas suivant de l’itération Simplexe consiste à déterminer le nouveau som-
met : ceci en exprimant x2 dans la deuxième équation en lieu et place de x4 . Ceci
peut être fait par deux types d’opérations :
28 Chapitre 2. Algorithme du Simplexe.

1. Amener un coefficient 1 à la place du pivot en divisant la ligne pivot par le


pivot :
z x1 x2 x3 x4 x5
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 2 0 0 1 18

2. Eliminer x2 des autres équations en retranchant chaque fois un multiple de


la nouvelle ligne pivot :

z x1 x2 x3 x4 x5
1 −3 0 0 5/2 0 30
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 0 0 −1 1 6

La nouvelle solution de base et la nouvelle valeur de l’objectif sont respectivement :

(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6)
z = 30.

Effectuons maintenant la deuxième itération de l’algorithme du Simplexe. Le


premier pas de la deuxième itération consiste à déterminer la variable entrante. Il
s’agit de x1 , la variable de coefficient le plus négatif dans la ligne objectif. D’où
la sélection de la colonne pivot suivante :

z x1 x 2 x 3 x4 x5
1 −3 0 0 5/2 0 30
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 0 0 −1 1 6

Le second pas de l’itération consiste à déterminer la variable sortante. On


calcul le minimum du rapport des coefficients du membre de droite sur le coefficient
Section 2.6. Tableau Simplexe et pivotage 29

correspondant de la colonne entrante lorsque celui-ci est strictement positif :


 
4 6
min , −, = 2.
1 3
Le minimum se produit dans la dernière ligne où l’on lit la valeur de x5 qui sort
donc de base. On encadre la ligne pivot :

z x1 x2 x3 x4 x5
1 −3 0 0 5/2 0 30
0 1 0 1 0 0 4
0 0 1 0 1/2 0 6
0 3 0 0 −1 1 6

Le dernier pas de l’itération Simplexe consiste à déterminer la nouvelle so-


lution de base au moyen des deux types d’opérations élémentaires sur le tableau
Simplexe :

1. Amener un 1 en position pivot;


2. Eliminer x1 des autres contraintes.

Le résultat de ces deux types d’opérations est le suivant :

z x1 x2 x3 x4 x5
1 0 0 0 3/2 1 36
0 0 0 1 1/3 −1/3 2
0 0 1 0 1/2 0 6
0 1 0 0 −1/3 1/3 2
La nouvelle solution de base et la nouvelle valeur de l’objectif valent :
(x1 , x2 , x3 , x4 , x5 ) = (2, 6, 2, 0, 0)
z = 36.

Si maintenant, on prolonge par la troisième itération, on constate que lors du


premier pas de celle-ci, c’est-à-dire lors de la sélection de la variable entrante, il
n’y a aucun candidat. On arrête l’algorithme : la solution courante est optimale :
x∗1 = 2
x∗2 = 6
z ∗ = 36.
30 Chapitre 2. Algorithme du Simplexe.

2.7 Exercices

2.1. Correspondance entre sommet et solution de base réalisable. Pour


l’exemple introductif (2.1), vérifier que la notion géométrique de sommet du
polygone correspond à la notion algébrique de solution de base réalisable.

2.2. Algorithme du Simplexe. Résoudre en appliquant la méthode du Simplexe :

max z = 3x1 + 2x2 + 4x3


s.c.q. x1 + x2 + 2x3 ≤ 4
2x1 + 3x3 ≤ 5
2x1 + x2 + 3x3 ≤ 7
x1 , x2 , x3 ≥ 0

2.3. Planification de production. Une compagnie fabrique deux produits dans


ses deux ateliers. Les marges unitaires sont respectivement de 2 pour le
premier produit et de 1 pour le second. Le temps passé dans chacun des
ateliers pour fabriquer un produit de chaque type est donné au tableau ci-
dessous.

Temps dans pour le produit 1 pour le produit 2


l’atelier 1 1 heure 0 heure
l’atelier 2 1 heure 1 heure

Les capacités résiduelles sont de 4,5 heures par jour et de 6 heures par jour
respectivement dans le premier et le second atelier. Les productions non
entières sont permises.

(a) Formuler mathématiquement le problème.


(b) Déterminer la solution optimale au moyen de l’algorithme du Simplexe.
Préciser, pour chaque tableau, la solution de base courante et justifier
le choix des variables entrante et sortante.
(c) Illustrer sur un graphique le chemin suivi par l’algorithme du Simplexe.
Chapitre 3

Analyse postoptimale.

3.1 Introduction

Dans ce chapitre, nous voir comment va varier la valeur optimale de l’objectif


d’un programme linéaire lorsque l’on modifie certains coefficients du problème
(coefficients objectif ou du membre de droite). En effet, généralement la solution
numérique d’un problème linéaire est moins significative que de savoir comment
l’objectif va bouger si l’on modifie certaines données du problème. C’est l’objet
de ce que l’on appelle l’analyse postoptimale.
Pour voir l’effet de tels changements de données, une solution naı̈ve consiste à
appliquer le Simplexe au nouveau problème et bien sûr on peut en déduire l’effet
sur l’objectif. Mais nous allons voir dans ce chapitre que, si la base optimale du
problème original reste optimale pour le nouveau modèle, on peut prédire sans
aucun nouveau calcul l’effet de variation des données sur la fonction objectif en
exploitant simplement le tableau Simplexe optimal du problème original.
Nous allons d’abord envisager le cas de la variation des coefficients du
membre de droite des contraintes. Nous allons voir que la variation de la va-
leur optimale de l’objectif d’un programme linéaire en fonction des coefficients du
membre de droite est donnée par la valeur des “prix cachés” que l’on peut lire dans
la ligne objectif du tableau Simplexe final. Nous verrons comment déterminer le
domaine de validité de ces prix cachés.
Nous verrons ensuite, le cas de la variation des coefficients de la fonction
objectif. Ici, nous verrons que le taux de variation de l’objectif est donné par la
valeur des variables à l’optimum. Ici aussi, il y a un un domaine de validité pour
ces valeurs optimales des variables : elles restent valables tant que la base optimale
ne change pas. Enfin, nous terminerons en donnant l’interprétation d’une autre
information que l’on peut tirer du tableau Simplexe, à savoir la valeur des coûts
réduits des variables hors base.

31
32 Chapitre 3. Analyse postoptimale.

3.2 Variation par rapport au second membre

La question qui se pose est ici la suivante : “Si on augmente la capacité disponible
d’une ressource, quel est l’impact sur la valeur optimale de la fonction objectif ?”
Pour des variations de membre de droite suffisamment faibles pour que la même
base reste optimale, on peut répondre à cette question en exploitant le tableau
Simplexe optimal de la manière suivante :
Le “prix caché” (noté yi∗ ) mesure l’augmentation de la fonction objectif si
l’on accroı̂t d’une unité le membre de droite d’une contrainte. Dans le tableau
Simplexe optimal, le prix caché yi∗ est le coefficient de la variable d’écart de la
contrainte dans la ligne objectif.
Nous allons illustrer ceci sur sur l’exemple introductif dont l’énoncé est rappelé
ci-dessous.
max z = 3 x1 + 5 x2



 x1 ≤ 4


 2x2 ≤ 12
s.c.q. 



3x1 + 2x2 ≤ 18


x1 , x2 ≥ 0
Considérons le tableau final qui a été déterminé au chapitre 2 :
z x1 x2 x3 x4 x5
1 0 0 0 3/2 1 36
0 0 0 1 1/3 −1/3 2
0 0 1 0 1/2 0 6
0 1 0 0 −1/3 1/3 2
Comme x3 , x4 et x5 sont les variables d’écart des contraintes de capacité des trois
ateliers, on en déduit les valeurs des prix cachés suivants :






y1∗ = 0

 y2∗ = 3/2




 y3∗ = 1
qui correspondent aux prix cachés des ressources utilisées dans les ateliers 1, 2 et
3 dont les capacités disponibles sont :


 b1
 = 4,
b = 12,
 2


b3 = 18.
Section 3.2. Variation par rapport au second membre 33

3.2.1 Interprétation des prix cachés

Ce résultat peut être démontré mathématiquement. Mais, plutôt que d’en donner
une démonstration formelle, nous allons l’illustrer graphiquement. Considérons
tout d’abord une augmentation de capacité du premier atelier de b1 = 4 à b1 = 5.
On peut voir à la figure 3.1 que le nouveau point optimal reste le même

x2

z = 3x1 + 5x2
9
8
(5/3, 13/2) 2x2 = 13
6
x1 = 4 2x2 = 12
x1 = 5
4

2 3x1 + 2x2 = 18

0 x1
0 2 4 6, 8
Figure 3.1: Analyse postoptimale

x∗ = x∗ = (2, 6).

En conséquence de quoi, la valeur optimale de l’objectif ne change pas :

z ∗ = z ∗ = 36

D’où une variation nulle de l’objectif, ce qui était bien prédit par la valeur nulle
du prix caché y1∗ :
∆z = z ∗ − z ∗ = 0 = y1∗ .
Une augmentation de capacité du deuxième atelier de b2 = 12 à b2 = 13 donne un
déplacement du point optimal vers (voir figure 3.1) :

x∗ = (5/3, 13/2).

En conséquence de quoi, la nouvelle valeur de l’objectif est donnée par :

z ∗ = 37, 5
34 Chapitre 3. Analyse postoptimale.

D’où un accroissement de l’objectif qui vaut précisément la valeur du deuxième


prix caché :
3
∆z = z ∗ − z ∗ = = y2∗ .
2
Enfin, considérons une augmentation de capacité du troisième atelier de b3 = 18
à b3 = 19. Comme on peut le voir à la figure 3.2, cela donne un déplacement du
point optimal vers :
x∗ = (7/3, 6).
En conséquence de quoi, la nouvelle valeur de l’objectif vaut :

z ∗ = 37

D’où une augmentation d’objectif qui vaut exactement la valeur du troisième prix
caché :
∆z = z ∗ − z ∗ = 1 = y3∗ .

x2
z = 3x1 + 5x2
10
3x1 + 2x2 = 19
8
(7/3, 6)
6 2x2 = 12
x1 = 4
4

2
3x1 + 2x2 = 18

0 2 4 6 8 x1

Figure 3.2: Variation de capacité de l’atelier 3

Le résultat peut aussi être interprété dans l’autre sens : y3∗ est la perte de profit
si on diminue d’une unité la capacité du troisième atelier.

3.2.2 Domaine de validité des prix cachés

Remarquons, et ceci est l’objet de l’analyse de sensibilité qu’il y a une limite de


validité de chaque prix caché. En effet, dans le cas de la première ressource, si
Section 3.2. Variation par rapport au second membre 35

l’effet d’une augmentation de b1 sera nul sur la valeur optimum de l’objectif quel
que soit b1 ≥ 4, il n’en va pas de même d’une diminution. En effet, en dessous
de b1 = 2, la solution optimale va changer. On a donc déterminé le domaine de
validité de y1∗ = 0 : il s’agit de l’intervalle :
b1 ∈ [2, +∞].

Pour le deuxième atelier, au delà de b2 = 18, la solution optimale reste en (0,9).


La base optimale et y2∗ changent :
y2∗ = 0.
De même, une diminution en deçà de b2 = 6 va changer la base optimale. On en
déduit le domaine de validité de y2∗ = 3/2 : il s’agit de l’intervalle :
b2 ∈ [6, 18].

Pour le troisième atelier, au delà de b3 = 24, la solution optimale reste en (4,6).


La base optimale et y3∗ changent :
y3∗ = 0.
De même, une diminution en deçà de b3 = 12 va changer la base optimale. On en
déduit le domaine de validité de y3∗ = 1 : il s’agit de l’intervalle :
b3 ∈ [12, 24].

Ces informations sont données dans le rapport de sensiblité du solveur d’Excel.


Ces informations sont fournies sous la forme d’une augmentation admissible et
d’une diminution admissible. Elle sont reprises ci-dessous :

Contrainte augmentation admissible diminution admissible


Atelier 1 +∞ 2
Atelier 2 6 6
Atelier 3 6 6

Remarquons finalement que l’on a toujours une valeur nulle du prix caché
pour une contrainte non liante. Une contrainte non liante est une contrainte où
la variable d’écart est non nulle. Par exemple, la première contrainte
x1 ≤ 4
a un “prix caché” nul. Ceci a une interprétation économique. La ressource n’est
pas entièrement utilisée : il ne sert donc à rien d’augmenter son stock disponible.
36 Chapitre 3. Analyse postoptimale.

3.3 Variation des coefficients objectifs

La question qui se pose ici est la suivante :“Si on augmente le prix de vente unitaire
ou si l’on diminue le coût de production unitaire, quel est l’impact sur la valeur de
l’objectif ?”
A nouveau, on peut prédire cette variation de l’objectif pour autant que la
base optimale ne change pas. En effet, tant que la base optimale ne change pas,
la solution optimale x∗ = (x∗1 , x∗2 , . . .x∗n ) reste la même. Seul le profit optimal
change. Le nouveau profit vaut donc :

n
z∗ = (cj + ∆cj )x∗j
j=1

On en conclut que pour une variation unitaire du coefficient cj , l’augmentation de


z ∗ est exactement la valeur optimale de la variable x∗j .
La “valeur de la j ème variable à l’optimum” (notée x∗j ) mesure l’augmenta-
tion de la fonction objectif si l’on accroı̂t d’une unité la marge unitaire cj .
Dans le cas de l’exemple, les augmentations de profit pour une augmentation
unitaire de la marge des produits vallent respectivement :


 x∗1 = 2,

 x∗2 = 6.

3.3.1 Domaine de validité de la solution optimale

Considérons maintenant la question l’analyse de sensibilité. Nous allons à nou-


veau l’illustrer sur le même exemple introductif. On veut, par exemple, déterminer
l’intervalle de variation maximum de c1 autour de 3 tel que la base optimale ne
change pas.
A la figure 3.3, on constate que le coefficient c1 peut descendre jusqu’à ce que
l’objectif z = c1 x1 + 5x2 soit parallèle au segment

2x2 = 12,

c’est-à-dire lorsque c1 = 0. Le coefficient c1 peut augmenter jusqu’à ce que l’ob-


jectif z = c1 x1 + 5x2 soit parallèle au segment

3x1 + 2x2 = 18.


Section 3.3. Variation des coefficients objectifs 37

x2

z = 3x1 + 5x2
9
8
(5/3, 13/2) 2x2 = 13
6
x1 = 4 2 = 12
2x
x1 = 5
4

2 3x1 + 2x2 = 18

0 x1
0 2 4 6, 8

Figure 3.3: Analyse de sensibilité de c1

Ceci se produit lorsqu’il y a égalité des pentes :


−c1 −3
= ,
5 2
c’est-à-dire lorsque c1 = 15/2.
La réponse à la question de l’analyse de sensibilité est donc la suivante : tant
que
c1 ∈ [0, 15/2],
on a la même base optimale et donc la même solution optimale.
Effectuons l’analyse de sensibilité pour le second coefficient objectif. Celui-ci
peut décroı̂tre jusqu’à ce que l’objectif z = 3x1 + c2 x2 soit parallèle au segment
3x1 + 2x2 = 18.
Ceci se produit lorsqu’il y a égalité des pentes :
−3 −3
= ,
c2 2
c’est-à-dire lorsque c2 = 2. Dans l’autre sens, c2 peut augmenter jusqu’à ce que
l’objectif z = 3x1 + c2 x2 soit parallèle au segment
2x2 = 12.
Ceci ne se produit jamais. On en conclut que tant que :
c2 ∈ [2, +∞[,
on a la même base optimale et donc la même solution optimale.
Ces intervalles de sensiblité sont donnés dans le rapport de sensibilité du
solveur d’Excel.
38 Chapitre 3. Analyse postoptimale.

3.4 Coût réduit des variables hors base

Pour terminer ce chapitre, nous allons définir la notion de coût réduit d’une va-
riable hors base qui peut également être trouvé dans le tableau Simplexe optimal.
Le “coût réduit” de la variable hors base xj , noté dj , mesure l’augmentation
de la fonction objectif si l’on accroı̂t d’une unité la valeur de la variable hors
base xj . Dans le tableau Simplexe optimal, le coût réduit dj est l’opposé du
coefficient de la variable dans la ligne objectif.
Nous illustrerons cette notion sur l’ exemple de production de chassis auquel on
adjoint un troisième chassis mixte aluminium bois, pour lequel la marge unitaire est
de 4 et les temps unitaires de fabrication dans les trois ateliers sont respectivement
de 1, 2 et 3 heures. La formulation de ce problème est reprise ci-dessous :
z −3x1 −5x2 −4x3 = 0
x1 +x3 +x4 = 4
2x2 +2x3 +x5 = 12
3x1 +2x2 +3x3 +x6 = 18
La solution optimale de ce problème linéaire peut être déterminée par l’algorithme
du Simplexe. Le tableau Simplexe optimal final est le suivant :
z x1 x2 x3 x4 x5 x6
1 0 0 2 0 3/2 1 36
0 0 0 2/3 1 1/3 −1/3 2
0 0 1 1 0 1/2 0 6
0 1 0 1/3 0 −1/3 1/3 2
On en déduit la solution optimale suivante :
(x∗1 , x∗2 , x∗3 ) = (2, 6, 0)
On constate que seuls sont rentables les chassis 1 et 2. En effet, le chassis 3, bien
qu’ayant une marge unitaire supérieure au chassis 1, consomme plus de ressources
et permet, pour la même capacité disponible des trois ateliers de faire moins de
chassis 3 que de chassis 1. On peut alors se poser la question suivante : de combien
faut-il augmenter la marge du chassis 3 pour le rendre attractif ?
On peut répondre à cette question en exploitant le tableau Simplexe optimal :
le coefficient dans la ligne objectif du tableau Simplexe final (l’opposé des coûts
réduits) fournissent l’augmentation de prix nécessaire. En effet, le coûts réduit de
la variables x3 , est négatif :
d3 = −2,
exprimant ainsi la perte par unité produite du chassis 3.
Section 3.5. Exercices 39

3.5 Exercices

3.1. Sensibilité aux coefficients objectif. Soit le problème linéaire suivant :


Minimiser x2
s.c.q. 3x1 + 4x2 ≥ 9, (1)
5x1 + 2x2 ≤ 8, (2)
3x1 − x2 ≤ 0, (3)
x1 , x2 ≥ 0.
(a) Déterminer graphiquement la solution optimale.
(b) Déterminer l’intervalle de variation du coefficient objectif de x1 autour
de zéro qui préserve la solution optimale déterminée en (a).
3.2. Sensibilité du membre de droite. Pour le problème linéaire formulé à
l’exercice 1.3 du chapitre 1,
(a) Résoudre par l’algorithme du Simplexe.
(b) Déterminer la valeur des prix cachés à l’optimum.
(c) Si l’unité de capacité supplémentaire coût le même prix pour les deux
ateliers, a-t-on intérêt a augmenter la capacité du premier ou du second
atelier ?
(d) Jusqu’à quel niveau est-il intéressant d’augmenter cette capacité ?
3.3. Interprétation des tableaux Simplexe. Soit le problème linéaire suivant :

Maximiser 10x1 + 9x2 + 7x3


s.c.q. 2x1 + 3x2 + 5x3 ≤ 450
2x1 + 4, 5x2 + 5x3 ≤ 600
3x1 + 2x2 + 6x3 ≤ 600
x1 , x2 , x3 ≥ 0.
Le tableau simplexe initial correspondant est le suivant :

z x1 x2 x3 x4 x5 x6
1 −10 −9 −7 0 0 0 0
0 2 3 5 1 0 0 450
0 2 4, 5 5 0 1 0 600
0 3 2 6 0 0 1 600
40 Chapitre 3. Analyse postoptimale.

Après manipulations, le tableau Simplexe devient :

z x1 x2 x3 x4 x5 x6
1 0 −7/3 13 0 0 10/3 2000
0 0 5/3 1 1 0 −2/3 50
0 0 19/6 1 0 1 −2/3 200
0 1 2/3 2 0 0 1/3 200

(a) Donnez les variables de base et leurs valeurs à cette itération.


(b) Poursuivez les calculs du Simplexe pour déterminer la solution opti-
male.
(c) Déterminez (sans effectuer de calculs) la valeur des prix duaux associés
aux contraintes.
Chapitre 4

La programmation en nombres entiers.

4.1 Introduction

On parle de problèmes en nombres entiers lorsque, pour un problème d’opti-


misation avec objectif et contraintes linéaires, les variables sont astreintes à être
entières. On parle de problèmes mixtes entiers lorsqu’une partie des variables
seulement sont astreintes à être entières. Nous allons voir à la section suivante
quelques exemples génériques nécessitant l’utilisation de variables entières dans
leur formulation.
Nous avons vu que l’algorithme du Simplexe fournit une méthode de résolution
générale pour tous les problèmes linéaires quelle que soit leur forme. Au contraire,
en programmation en nombres entiers, on ne dispose pas d’un algorithme général
qui permette de résoudre efficacement tous les problèmes en nombres entiers.
Cependant, il existe une méthode générale connue sous le nom de branch and
bound (séparation et borne) qui permet de résoudre bon nombre de problèmes en
nombres entiers. Nous allons décrire à la section 4.3 cette méthode.

4.2 Formulation des problèmes mixtes

Nous allons voir quelques problèmes classiques nécessitant le recours à la pro-


grammation mixte entière.

4.2.1 Problèmes avec coûts fixes

Exemple 4.1 Problèmes avec coût fixe de mise en route de la production. On


veut représenter un coût de production qui est nul en l’absence de production
et qui, dans le cas contraire, vaut la somme d’une constante K, le coût fixe de
production, ainsi que d’un coût proportionnel, le taux marginal étant m.

41
42 Chapitre 4. La programmation en nombres entiers.

On veut donc pouvoir exprimer la fonction suivante :

Si x = 0, c(x) = 0;
(4.1)
Si x > 0, c(x) = K + mx.

où x dénote le niveau de production.


Cette fonction est représentée à la figure 4.1.

c(x)

x
Figure 4.1: Représentation d’un coût fixe

La représentation mathématique de ce coût fixe nécessite :

1. l’ajout d’une variable indicatrice d’une production positive :



 1 si x > 0
y=
 0 si x = 0

2. la modification de la fonction objectif en :

c(x, y) = Ky + mx

qui devient donc purement linéaire;

3. l’ajout des contraintes suivantes :

x ≤ M y, et y ∈ {0, 1} (4.2)

avec M une borne supérieure sur la quantité produite (x).

Remarquons que si x > 0, par les relations (4.2), on a que y = 1 et on tient


compte du coût fixe de mise en route de production. Par contre, lorsque x = 0, (4.2)
permet les choix y = 0 ou y = 1. Cependant, comme on minimise, l’optimiseur
va automatiquement choisir y = 0, la solution qui évite le coût fixe !
Section 4.2. Formulation des problèmes mixtes 43

4.2.2 Problèmes avec contrainte logique

Parfois des problèmes de gestion de production comportent une condition logique.


Un exemple typique est celui des problèmes de gestion de projets avec contrainte
disjonctive. Dans ces problèmes, on doit déterminer l’enchaı̂nement des tâches
d’un projet de manière à le réaliser dans le meilleur délai, il se peut que deux
tâches doivent être effectuées par la même équipe d’ouvriers, soit mettent en
œuvre la même machine. Les deux tâches ne peuvent donc avoir lieu simul-
tanément, sans que l’on puisse dire laquelle doit être effectuée en premier lieu.
Mathématiquement, on peut écrire ceci par la condition suivante :

 ti + di ≤ tj si i est réalisée avant j
soit (4.3)
 t + dj ≤ ti si j est réalisée avant i
j

où ti est la variable indiquant le temps de début au plus tôt de la tâche i et di , sa


durée, est donnée.
Cette disjonction peut être résolue par la programmation mixte 0/1. En
effet, définissons la variable binaire yij , dont la valeur est 1 si la tache i est réalisée
avant la tâche j et 0 si la tâche j est réalisée avant la tâche i.
On remplace alors la condition de disjonction (4.3) par les contraintes suivantes :

 ti + di ≤ tj + M (1 − yij )

(4.4)
tj + dj ≤ ti + M yij

où M note une borne supérieure sur la date de fin des travaux.


Démontrons l’équivalence. Deux cas sont possibles pour la variable binaire :

1. Cas où yij = 1 : dans ce cas, le système (4.4) devient :



 ti + di ≤ tj
 tj + dj ≤ ti + M
La première contrainte exprime donc que la tâche i doit être finie avant que ne
commence la tâche j. La seconde contrainte est automatiquement satisfaite.
2. Cas yij = 0 : dans ce cas, le système (4.4) devient :

 ti + di ≤ tj + M
 tj + dj ≤ ti
La première contrainte est automatiquement satisfaite. La seconde contrainte
exprime que la tâche j doit être finie avant que ne commence la tâche i.
44 Chapitre 4. La programmation en nombres entiers.

4.2.3 Mélange avec nombre limité d’ingrédients

C’est le cas, par exemple, d’un problème de mélange d’huiles où cinq huiles sont
disponibles mais où des contraintes techniques impliquent que seulement trois
huiles différentes peuvent être présentes dans le mélange. Un autre exemple, est
celui du chargement de hauts fourneaux où le nombre de charbons disponibles
est souvent nettement supérieur au nombre de charbons qui peuvent être chargés
simultanément. Ce nombre étant limité par le nombre de portes de chargement du
haut fourneau.
Ce problème peut être résolu par la programmation mixte zéro/un. Si xi
note la quantité d’ingrédient i dans le mélange, définissons la variable binaire yi
indiquant la présence de l’ingrédient i dans le mélange. Autrement dit :

yi = 1 si xi > 0;
yi = 0 si xi = 0.

On introduit alors les contraintes suivantes :

x i ≤ Mi y i (4.5)

où Mi est une borne supérieure sur xi .


La condition du nombre maximum d’ingrédients dans le mélange s’exprime
alors simplement par :

n
yi ≤ k, (4.6)
i=1

avec k, le nombre maximum d’ingrédients dans le mélange.


Démontrons l’équivalence. Deux cas sont possibles pour la variable xi :

1. Soit xi > 0. Alors, par la contrainte (4.5), la variable yi doit valoir 1 et


exprime bien que l’ingrédient i est dans le mélange.

2. Soit xi = 0. Alors, par la contrainte (4.5), la variable yi peut valoir 0 ou 1.


La (4.6), exprimera donc bien que au plus k ingrédients seront pris dans le
mélange.

Remarquez que si on veut que yi soit une parfaite indicatrice de xi > 0, il faut
ajouter la contrainte suivante :
m i yi ≤ xi
avec mi , la teneur minimum d’un ingrédient dans le mélange. Cette nouvelle
contrainte forcera yi à zéro lorsque xi est nul.
Section 4.3. Méthode de branch and bound 45

4.2.4 Choix parmi un nombre discret de valeurs

Dans beaucoup de problèmes industriels, lors du dimensionnement d’un appareil-


lage, on doit choisir sa capacité parmi les valeurs commerciales existant sur le
marché. Par exemple, lors du dimensionnement d’une canalisation de transport
d’eau, on doit choisir parmi les valeurs suivantes pour le diamètre :

12 cm, 17 cm, 24 cm ou 47 cm.

On peut à nouveau modéliser ce choix par l’utilisation de variables binaires. En


effet, définissons la variable x comme étant le diamètre choisi et définissons yi une
indicatrice du fait que le diamètre numéro i a été choisi. On peut alors écrire la
relation suivante pour le choix du diamètre :

x = 12y1 + 17y2 + 24y3 + 47y4

avec la contrainte qu’un seul diamètre doit être choisi :

y1 + y2 + y3 + y4 = 1 (4.7)

et bien sûr en imposant le caractère binaire de chaque indicatrice :

yi ∈ {0, 1}, ∀i = 1, 2. . .4

La contrainte (4.7) fera en effet qu’une seule indicatrice vaudra un tandis que toutes
les autres seront à zéro.

4.3 Méthode de branch and bound

Nous illustrons la méthode sur l’exemple suivant tiré de Norbert et al [10] :

z ∗ = max z = 10x1 + 50x2




 −x1 + 2x2 ≤ 5,






 x1 + 2x2 ≤ 14, (4.8)
s.c.q. 

 x1 ≤ 8,





 x1 , x2 ≥ 0 et entiers

La région réalisable est représentée à la figure 4.2.


Remarquons qu’une façon de résoudre le problème serait de construire une
borne supérieure sur z ∗ et une borne inférieure sur z ∗ et ensuite de raffiner ces
bornes jusqu’à les égaliser.
46 Chapitre 4. La programmation en nombres entiers.

x2
P0
5
P1 P2
P3
4
P5

0
0 1 2 3 4 5 6 7 8 x1

Figure 4.2: Représentation de la région réalisable.

Question 1 : comment construire une borne inférieure sur z ∗ ?


La réponse à cette question est à la fois simple et difficile. En effet, pour trouver
une borne inférieure, il suffit de donner une solution réalisable pour (4.8). Comme
l’objectif est de maximiser, l’optimum du problème ne pourra qu’être supérieur à
la valeur de z en ce point. Cependant trouver en général une solution réalisable
pour un problème en nombres entiers n’est pas une mince affaire.
Question 2 : comment construire une borne supérieure sur z ∗ ?
Une façon de répondre à cette question est de résoudre le problème linéaire
que l’on obtient à partir de (4.8) en laissant tomber les contraintes d’intégralité des
variables. Comme on maximise sur un ensemble réalisable plus large, l’optimum
ainsi obtenu ne pourra qu’être supérieur à l’optimum du problème en nombres
entiers. C’est aussi le premier pas de la méthode de branch and bound que nous
allons maintenant décrire sur l’exemple.
Pas 0. Résoudre la relaxation linéaire.
Pour cet exemple, on obtient comme solution de la relaxation linéaire le point noté
P0 à la figure 4.2 :

x1 = 4, 5
x2 = 4, 75
z0 = 282, 5.

Cette solution est inacceptable car elle viole les contraintes d’intégralité des va-
riables. Cependant, elle fournit une première borne supérieure sur z ∗ :

z ∗ ≤ 282, 5.
Section 4.3. Méthode de branch and bound 47

Pas 1. Brancher sur une variable non entière.


La seconde idée de la méthode de branch and bound est d’opérer une séparation :
la région réalisable va être séparée en deux sous-régions dont aucune ne peut
contenir la solution optimale P0 . Cette séparation nécessite le choix d’une variable
de séparation. Le choix de cette variable est heuristique. Différents choix sont
possibles et de ce choix peut dépendre l’efficacité de la méthode de résolution. Une
façon simple de choisir cette variable est de prendre la variable la plus distante
d’un entier. Une alternative, parfois utilisée, est de prendre la variable la plus
proche d’un entier.
Dans notre exemple, il s’agit de la variable x1 . On va effectuer un branchement
sur cette variable. Comme x1 ne peut prendre que des valeurs entières, il n’y a
aucune perte de généralité d’imposer que

soit x1 ≤ 4 soit x1 ≥ 5

Cependant imposer cette condition va éliminer la solution courante P0 de la relaxa-


tion linéaire. En général si la variable choisie xk a la valeur fractionnaire N + ,
on imposera :
soit xk ≤ N soit xk ≥ N + 1

En imposant séparément l’une et l’autre conditions, on obtient deux sous-


modèles, un modèle fils et un modèle fille. Ce que l’on représente par une dia-
gramme du type de celui de la figure 4.3. Chaque nœud de cette figure correspond

z 0 = 282, 5
x1 = 4, 50
x2 = 4, 75
x1 4 x1 5

z1 = 265 z2 = 275
x1 = 4 x1 = 5
x 2 = 4, 5 x 2 = 4, 5
x2 4 x2 5 x2 4 x2 5

z5 = 240 z6 = ∞ z3 = 260 z4 = ∞
x1 = 4 Problème x1 = 6 Problème
x2 = 4 non réalisable x2 = 4 non réalisable

Figure 4.3: Arbre de branch and bound.

à un problème linéaire. Le nœud 0 au modèle original. Le nœud 1 est le modèle


original avec en plus la restriction x1 ≤ 4, tandis que le nœud 2 correspond au
48 Chapitre 4. La programmation en nombres entiers.

modèle original avec en plus la restriction x1 ≥ 5. On a ici numéroté les nœuds


dans l’ordre où ils ont été générés.
On peut maintenant résoudre les relaxations linéaires correspondant aux pro-
blèmes fils et fille. Dans notre exemple, on obtient les deux solutions suivantes :
Noeud 1 : x1 = 4, x2 = 4, 5, z1 = 265.
Noeud 2 : x1 = 5, x2 = 4, 5 z2 = 275.
Remarquez que les valeurs atteintes par la fonction objectif sont moins élevées
que dans la relaxation linéaire précédente. Ceci n’est pas étonnant : on a, en
effet, ajouté des contraintes et donc restreint l’espace des solutions réalisables.
Comme les deux sous-régions forment une représentation contenant l’ensemble
des solution entières, on peut en conclure que la borne supérieure sur z ∗ est :
z ∗ ≤ max(z1 , z2 ) = 275.

Pas 2. Diviser à nouveau un nœud fils ou fille en deux.


Ici, aucune des deux solutions n’est acceptable car toutes les deux comportent des
parties fractionnaires. On va donc continuer en choisissant un des deux nœuds
pour le diviser à nouveau. Le choix du nœud à diviser est à nouveau heuristique
et peut à nouveau avoir une grande influence sur le temps total mis pour résoudre
le problème.
Pour l’illustration de la méthode, nous adoptons la règle de choix heuristique
suivante : choisir le problème dont la relaxation linéaire fournit la meilleure (c’est-
à-dire la plus grande en cas de maximisation) valeur de la fonction objectif.
Pour cet exemple, on choisit donc le nœud 2 et on répète le Pas 1.
Pas 1. Choisir une variable pour brancher.
Ici seule la variable x2 est non entière. On la choisit donc pour opérer le branche-
ment suivant :
soit x2 ≤ 4 soit x2 ≥ 5
On ajoute séparément chacune de ces contraintes aux contraintes du problème 2
et on génère ainsi les nœuds 3 et 4. Ceci est illustré à la figure 4.3. On résout les
relaxations linéaires et on obtient les solutions suivantes :
Noeud 3 : x1 = 6, x2 = 4, z3 = 260.
Noeud 4 : non réalisable
Noter que, au nœud 3, on a obtenu une solution entière dont la valeur correspon-
dante de la fonction objectif est 260. On a une première borne inférieure sur la
valeur optimale de la fonction objectif et on a donc que :
260 ≤ z ∗ ≤ 275
Section 4.3. Méthode de branch and bound 49

Si la fourchette n’est pas trop grande, on peut se satisfaire de cette solution non
optimale plutôt que de continuer de longs calculs. Il est clair également qu’il n’y
a aucune raison de continuer à diviser le nœud 3 pour lequel la solution optimale
du problème en nombres entiers a été obtenue. On dit que le nœud est coupé.
Remarquons aussi que le nœud 4 a conduit à un problème non réalisable. Ce
n’est pas étonnant vu que l’on rajoute de plus en plus de contraintes. A nouveau,
dans ce cas, il ne sert à rien de continuer à diviser ce nœud. Continuons la division
des autres nœuds.
Pas 2. Diviser à nouveau un nœud fils ou fille en deux.
On choisit le nœud 1 qui est le seul à encore diviser. Remarquez que c’est parce
que la valeur de z1 = 265 est supérieure à la borne inférieure 260 que l’on doit
continuer. On a en effet un espoir de trouver ici une solution entière meilleure que
260. Dans le cas contraire, on aurait également coupé cette branche et la méthode
était terminée.
Pas 1. Brancher sur une variable non entière.
On branche ici sur x2 en créant les nœuds 5 et 6 par la séparation suivante :
soit x2 ≤ 4 soit x2 ≥ 5
On résout les relaxations linéaires correspondantes. On obtient :
Noeud 5 : x1 = 4; x2 = 4, z5 = 240
Noeud 6 : impossible

La méthode est terminée puisqu’il n’existe plus de nœud à diviser. On déter-


mine la solution optimale comme étant la meilleure solution entière trouvée. Il
s’agit du point P3 suivant :
x∗1 = 6
x∗2 = 4
auquel correspond une valeur optimale de l’objectif de z ∗ = 260. On a ainsi, pour
notre exemple, trouvé et aussi prouvé que la solution du nœud 3 était la solution
optimale du problème en nombres entiers.
En conclusions, il y a trois raisons de couper une branche dans l’arbre :

1. lorsque la relaxation linéaire obtenue est non réalisable,


2. lorsque la relaxation linéaire obtenue fournit une solution entière,
3. lorsque la valeur de la borne supérieure est inférieure à la valeur de la meil-
leure solution entière obtenue.
50 Chapitre 4. La programmation en nombres entiers.

4.4 Exercices

4.1. Mélange de maximum 4 charbons. Pour produire du coke, on mélange des


charbons dans un haut fourneau. On suppose qu’il y a 8 charbons disponibles
(voir tableau 4.1). Comme les entrées dans le haut founeau sont au nombre
de 4, il ne peut y avoir que maximum 4 charbons différents dans le mélange.
De plus, si un charbon est présent dans le mélange, il doit l’être à hauteur
d’au moins 5%. On exige également que la teneur du mélange en Silicium
soit d’au plus 1,8 % Formuler le problème.

Charbon Prix Teneur Si Charbon Prix Teneur Si


Charbon 1 12 2% Charbon 5 13 1%
Charbon 2 14 2,5 % Charbon 6 9 5%
Charbon 3 17 1% Charbon 7 15 2%
Charbon 4 10 5% Charbon 8 11 1,5 %
Tableau 4.1: Teneurs en Si et prix des différents charbons.

4.2. Localisation optimale d’émetteurs de télévision. Pour une région com-


portant quatre villes (voir tableau 4.2), on veut déterminer, parmi 5 sites
possibles, quels sont les d’émetteurs de télévision à construire afin de des-
servir ces 5 villes au moindre coût. Formuler le problème.

Ville Lille Dunkerque Valencienne Basieux Coût


Emetteur 1 1 1 25
Emetteur 2 1 1 30
Emetteur 3 1 1 15
Emetteur 4 1 1 35
Emetteur 5 1 1 1 90
Tableau 4.2: Accessibilité des villes à partir des émetteurs.

4.3. Problème d’affectation de lignes aériennes. Une compagnie aérienne


disposant de six avions de 150 places désire les affecter aux deux lignes
OM et OT. Le nombre de clients est de 500 par jour sur la ligne OM et
de 200 sur la ligne OT. Les frais variables (tels que le carburant, les taxes
d’atterrissage) d’un voyage sur la ligne OM est de 4 et de 3 sur la ligne OT.
On désire minimiser le coût d’exploitation en satisfaisant la demande.
(a) Formuler mathématiquement le problème.
(b) Résoudre par la méthode de Branch and bound.
Chapitre 5

Les modèles non linéaires

5.1 Introduction

On parle de modèle d’optimisation non linéaire lorsque l’on doit maximiser ou


minimiser une fonction sous contraintes et que la fonction objectif, ou au moins
une contrainte est non linéaire.
Comme exemple de fonction objectif non linéaire, on peut citer le cas d’un
rendement croissant d’échelle, c’est-à-dire une contribution unitaire au profit
s’accroissant avec la quantité produite. Par exemple, si la marge unitaire est de la
forme m1 (x1 ) = 550 + 2x1 , cela donnera un terme non linéaire dans l’objectif :
max z = m1 (x1 )x1 = 550x1 + 2x21 .
Comme exemple de contrainte non linéaire, on peut citer la relation entre le flot de
gaz entre les nœuds i et j, noté fij , et les pressions en ces points, pi et pj :

fij2 = Cij2 p2i − p2j

Nous allons souligner à la section 5.2 la différence avec la programmation


linéaire. Dans le cas de la programmation linéaire, la solution optimale pouvait
toujours être déterminée en un sommet de la région réalisable. Nous verrons ici
que cette propriété est perdue : on peut avoir une solution optimale non extrémale
ou encore une solution intérieure. Pire encore, on peut avoir un optimum local
différent de l’optimum global. Ce problème ne se produit cependant pas pour
les problèmes convexes. Nous verrons à la section 5.3 la notion de problèmes
convexes.
Nous verrons à la section 5.4 que l’algorithme du Simplexe peut être utilisé
de manière itérative pour résoudre un cas particulier de problème d’optimisation
non linéaire : les problèmes séparables. Enfin, nous terminerons en voyant à la
section 5.5 un algorithme général de programmation non linéaire : la méthode de
Franck-Wolfe.

51
52 Chapitre 5. Les modèles non linéaires

5.2 Différence avec la programmation linéaire

Tout d’abord, contrairement à la programmation linéaire où la solution optimale


est toujours située en un sommet de la région réalisable, on peut avoir une solution
optimale non extrême. Ceci est illustré par l’exemple suivant :

max z = 3 x1 + 5 x2


 x1 ≤ 4


s.c.q. 
9x21 + 5x22 ≤ 216


 x1 , x2 ≥ 0
Pour pouvoir en donner une représentation graphique, remarquons que
x21 x22
+ ≤1
(4, 9)2 (6, 5)2
est l’équation d’une surface bordée par une ellipse centrée en l’origine. On peut
voir à la figure 5.1 que la seule solution optimale n’est pas situé en un point extrême
de la région réalisable.

x2 x1 = 4

(2, 6)
6
3x 1 + 5x 2 = 36
4

2 4 x1

Figure 5.1: Solution non extrême

Mais la solution ne doit même pas être située sur la frontière de la région. Ainsi,
on peut avoir une solution optimale intérieure. Ceci est illustré par l’exemple
suivant :
min z = (x1 − 3)2 + (x2 − 3)2


 x1 ≤ 4




 2x2 ≤ 12
s.c.q. 


 3x1 + 2x2 ≤ 18



x1 , x2 ≥ 0
Section 5.2. Différence avec la programmation linéaire 53

dont la représentation graphique est donnée à la figure 5.2 où l’on peut voir que la
solution optimale est strictement intérieure. En effet, les courbes d’isovaleurs de
la fonction objectif forment des cercles concentriques et on a intérêt à se situer au
centre de ces cercles.
x2

8
z = 16
z=9
6
z=4
z=1
4
z=0
(3, 3)
2

0 2 4 6 x1

Figure 5.2: Solution intérieure

Mais la principale difficulté de la programmation non linéaire est que l’on peut
avoir des optimaux locaux qui ne sont pas globaux. Illustrons ceci sur l’exemple
suivant :
max z = 3x1 + 5x2


 x1 ≤ 4


s.c.q. 
8x1 − x21 + 14x2 − x22 ≤ 49


 x1 , x2 ≥ 0
Pour pouvoir tracer sa représentation graphique, remarquons que

(x1 − 4)2 + (x2 − 7)2 ≥ 16

correspond au plan moins un cercle de rayon 4 centré en (4,7). Sa représentation


est donnée à la figure 5.3 où l’on peut voir que (4,3) minimum local non global !
C’est la une des plus grandes difficultés des problèmes non convexes : on
peut avoir des optimaux locaux qui ne sont pas globaux. Cependant, il existe une
classe de problèmes pour lesquels ce problème ne se produit pas dans le sens que
tous les optimums locaux sont des optimum globaux. Il s’agit des problèmes
convexes.
54 Chapitre 5. Les modèles non linéaires

x2
(0, 7)
z = 3x 1 + 5x 2 = 35
6

4 (4, 3)
z = 3x 1 + 5x 2 = 27
2

2 4 x1

Figure 5.3: Minimum local

5.3 Les problèmes convexes

Définition 5.1 L’ensemble S est convexe, si quels que soient les deux points P, Q ∈
S, tout le segment P Q ∈ S.

Ce cas est illustré à la figure 5.4. Ces ensembles n’ont pas de partie rentrante à la

Q P

P
Q

Figure 5.4: Ensembles convexes.

différence des ensembles non convexes illustrés à la figure 5.5.

Q
Q
P

Figure 5.5: Ensembles non convexes.


Section 5.3. Les problèmes convexes 55

Définition 5.2 Une fonction f est convexe si l’ensemble

S = {(x, y) ∈ Rn × R|y ≥ f (x)} .

est un ensemble convexe.

Ceci est illustré à la figure 5.6 pour l’exemple de la fonction x2 . La définition


de fonction convexe se ramène donc à celle d’ensemble convexe.
y

f (x)

Figure 5.6: Exemple de fonction convexe

Définition 5.3 Une fonction f est concave si la fonction −f est convexe.

Un exemple de fonction concave est illustrée à la figure 5.7.


y

f (x)

Figure 5.7: Exemple de fonction concave

Maintenant que nous avons défini les notions d’ensemble convexe et de fonction
convexe, nous pouvons définir la notion de problème convexe :
56 Chapitre 5. Les modèles non linéaires

Définition 5.4 Un programme mathématique est dit convexe s’il s’agit de la mi-
nimisation d’une fonction convexe sur une région réalisable convexe, soit de la
maximisation d’une fonction concave sur une région réalisable convexe.

Comme exemple de problèmes convexes, on peut donc citer les problèmes


avec déséconomie d’échelle puisqu’il s’agit de la maximisation d’une fonction
concave. Et comme exemple de problèmes non convexes, on peut citer les
problèmes avec économie d’échelle puisqu’il s’agit de problèmes de maximisation
d’une fonction convexe.

5.4 Programmation séparable

Il existe une classe particulière de problèmes qui ne nécessitent pas le recours à des
logiciels d’optimisation non linéaire, car ils peuvent se résoudre par utilisations
répétées de l’algorithme du Simplexe. Ce sont les programmes séparables.

Définition 5.5 Une fonction est séparable si elle peut être exprimée comme la
somme de fonctions d’une seule variable :

n
f (x) = fj (xj )
j=1

Par exemple, la fonction suivante est séparable :


3
x21 + 2x2 + ex ,

tandis que la fonction suivante est non séparable à cause du terme x1 x2 :


1
x1 x2 + + x3
1 + x1

Les modèles séparables peuvent être résolus par une suite d’approximations
linéaires par morceaux. Plus précisément, on effectuera de la manière suivant :

1. Chaque fonction séparable est remplacée par son approximation linéaire par
morceaux.

2. Le problème approximé est alors résolu par une version spécialisée de l’al-
gorithme du Simplexe traitant les problèmes linéaires par morceaux;

3. On raffine la discrétisation autour de la solution optimale du problème


approximé et on itère.
Section 5.4. Programmation séparable 57

On obtiendra ainsi l’optimum global pour des problèmes convexes et un optimum


local pour des problèmes non convexes.
Voyons ceci sur un exemple. Supposons que l’on ait à résoudre le problème
convexe suivant :
min x21 − 4x1 − 2x2


 x1 + x2 ≤ 4

 2x + x ≤ 5
1 2 (5.1)
scq 

 −x1 + 4x2 ≥ 2

x1 , x2 ≥ 0
Il s’agit bien d’un problème convexe car on minimise x21 qui est une fonction
convexe. La première chose à faire est de se donner une borne inférieure et une
borne supérieure à la valeur que pourra prendre la variable non linéaire. Supposons
ici que 0 ≤ x1 ≤ 2, 5. On choisit alors un ensemble de valeurs de x1 où la fonction
est évaluée. Ici, ce sont les points 0, 1, 2 et 2,5. On réalise alors une approximation
linéaire par morceaux de la fonction en reliant par des segments de droites les points
d’évaluation de la fonction. On obtient la courbe linéaire par morceaux indiquée
par OABC à la figure 5.8.

y = x2

C
6

4 B

1
A

O
1 2 x

Figure 5.8: Approximation par une fonction linéaire par morceaux

Remarquez que, ce faisant, on introduit une erreur par rapport la vraie fonction.
Ainsi pour x1 = 1, 5, la fonction vraie x21 vaut 2, 25 alors que son approximation
linéaire par morceaux fournit comme valeur 2, 5.
58 Chapitre 5. Les modèles non linéaires

Voyons maintenant comment résoudre le problème approximé. Remarquez


que la fonction illustrée par la la courbe linéaire par morceaux OABC de la figure 5.8
est une fonction non linéaire. Elle ne peut donc directement être traitée par
l’algorithme du Simplexe. Aussi va-t-on recourrir à la méthode suivante : on va
minimiser y en imposant à (x1 , y) d’être dans l’épigraphe de la fonction linéaire
par morceaux. Ceci peut être effectué en imposant les trois contraintes suivantes :

y ≥ x1
y − 1 ≥ 3(x1 − 1)
y − 4 ≥ 4, 5(x1 − 2)

Les trois relations ci-dessus traduisent le fait que le point (x1 , y) est situé au dessus
des segments OA, AB et BC.
Ainsi le programme convexe (5.1) est approximé par :

min y− 4x1 − 2x2




 x1 +x2 ≤ 4





2x1 +x2 ≤ 5



 −x1 +4x2 ≥ 2
scq y −x1 ≥ 0



 y −3x1 ≥ −2




 y −4, 5x1


≥ −5
 y, x1 , x2 ≥ 0

Remarquons que, pour toute valeur de x1 , si on minimise y en imposant que


(x1 , y) soit dans l’épigraphe, on se situera bien à l’optimum sur l’un des segments
OA, AB et BC. On en conclut que pour les problèmes séparables convexes, on
s’est ramené à la résolution d’un problème linéaire.

5.5 La méthode de Franck-Wolfe

Nous allons voir un second algorithme qui permet de résoudre les problèmes d’op-
timisation non linéaires convexes par une séquence d’approximations linéaires. Il
s’agit de l’algorithme de Franck-Wolfe. Son principe est particulièrement simple
dans le cas de problèmes avec contraintes linéaires.
Etant donnée la solution initiale réalisable x0 , la fonction objectif du problème
suivant
max f
(x)
Ax ≤ b (5.2)
scq
x ≥ 0
Section 5.5. La méthode de Franck-Wolfe 59

est approximé par son développement de Taylor d’ordre 1 :



n
∂f (x0 )
f (x) ≈ f (x0 ) + (xj − x0j )
j=1 ∂x j

Si on substitue dans (5.2), à f (x) son approximation donnée, à une constante près,
par g(x) définie ci-dessous :

n 
n
∂f (x0 )
g(x) = cj xj = xj ,
j=1 j=1 ∂xj

on obtient un problème linéaire soluble par l’algorithme du Simplexe. Notons xLP


sa solution optimale.
Notez que l’objectif non linéaire est de moins en moins bien approximé lorsque
x s’écarte de x mais que l’objectif doit s’accroı̂tre, du moins au début, le long du
segment de x à xLP . Aussi va-t-on choisir le point qui maximise f (x) le long de
ce segment en résolvant le problème unidimensionnel suivant :
max h(α) = f (x + α(xLP − x ))
0≤α≤1

Notons α∗ , l’optimum. Le point suivant :


x = x + α∗ (xLP − x )
deviendra le point initial pour l’itération suivante.
Appliquons ceci sur l’exemple suivant :
max f
(x) = 5x1 − x21 + 8x2 − 2x22
3x1 + 2x2 ≤ 6
scq
x1 , x2 ≥ 0
Calculons le gradient :
∂f
= 5 − 2x1
∂x1
∂f
= 8 − 4x2
∂x2
Il est clair que x = (0, 0) fournit une solution réalisable initiale :
x0 = (0, 0)
Donc les coefficients du gradient sont
c1 = 5
c2 = 8
60 Chapitre 5. Les modèles non linéaires

On peut résoudre graphiquement le problème linéaire suivant :


5x1 + 8x2
max

3x1 + 2x2 ≤ 6
scq
x1 , x2 ≥ 0
A la figure 5.9, on obtient P1 , la solution du premier problème linéaire :
x2
P1
3

P2
P0
1 2 x1

Figure 5.9: Méthode de Franck Wolfe

x1LP = (0, 3)

Le segment entre x0 et x1LP a comme coordonnées :

x0 + α(x1LP − x0 ) = (0, 0) + α[(0, 3) − (0, 0)]


= (0, 3α)

On va donc
max h(α) = 24α − 18α2
sous les contraintes que 0 ≤ α ≤ 1. La maximisation sans contrainte conduit à
annuler la dérivée première :

24 − 36α = 0

soit α = 2/3. On obtient donc le point en fin d’itération 1 :

x1 = (0, 0) + 2/3[(0, 3) − (0, 0)] = (0, 2)

Procédons à la deuxième itération :

c1 = 5 − 2 × 0 = 5
c2 = 8 − 4 × 2 = 0
Section 5.5. La méthode de Franck-Wolfe 61

On peut résoudre graphiquement le problème linéaire suivant :

max

5x1
3x1 + 2x2 ≤ 6
scq
x1 , x2 ≥ 0

A la figure 5.9, on obtient P2 , la solution du deuxième problème linéaire :

x2LP = (2, 0)

Le segment entre x1 et x2LP a comme coordonnées :

x1 + α(x2LP − x1 ) = (0, 2) + α[(2, 0) − (0, 2)]


= (2α, 2 − 2α)

de sorte que l’on maximise

max h(α) = 8 + 10α − 12α2

sous les contraintes que 0 ≤ α ≤ 1. La maximisation sans contrainte conduit à


annuler la dérivée première :

10 − 24α = 0

soit α = 5/12. On obtient donc le point en fin d’itération 2 :

x2 = (0, 2) + 5/12[(2, 0) − (0, 2)] = (5/6, 7/6)

On peut résumer l’algorithme de Franck-Wolfe comme suit :

1. Initialisation. Soit x0 une solution initiale réalisable. Posons k = 1.

2. Itération k. Pour j = 1, 2, ...n, évaluer

∂f (xk−1 )
cj =
∂xj

3. Calcul de la direction. Trouver, par application de l’algorithme du Sim-


plexe, xkLP la solution optimale du problème linéaire suivant :

n
max g(x) = cj xj s. c. q. Ax ≤ b et x ≥ 0
j=1
62 Chapitre 5. Les modèles non linéaires

4. Calcul du pas. Trouvez αk la solution optimale de



max f xk−1 + α(xkLP − xk−1 )
scq 0 ≤ α ≤ 1
et mettre
xk = xk−1 + αk (xkLP − xk−1 )
5. Critère d’arrêt. Si xk−1 et xk sont suffisamment proches, stop. Sinon retour
en 2.

Reste à résoudre en général, le problème de la maximisation de la fonction d’une


variable h(α). Ceci peut être fait, par exemple, par une méthode de bissection.

5.6 Exercices

5.1. Programmation séparable. Résoudre le problème non linéaire séparable


suivant en appliquant la technique d’approximations linéaires par morceaux :
Min x21 − 4x1 − 2x2


 x1 + x2 ≤ 4

 2x + x ≤
1 2 5
Scq 

 −x 1 + 4x 2 ≥ 2

x1 , x2 ≥ 0

5.2. Méthode de Franck-Wolfe. Faire la troisième itération de la méthode de


Franck-Wolfe pour l’exemple traité à la section 5.5.
5.3. Minimisation des risques. Un épargnant dispose de 100 francs à investir
en bourse. Son portefeuille d’actions peut comporter trois titres dont on
veut déterminer les parts optimales x, y et z. Les rendements rX , rY et rZ
de ces trois titres sont des variables aléatoires. On suppose connues leurs
moyennes respectives : 30%, 20% et 8 %. Le risque V (x, y, z) est mesuré à
partir de la matrice de variance-covariance des rendements des trois titres :
  
3 1 −0.5 x

V (x, y, z) = (x, y, z)  1 2 −0.4   y 


−0.5 −0.4 1 z
(a) Formuler le problème linéaire de la maximisation de la valeur moyenne
espérée de l’investissement dans le portefeuille.
(b) Forlumer le problème de minimisation duu risque V (x, y, z) tout en
s’imposant un rendement espéré du portefeuille au moins égal à 12 %.
Partie II
Logiciels d’optimisation

63
Chapitre 6

Le solveur d’EXCEL.

6.1 Introduction

Le solveur d’EXCEL est un résolveur d’équation ainsi qu’un optimiseur exploitant


les techniques de la programmation linéaire, de la programmation en nombres
entiers et de la programmation non linéaire.
Illustrons ceci sur l’exemple de l’entreprise de fabrication de chassis tiré
de [6]. Pour rappel, ce problème s’énonce ainsi : l’entreprise de fabrication de
chassis envisage la mise en production de deux nouveaux modèles (le chassis en
aluminium et le chassis en bois) au moyen des capacités résiduelles de ses trois
ateliers : à savoir l’atelier 1 où sont fabriqués les cadres en aluminium, l’atelier
2 où sont fabriqués les cadres en bois et l’atelier 3 où le montage du verre sur le
chassis est réalisé pour les deux types de chassis.
Le nombre d’heures nécessaires par produit et le nombre d’heures encore dispo-
nibles par semaine sont donnés au tableau 6.1.

Atelier Chassis Chassis Capacité


aluminium bois disponible
1 1h 0h 4 h/semaine
2 0h 2h 12 h/semaine
3 3h 2h 18 h/semaine

Tableau 6.1: Temps nécessaires et capacités résiduelles

Les marges unitaires sont de 3 $ pour le chassis en aluminium et de 5 $ pour


le chassis en bois.
On se pose la question suivante : combien produire de chassis de chaque type
par semaine pour maximiser le profit net ?

65
66 Chapitre 6. Le solveur d’EXCEL.

La formulation de ce problème est particulièrement simple. En posant x1 , le


nombre de chassis en aluminium fabriqués par semaine et x2 , le nombre de chassis
en bois fabriqués par semaine, on obtient la formulation suivante :

max = 
3x1 + 5x2


 x1 ≤ 4



 2x2 ≤ 12

s.c.q.  3x1 + 2x2 ≤ 18




 x1 ≥ 0


x2 ≥ 0

Nous allons maintenant résoudre le problème au moyen du solveur d’Excel.


La première chose à faire est de rentrer les données numériques du problème et
les formules de calcul de la fonction objectif ainsi que du membre de gauche des
contraintes. Pour la clarté du modèle, il est indispensable de mettre également des
commentaires. Comme le problème est linéaire, on peut rentrer, les coefficients
numériques sous forme d’une matrice. On remarquera au tableau 6.2 que les

A B C D E
1 x1 x2 b
2
3 Profit : 3 5 =B3*$B$2+C3*$C$2
4 Atelier 1 : 1 0 =B4*$B$2+C4*$C$2 4
5 Atelier 2 : 0 2 =B5*$B$2+C5*$C$2 12
6 Atelier 3 : 3 2 =B6*$B$2+C6*$C$2 18
7 x1 positif : 1 0 =B7*$B$2+C7*$C$2 0
8 x2 positif : 0 1 =B8*$B$2+C8*$C$2 0

Tableau 6.2: Exemple de problème linéaire

coefficients d’une même équation ainsi que sa formule de calcul ont été rangés dans
une même ligne qui contient comme commentaire le nom de l’équation (Atelier
1, Atelier 2, . . . ). De même, les coefficients se rapportant à une même variable
ont été rangé en colonne sous le nom de la variable (x1 , x2 ). Remarquez ici, pour
comprendre les formules, que l’on a choisi de placer la valeur de x1 en cellule
$B$2$ tandis que celle de x2 est placée en cellule $C$2.
Il reste maintenant à indiquer à Excel, où se trouvent les variables, la fonction
objectif, le membre de gauche, de droite et le sens des contraintes. Ceci peut être
mis en œuvre en Excel 4.0 de la manière suivante :
Section 6.1. Introduction 67

1. Dans le menu “Sélection”, choisir le sous-menu “Solveur”.


2. Dans la zone “Cellule à définir”, mettre la référence de la cellule de calcul
de l’objectif (ici $D$3).
3. Dans la zone “Egale à”, choisir Max ou Min (ici Max).
4. Dans la zone “Cellules variables”, mettre les références des cellules conte-
nant les variables (ici $B$2:$C$2) .
5. Dans la zone “Contraintes”, choisir “ajouter une contrainte” et pour chaque
contrainte :
• Dans la zone “Cellule”, mettre la référence de la cellule contenant la
formule de calcul du membre de gauche (par exemple, pour l’atelier
1 : $D$4).
• Dans la zone “Relation”, mettre le sens de la contrainte (par exemple,
pour l’atelier 1 : <=).
• Dans la zone “Contrainte”, mettre la référence de la cellule contenant
le membre de droite (par exemple, pour l’atelier 1 : $E$4).
6. Dans ”Option”, choisir ”Modèle supposé linéaire”.
7. Lancer la commande “Résoudre”.

On obtient alors le modèle illustré par la copie d’écran de la figure 6.1.

Figure 6.1: Paramètres du solveur

Plusieurs remarques sur les particularités d’Excel s’imposent ici :

1. Pour modifier le modèle on peut utiliser :


68 Chapitre 6. Le solveur d’EXCEL.

• la commande “supprimer la contrainte”;


• la commande “modifier la contrainte”.

2. Il est important de bien choisir le nom de la contrainte et le nom des variables


pour une présentation claire du rapport (voir à la section suivante comment
Excel détermine le nom des variables et des contraintes).

3. La solution est mise dans les cellules variables.

4. Les contraintes de positivité des variables doivent être entrées explicite-


ment, ceci contrairement à la convention de beaucoup d’optimiseurs qui
considèrent par défaut des variables non négatives. Remarquez que l’on
peut directement entrer la contrainte sous la forme suivante :

$B$2:$C$2 >= 0

5. Seules les variables non calculées (les variables indépendantes du modèle)


doivent être rentrées dans la section variables. Ainsi, si l’on avait calculé dans
une cellule le nombre d’heures passées dans l’atelier 1, cette cellule contien-
drait une variable (au sens mathématique du terme) mais ne devrait pas être
rentrée dans les cellules variables pour Excel, sans quoi Excel considérerait
qu’il s’agit d’une variable indépendante et effacerait sa formule de calcul.

6. Si le modèle est linéaire (contraintes linéaires et fonction objectif linéaire),


on a tout intérêt à sélectionner l’option “Modèle supposé linéaire”, ce qui
déclenchera l’algorithme du Simplexe plutôt qu’un algorithme général de
programmation non linéaire.

7. Remarquez enfin que on peut rentrer d’une seule commande tout un groupe
de contraintes ayant le même sens. Ainsi, dans l’exemple, on aurait pu
rentrer les trois contraintes de capacités par la commande suivante :

$D$4:$D$6 <= $E$4:$E$6

La solution du solveur correspond bien à celle déterminée précédemment, à


savoir

x∗1 = 2
x∗2 = 6
z ∗ = 36
Section 6.2. Les rapports du solveur 69

6.2 Les rapports du solveur

Lorsque le solveur a terminé, qu’il ait trouvé la solution optimale ou non, la boı̂te
de dialogue illustrée à la figure 6.2 apparaı̂t.

Figure 6.2: Rapports possibles du solveur

Elle laisse le choix entre garder dans les cellules variables la solution obte-
nue par le solveur soit rétablir la solution initiale (généralement zéro partout).
Cette boı̂te permet également de générer trois types de rapport : le rapport des
réponses, le rapport de sensibilité et le rapport des limites.

6.2.1 Le rapport des réponses

Figure 6.3: Rapports des réponses

Le rapport des réponses (voir figure 6.3) fournit :


70 Chapitre 6. Le solveur d’EXCEL.

• la référence de la cellule, le nom, la valeur initiale et finale de l’objectif;

• la référence de la cellule, le nom, la valeur initiale et finale des variables;

• les informations sur les contraintes : la référence de la cellule, le nom, la


valeur finale du membre de gauche, la formule de calcul, son status (active
ou non), ainsi que la marge (valeur de la variable d’écart).

Remarquez que pour déterminer le nom, Excel fait, dans chaque cas, la concaté-
nation du premier commentaire rencontré dans la même ligne que la cellule et du
premier commentaire rencontré dans la même colonne que la cellule.

6.2.2 Le rapport de sensibilité

Figure 6.4: Rapport de sensibilité

Le rapport de sensibilité (voir figure 6.4) fournit :

• les informations sur les variables : la référence de la cellule, le nom et la


valeur finale de la variable, le coût réduit, le coefficient dans la fonction
objectif, l’accroissement et la diminution maximale de ce coefficient avant
qu’une variable ne change de valeur.

• les informations sur les contraintes : la référence de la cellule, le nom et la


valeur finale du membre de gauche de la contrainte, le prix dual, la valeur du
membre de droite, l’augmentation et la diminution maximum de ce membre
de droite telle que la base optimale reste la même.
Section 6.3. Exercices 71

6.3 Exercices

6.1. Choix d’investissements. Un épargnant peut investir 1000 F. Il a le choix


entre 3 investissements possibles : A, B et C. Les valeurs attendues et les
valeurs minimales garanties après un an sont, pour un franc :

Type valeur valeur


d’investissement attendue garantie
A 1, 4 0, 9
B 1, 2 1, 2
C 1, 6 0, 5

L’épargnant souhaite un intérêt minimum garanti de 5% l’an. L’intérêt mi-


nimal doit porter sur la somme disponible. Cependant, il a promis d’investir
au moins 600 F sur B et C ensemble. Comment pourrait-il répartir son
investissement pour maximiser la valeur attendue globale après un an ?

6.2. Découpe de bobines mères. Les papetiers fabriquent des rouleaux de papier
dont la largeur est fixée par les caractéristiques des machines de production.
Leur clients peuvent leur réclamer des rouleaux de diverses largeurs et de
diverses longueurs. Comme il est fréquent que ni la largeur ni la longueur
des bobines mères ne soient des multiples de celles de rouleaux commandés,
il y a des pertes connues sous le nom de chutes. La largeur des bobines mères
est de 215 cm et leur longueur de 250 m. Les commandes acceptées par le
papetier sont reprises au tableau 6.3. Comme la longueur des rouleaux com-

Largeur (en cm) longueur (en m) nombre de rouleaux


64 250 360
60 250 180
35 250 180
Tableau 6.3: Commandes acceptées

mandés est identique à celle des bobines mères, il suffit d’assurer la coupe
transversale d’un certain nombre de bobines mères. Pour satisfaire les com-
mandes acceptées, le papetier peut, par exemple, combiner trois coupes de
largeur 64 cm dans la même bobine, mais aussi, par exemple, deux de lar-
geur 64 et deux de largeur 35. Toutes les possibilités sont reprises au tableau
6.4. On veut déterminer comment satisfaire les commandes acceptées avec
le minimum de bobines mères.

(a) Formuler le problème comme un problème en nombres entiers.


(b) Mettre en œuvre sous la forme d’un modèle de calcul Excel.
72 Chapitre 6. Le solveur d’EXCEL.

Largeur 1 2 3 4 5 6 7 8 9 10
64 3 2 2 1 1 1 0 0 0 0
60 0 1 0 2 1 0 3 2 1 0
35 0 0 2 0 2 4 1 2 4 6
Chute 23 27 17 31 21 11 0 25 15 5
Tableau 6.4: plans de coupe

(c) Donner la solution du solveur d’Excel.

6.3. Effet de la publicité. Une firme fabrique et met sur le marché 2 produits A
et B. Le prix de vente unitaire et les ressources nécessaires pour fabriquer
une unité sont données au tableau 6.5. Chaque semaine, la société peut se

Produit A Produit B
Prix de vente 60 $ 41 $
Matériau requis 2 unités 1 unité
Main-d’œuvre 0,75 heure 0,5 heure
Usinage 1,5 heure 0,8 heure

Tableau 6.5: Prix unitaires et quantités de facteurs

procurer 400 unités du matériau requis au coût de 4,75 $ l’unité. Au service


de la société se trouvent 4 employés qui travaillent chacun 40 heures semaine
et dont les salaires sont fixes (indépendant du volume de production). Les
heures supplémentaires sont payées 15 $ de l’heure. Mais la direction a
promis de ne jamais exiger plus de 35 heures supplémentaires par semaine.
L’usinage se fait sur deux machines, disponibles chacune à raison de 160
heures par semaine. La demande de base du produit est au maximum de
50 unités par semaine pour A et de 60 unités pour B. On peut insérer des
publicités dans la presse locale. On estime que chaque $ de publicité investi
pour A augmente sa demande maximum de 8 unités et chaque $ investi pour
B augmente sa demande de 4 unités. Le budget publicité maximum est de
65 $ par semaine.

(a) Formuler le problème de la maximisation du revenu net (choix des


variables, expression de l’objectif et des contraintes).
(b) Résoudre au moyen du solveur d’Excel.
(c) Les ouvriers estiment que le prix de 15 $ n’est pas une compensation
financière suffisante. Ils exigent une augmentation de 10 $ par heure.
Faut-il accéder à leur demande ?
Section 6.3. Exercices 73

(d) Quel serait le revenu net que tirerait la société de 10 $ de dépenses


supplémentaires en publicité chaque semaine ?
Chapitre 7

Le language GAMS

7.1 Un exemple de transport

Nous allons illustrer l’écriture d’un modèle en GAMS sur un exemple de transport
tiré du manuel GAMS [1]. On dispose de deux usines de production dont les
débouchés sont situés sur trois marchés distants géographiquement. On connaı̂t la
capacité de production de chacune des usines ainsi que la demande de chacun des
marchés. On dispose également (voir tableau 7.1 pour les données) des distances,
exprimées en milliers de miles, entre les sites de production et les marchés. Les frais

Usines Marchés Offre


Distance New York Chicago Topeka
Seattle 2.5 1.7 1.8 350
San Diego 2.5 1.8 1.4 600
Demande 325 300 275

Tableau 7.1: Les données numériques du problème de transport.

de transport sont de 90 $ par millier de miles. On se demande combien d’unités


du produit acheminer à chaque marché à partir de chaque usine de manière à
minimiser les coûts de transport, les coûts de production, étant les mêmes dans
toutes les usines, n’entrent pas en ligne de compte.
Nous allons d’abord formuler mathématiquement le problème. Nous indi-
çons par i, les usines et par j, les marchés. Affectons également des symboles aux
données numériques (voir tableau 7.2).

7.1.1 Choix des variables de décision

Notons par xij , la quantité transportée de l’usine i vers le marché j.

75
76 Chapitre 7. Le language GAMS

Symbole Signification
Oi Offre de produit à l’usine i;
Dj Demande pour le produit au marché j;
dij Distance entre l’usine i et le marché j;
cij Coût unitaire de transport entre l’usine i et le marché j.

Tableau 7.2: Les symboles affectés aux données.

7.1.2 Expression de l’objectif

Il s’agit simplement de la minimisation de la somme des coûts de transport :



min cij xij
i j

où le coefficient cij se calcule à partir du coefficient dij représentant la distance en


milliers de miles entre i et j par la formule suivante :
cij = 90dij , ∀i, j

7.1.3 Expression des contraintes

• Observer la capacité de l’usine i : elle s’exprime simplement par le fait que


la somme des quantités prélevées à l’usine i doit être inférieure ou égale à
sa capacité :
x11 + x12 + x13 ≤ 350 = O1
x21 + x22 + x23 ≤ 600 = O2
En général : 
xij ≤ Oi , ∀i
j

• Satisfaire la demande au marché j : elle s’exprime simplement par le fait


que la somme des quantités arrivant sur le marché j doit au moins être égale
à la demande :
x11 + x21 ≥ 325 = D1
x12 + x22 ≥ 300 = D2
x13 + x23 ≥ 275 = D3
En général : 
xij ≥ Dj , ∀j
i
Section 7.2. Ecriture en GAMS 77

7.2 Ecriture en GAMS

En GAMS, les indices sont appelés des ensembles (SETS), les données sont appelées
des paramètres (PARAMETERS), les variables de décisions sont appelées variables
(VARIABLES) et les contraintes et la fonction objectif sont appelés des équations
(EQUATIONS).
Voyons maintenant l’écriture en GAMS du modèle. Elle découle directement
de la formulation :

SETS
I les usines /SEATTLE,SAN-DIEGO/
J les marches /NEW-YORK,CHICAGO,TOPEKA/ ;

PARAMETERS
OFF(I) capacite de l’usine i
/ SEATTLE 350
SAN-DIEGO 600 /

DEM(J) demande au marche j


/ NEW-YORK 325
CHICAGO 300
TOPEKA 275 / ;

TABLE DIST(I,J) distance en milliers de miles


NEW-YORK CHICAGO TOPEKA
SEATTLE 2.5 1.7 1.8
SAN-DIEGO 2.5 1.8 1.4 ;

SCALAR F cout de transport en dollar par mille miles /90/;

PARAMETER C(I,J) cout de transport en dollars ;


C(I,J) = F * DIST(I,J) ;

VARIABLES
X(I,J) quantites transportees
Z cout total de transport en dollars ;

POSITIVE VARIABLE X ;

EQUATIONS
COUT definit la fonction objectif
78 Chapitre 7. Le language GAMS

OFFRE(I) respecter la capacite de l’usine i


DEMANDE(J) satisfaire la demande du marche j ;

COUT.. Z =E= SUM((I,J), C(I,J)*X(I,J)) ;

OFFRE(I).. SUM(J,X(I,J)) =L= OFF(I) ;

DEMANDE(J).. SUM(I,X(I,J)) =G= DEM(J) ;

MODEL TRANSPORT /ALL/ ;

SOLVE TRANSPORT USING LP MINIMIZING Z;

Voyons maintenant plus en détails chacune des sections d’un fichier GAMS.

7.2.1 Section SET

Dans l’exemple, la section SET est constituée des lignes suivantes :

SETS
I les usines /SEATTLE,SAN-DIEGO/
J les marches /NEW-YORK,CHICAGO,TOPEKA/ ;

Dans cette section, on donne un nom à chaque indice qui sera utilisé dans le
modèle, un texte explicatif de cet indice et les membres de l’ensemble entre barres
de division, le séparateur étant la virgule.
Il est à remarquer qu’aussi bien les noms que les commentaires doivent être en
ASCII pur : pas d’accent, pas de caractères spéciaux tels que ≤, ≥ ni même le $
qui sera utilisé pour exprimer des conditions de restriction (voir plus loin).
Remarquez également que l’instruction SET est terminée par un “;”, le sépara-
teur d’instruction en GAMS. On peut également mettre une instruction SET devant
chaque nom d’indice, il faut alors terminer chaque ligne par un “;”.
Lorsque les éléments d’un ensemble sont des nombres consécutifs, on peut
utiliser le caractère “*” qui signifie “tous les nombres compris entre les deux
valeurs”. Par exemple, pour un indice sur les années tel que le T suivant :

SET T toutes les annees de 1991 a 1994 /1991,1992,1993,1994/;

on peut le définir plus simplement par :


Section 7.2. Ecriture en GAMS 79

SET T toutes les annees de 1991 a 1994 /1991 * 1994/ ;

Dans certains problèmes, il est nécessaire d’avoir une deuxième copie d’un
même indice. Par exemple, dans un tableau carré des distances kilométriques
entre villes où l’on utilise en abscisse et en ordonnée les mêmes villes. Ceci peut
être fait en GAMS de la manière suivante :

SET I noeuds du reseau /ZEE,DUD,BRU,ZOM,LOE,ARL,PET/ ;


ALIAS(I,J) ;

L’ensemble J sera alors une copie parfaite de l’ensemble I. C’est analogue au i en


notation mathématique.

7.2.2 Les données

On peut introduire les données de trois manières :

1. sous forme d’une liste de valeurs;

2. sous forme d’un tableau de valeurs;

3. par assignation de valeur au moyen d’une formule de calcul.

Données sous forme d’une liste des valeurs :

Dans l’exemple, c’est le cas des paramètres OFF(I) et DEM(J) :

PARAMETERS
OFF(I) capacite de l’usine i
/ SEATTLE 350
SAN-DIEGO 600 /

DEM(J) demande au marche j


/ NEW-YORK 325
CHICAGO 300
TOPEKA 275 / ;

On définit ici deux paramètres OFF(I) et DEM(J) en donnant leurs domaines de


définition respectif I et J entre parenthèses. On donne ensuite une phrase de
commentaires puis la liste des indices et la valeur correspondante du paramètre, le
séparateur entre deux arguments étant le retour de ligne ou la virgule.
80 Chapitre 7. Le language GAMS

Il est à remarquer que les paramètres sont, par défaut, initialisés à ZERO.
Ainsi, on ne rentre pas les valeurs nulles des paramètres. Il faut en tenir compte si
le paramètre est, par exemple, une capacité infinie. Si on ne rentre aucune valeur,
GAMS l’interprétera comme une capacité nulle pour l’usine. On peut rentrer une
capacité infinie par le nombre INF comme dans l’exemple suivant :

PARAMETERS
DEM(J) demande au marche j
/ NEW-YORK 325
CHICAGO 300
TOPEKA INF / ;

Il est aussi à remarquer qu’un paramètre peut être définit sans aucun domaine
via l’instruction SCALAR où l’on donne le nom, un texte de commentaires et la
valeur du paramètre entre barres de division comme dans l’exemple suivant :

SCALAR F cout de transport en dollar par mille miles /90/;

Il est aussi à remarquer que l’on peut rentrer des paramètres définis sur plus
d’un indice. Dans ce cas, on utilisera le “.” comme liaison entre le premier et le
second indice comme dans l’exemple suivant où l’on donne la capacité des arcs
d’un réseau de transport :

SET I les noeuds du reseau /A,B,C,D,E,F/;

ALIAS(I,J) ;

PARAMETER CAP(I,J) capacite de l’arc


/A.B 3
A.C 7
C.B 2
C.D 2
B.D 4
C.E 4
E.D 2
D.F 6
E.F 5
F.A INF/;
Section 7.2. Ecriture en GAMS 81

Données sous forme de tableaux :

Dans le cas de deux indices, une façon plus commode de rentrer les valeurs d’une
matrice de paramètres est de les rentrer via la section TABLE comme dans l’exemple
suivant :

TABLE DIST(I,J) distance en milliers de miles

NEW-YORK CHICAGO TOPEKA

SEATTLE 2.5 1.7 1.8


SAN-DIEGO 2.5 1.8 1.4 ;

Il est à remarquer que le séparateur de colonne est un ou plusieurs blancs.


Remarquez également qu’une seule table peut être introduite après le mot-clé
TABLE, contrairement à ce qui peut se faire avec les mots-clés SETS ou PARAMETERS.
Si plusieurs tables doivent être introduites, on répétera donc chaque fois le mot
TABLE devant le nom de la table.

Données entrées par assignation directe :

Une troisième forme (outre la liste de valeurs et la table) pour rentrer les valeurs d’un
paramètre est l’affectation directe via une formule qui est illustrée par l’exemple
suivant :

PARAMETER C(I,J) cout de transport en dollars ;

C(I,J) = F * DIST(I,J) ;

où l’affectation est faite pour toute valeur de I et toute valeur de J. Cette ligne est
donne équivalente à une double boucle d’affectation pour tout i et pour tout j.

7.2.3 Section VARIABLES

La section VARIABLES donne, ligne par ligne, le nom des variables avec leurs
indices éventuels entre parenthèses ainsi qu’une phrase d’explication de la signi-
fication de la variable. Dans l’exemple introductif, cela donne :

VARIABLES
X(I,J) quantites transportees
Z cout total de transport en dollars ;
82 Chapitre 7. Le language GAMS

On peut ensuite affecter aux variables un type comme dans le cas de l’exemple :

POSITIVE VARIABLE X ;

Après le mot-clé POSITIVE VARIABLE, on donne la liste de toutes les variables qui
doivent être positives ou nulles. Remarquez que l’on reprend le nom des variables
sans les indices.
On peut également spécifier BINARY VARIABLE pour la liste des variables
binaires 0/1 et INTEGER VARIABLE pour la liste des variables entières (en fait
comprises entre 0 et 100). Il existe encore deux autres types de variables :
NEGATIVE VARIABLE pour les variables astreintes à être négatives ou nulles et
FREE VARIABLE pour les variables pouvant aller de moins l’infini à plus l’infini.
Le type par défaut est le type FREE et la variable de calcul de l’objectif (ici Z) doit
être de ce type.

7.2.4 Section EQUATIONS

Déclaration des équations

La section EQUATIONS donne la liste, ligne par ligne, des noms des contraintes
ainsi que de la ligne de calcul de la fonction objectif avec les indices éventuels sur
lesquels portent ces contraintes suivi d’un texte de commentaires. Dans l’exemple,
cela donne :

EQUATIONS
COUT definit la fonction objectif
OFFRE(I) respecter la capacite de l’usine i
DEMANDE(J) satisfaire la demande du marche j ;

Remarquez qu’en GAMS, EQUATIONS englobe aussi bien la définition de l’ob-


jectif, que celle des contraintes d’égalité que celle des contraintes d’inégalité.
Remarquez aussi que les équations qui ont la même forme algébrique sont
définies en une seule ligne et seront créées pour toutes les valeurs des indices
apparaissant comme arguments dans le nom de la contrainte. Un indice I dans le
nom de la contrainte est donc équivalent mathématiquement à écrire la contrainte
pour tout I.
Remarquez aussi que les noms de contraintes doivent être différents des noms
des variables et différents des noms de paramètres. Si par exemple, on a
déjà défini un paramètre DEMANDE(J), on ne peut plus appeler la contrainte de
satisfaction de la demande au marché J du même nom DEMANDE(J).
Section 7.2. Ecriture en GAMS 83

Définition des équations :

Ensuite la définition de chaque contrainte et de l’objectif sont données sous la


forme suivante :

COUT.. Z =E= SUM((I,J), C(I,J)*X(I,J)) ;

OFFRE(I).. SUM(J,X(I,J)) =L= OFF(I) ;

DEMANDE(J).. SUM(I,X(I,J)) =G= DEM(J) ;

C’est-à-dire que l’on reprend le nom de la contrainte avec son indice éventuel suivi
de “..” et de sa définition : membre de gauche, sens de la contrainte, membre de
droite terminé par “;”. La signification de la lettre précisant le sens de la contrainte
est donnée au tableau 7.3.
=L= Less than or equal
=G= Greater than or equal
=E= Equality
Tableau 7.3: Signification du type de contrainte

La syntaxe d’une sommation est la suivante :

SUM(les indices de sommation, le contenu de la sommation)

La sommation peut porter sur un seul indice, comme dans l’exemple suivant :

OFFRE(I).. SUM(J,X(I,J)) =L= OFF(I) ;

qui est équivalent à : 


xij ≤ Oi .
j

La sommation peut porter sur plusieurs indices comme dans l’exemple suivant :

COUT.. Z =E= SUM((I,J), C(I,J)*X(I,J)) ;

qui est équivalent à 


z= cij xij .
i,j

Remarquez aussi que si on veut utiliser un nom d’équation pour une valeur
donnée d’un indice, on mettra cette valeur entre guillemets simples. Par exemple,
l’équation de demande à NEW-YORK s’écrit :
84 Chapitre 7. Le language GAMS

DEMAND(’NEW-YOR’).. X(’SEATTLE’,’NEW-YORK’)
+ X(’SAN-DIEGO’,’NEW-YORK’) =G= DEM(’NEW-YOR’) ;

La même remarque est vraie pour l’utilisation d’une valeur d’un indice d’une
variable ou d’un paramètre.

7.2.5 Section MODEL

La section MODEL spécifie les contraintes et l’objectif à prendre en considération


dans le modèle. Ceci permet, par exemple, de tester une version linéaire restreinte
d’un modèle qui comporte certaines contraintes non linéaires en ne reprenant dans
la liste que les contraintes purement linéaires. Remarquez que l’on ne précise pas
les variables à considérer : GAMS considérera toutes les variables impliquées dans
les contraintes de la liste. Si l’on veut reprendre toutes les contraintes qui ont été
définies dans la section EQUATIONS, on se contentera de mettre ALL dans la liste
comme dans l’exemple :

MODEL TRANSPORT /ALL/;

qui est équivalent à :

MODEL TRANSPORT /COUT,OFFRE,DEMANDE/;

7.2.6 Section SOLVE

La section SOLVE indique à GAMS quel est le modèle à optimiser, le sens de


l’optimisation (MINIMIZE ou MAXIMIZE), l’objectif et le type d’optimiseur à
utiliser. La signification des lettres précisant l’optimiseur est donnée au tableau 7.4.

LP Linear Programming
NLP Non Linear Programming
MIP Mixed Integer Programming
Tableau 7.4: Signification du type d’optimiseur à utiliser

La syntaxe de cette commande est la suivante :

SOLVE modele USING optimiseur MINIMIZING objectif;

Ce qui dans notre exemple, donne :

SOLVE TRANSPORT USING LP MINIMIZING Z;


Section 7.3. Exercices 85

7.3 Exercices

7.1. Problème de livraison de marchandises. Une firme possède trois usines


situées à Anvers, Liège et Mons de capacités mensuelles de production de
25, 15 et 15 respectivement. Le directeur des ventes de cette firme sait, au vu
de ses fiches de commandes, que, pour la fin du moins, il doit livrer 20, 12,
9 et 14 unités du produit à quatre clients qui habitent Bruxelles, Charleroi,
Namur et Ostende, respectivement. Les coûts de transport d’une unité de
produit entre les usines et les villes sont donnés au tableau 7.5.

Coût de transport Anvers Liège Mons


Bruxelles 100 120 70
Charleroi 150 170 30
Namur 180 80 90
Ostende 90 210 140

Tableau 7.5: Coûts unitaires de transport.

Comment ce directeur doit-il organiser le transport entre ses usines et clients


pour en minimiser les frais, tout en satisfaisant les commandes ? Les coûts
de production sont identiques dans les trois usines et n’entrent donc pas en
considération. Formulez le modèle et le résoudre au moyen de GAMS.

7.2. Chargement d’un haut fourneau. Une fonderie reçoit une commande de
1000 tonnes d’acier. Cet acier doit répondre aux caractéristiques suivantes :
il doit contenir au moins 0,45 % de manganèse tandis que son pourcentage
en Silicium doit se situer entre 3,25 et 5,50. Pour couler cet acier, la fonderie
dispose en quantités illimitées de trois types de minerais (A,B et C) dont les
teneurs en Si et Mn sont données au tableau 7.6. Le procédé de production

Minerai A B C
Si 4% 1 % 0,6 %
Mn 0,45 % 0,5 % 0,4 %

Tableau 7.6: Teneurs en Silicium et Manganèse des différents minerais.

de l’acier est tel qu’une addition directe de manganèse est envisageable. Ce


manganèse est disponible au prix de 8 millions la tonne. Quant aux minerais,
ils coûtent respectivement 21 millions les mille tonnes pour le type A, 25
millions par mille tonnes pour B, et 15 millions par mille tonnes pour C.
86 Chapitre 7. Le language GAMS

Si la fonderie envisage de vendre l’acier produit 0,45 million la tonne, que


doit être son plan de production pour maximiser son profit, sachant que le
coût de fonte d’une tonne de minerai est de 0,005 million ?
Formulez le modèle et le résoudre au moyen de GAMS.
7.3. Optimisation de flux de transports. L’entreprise Bâtiment Travaux Publics
Nantes Atlantique a 3 chantiers en cours : C1, C2, C3. Elle possède 2 unités
de production de béton, B1 et B2, et 2 carrières, G1 et G2, où sont produits
les gravillons qui entrent dans la fabrication du béton. Si la production
interne ne suffit pas, il est possible de faire appel à la sous-traitance pour la
production de gravillons (unité G3) et/ou pour la production de béton (unité
B3). Dans la mesure du possible, on évite d’utiliser la sous-traitance. Il faut
1/2 tonne de gravillons pour 1 tonne de béton. Les quantités de béton à fournir
dans la période aux chantiers C1, C2 et C3 sont respectivement 100, 200 et
130 tonnes. Les capacités de production en gravillons des unités G1 et G2
sont respectivement 75 et 60 tonnes pendant la période. La carrière du sous-
traitant G3 peut fournir 100 tonnes au maximum. Les capacités de production
en béton des unités B1 et B2 sont respectivement de 60 et 120 tonnes. Le
sous-traitant B3 a une capacité de 600 tonnes pendant la même période.
Les coûts de transport unitaire (en euros/tonne) des gravillons sont donnés

euros/tonne vers B1 vers B2 vers B3


de G1 100 80 85
de G2 60 70 65
de G3 120 180 140

Tableau 7.7: Coûts de transport des gravillons

à la table 7.7 tandis que les coûts de transport unitaire (en euros/tonne) des
bétons sont donnés à la table 7.8. On veut déterminer comment satisfaire les
F/tonne vers C1 vers C2 vers C3
de B1 40 50 60
de B2 25 30 30
de B3 40 45 60

Tableau 7.8: Coûts de transport des bétons

commandes acceptées à coût de transport minimum tout en n’ayant recours


à la sous-traitance que pour les capacités manquantes de manière interne.
Formuler le problème et le résoudre au moyen de GAMS.
Chapitre 8

Fonctions plus avancées en GAMS

8.1 Les sous-ensembles

Il est parfois nécessaire de définir un sous-ensemble d’indices. Par exemple, dans


un problème de transport où les nœuds du réseau indiquent soit des points d’offre,
soit des points de demande, soit des points d’interconnection du réseau, on peut
vouloir distinguer les sous-ensembles des nœuds d’offre et des nœuds de demande.
Ceci pourra être fait en GAMS de la manière suivante :

SET I noeuds du reseau /ZEE,DUD,BRU,ZOM,LOE,


ANT,GEN,PER,VOE,BER,LIE,WAR,NAM,AND,
MON,BLA,WAN,SIN,ARL,PET/ ;

SETS D(I) noeuds de demande /ANT,ARL,BRU,GEN,


LIE,MON,NAM,PET,BLA/

O(I) noeuds d’offre /ZEE,DUD,LOE,VOE,AND,PER/;

La syntaxe donne le nom du sous-ensemble et entre parenthèses l’ensemble dont


il est issu, ensuite un texte d’explication et les membres du sous-ensemble entre
barres de division, séparés par des virgules.

8.2 Les ensembles multi-dimensionnaux

Dans certains problèmes, il peut être utile de stocker des couples d’indices. Par
exemple, les arcs d’un réseau de transport peuvent être stockés sous la forme de
couples (i,j) comme dans l’exemple suivant :

SET I noeuds du reseau /ZEE,DUD,BRU,ZOM,LOE,

87
88 Chapitre 8. Fonctions plus avancées en GAMS

ANT,GEN,PER,VOE,BER,LIE,WAR,NAM,AND,
MON,BLA,WAN,SIN,ARL,PET/ ;

ALIAS(I,J) ;

SET A(I,J) liste des arcs du reseau /ZEE.DUD,DUD.BRU,


BRU.ZOM,LOE.ANT,ANT.GEN,GEN.ZOM,ZOM.PER,VOE.BER,
BER.LIE,LIE.WAR,WAR.NAM,NAM.AND,AND.PER,PER.MON,
MON.BLA,WAR.WAN,WAN.SIN,SIN.ARL,ARL.PET/

La signification est la suivante : A est un ensemble de couples d’indices dont le


premier appartient à I et le second à J. Le lien est créé en mettant un “.” entre le
premier indice et le second indice. On utilisera la même syntaxe pour des n-uples.

8.3 Définition et initialisation de paramètres

La définition d’un paramètre peut y inclure son initialisation comme dans l’exemple
suivant où le paramètre CAPACITE est fonction de deux indices :

PARAMETER CAP(I,J) capacite de l’arc


/A.B 3
A.C 7
C.B 2
C.D 2
B.D 4
C.E 4
E.D 2
D.F 6
E.F 5
F.A INF/;

Le paramètre représente ici la capacité des arcs d’un réseau de transport. La


signification est la suivante : pour l’arc ayant sont origine en A et son extrémité en
B, la capacité de l’arc est 3. Remarquez que le lien est créé entre le premier et le
second indice par un point. On utilisera la même syntaxe dans le cas de n-uples.
On peut également initialiser un paramètre à deux indices via la spécification
TABLE. C’était le cas du paramètre distance entre usines et marchés dans l’exemple
du chapitre 7. Remarquez que l’instruction TABLE ne peut porter que sur une seule
table contrairement aux instructions SET et PARAMETER qui peuvent porter sur
plusieurs ensembles et plusieurs paramètres consécutifs.
Section 8.3. Définition et initialisation de paramètres 89

Pour les tables à trois indices ou plus, on utilisera le point pour faire la jonction
entre deux indices comme dans l’exemple suivant :

SET
I les periodes de production /janvier,fevrier,mars,avril/
J les periodes de consommation /janvier,fevrier,mars,avril/
M les modes de production /h-norm,h-supp/;

TABLE COUT(I,J,K)
janvier.h-norm fevrier.h-norm mars.h-norm avril.hnorm
janvier 1.0 1.3 1.6 1.9
fevrier +INF 1.0 1.3 1.6
mars +INF +INF 1.0 1.3
avril +INF +INF +INF 1.0

+ janvier.h-supp fevrier.h-supp mars.h-supp avril.supp


janvier 1.5 1.8 2.1 2.4
fevrier +INF 1.5 1.8 2.1
mars +INF +INF 1.5 1.8
avril +INF +INF +INF 1.5 ;

Il s’agit d’un exemple tiré de Williams [11] où l’on peut produire en heures normales
au coût de 1 ou en heures supplémentaires au coût de 1,5, le coût de stockage
pendant un mois d’une unité étant de 0,3. Remarquez que la seconde partie du
tableau aurait très bien pu être placée à droite de la première partie. Si on veut,
comme c’est fait ici, entrer les colonnes d’un tableau en plusieurs blocs, on utilise
le “+” qui signifie que l’on continue tout simplement le même tableau.
On peut également initialiser un paramètre séparément de sa définition. C’était
le cas des coûts de transport dans l’exemple introductif du chapitre 7. On peut
calculer les paramètres en utilisant les fonctions arithmétiques. Par exemple, le
calcul de la capacité totale de mode m se calcule mathématiquement comme :

CAPTOTm = CAPim
i

Ce qui s’écrit en GAMS :

PARAMETER TOTCAP(M) capacite totale du mode M ;

TOTCAP(M) = SUM( I , CAPACITE(I,M) );


90 Chapitre 8. Fonctions plus avancées en GAMS

On peut également utiliser la fonction produit PROD ou la fonction exponenciation


comme dans l’exemple suivant :
part
OUTPUT = Πi INPUTi i

qui s’écrit en GAMS :

OUTPUT = PROD( I, INPUT(I) ** SHARE(I) ) ;

On peut aussi utiliser les fonctions SMIN et SMAX qui ont la même syntaxe que la
sommation ou le produit mais qui calculent le minimum ou le maximum respecti-
vement comme dans les exemples suivants :

CAPMIN = SMIN( I , CAP(I) );


CAPMAX = SMAX( I , CAP(I) );

8.4 Définition des variables et de leur type

Les variables sont définies via leur liste avec leur domaine de définition respectif.
Par défaut une variable est libre (FREE). On peut spécifier un type différent par une
des instructions suivantes :

FREE [−IN F, +IN F ]


POSITIVE [0, +IN F ]
NEGATIVE [−IN F, 0]
BINARY {0, 1}
INTEGER {0, 1, 2, . . .100}

Remarquez que ces différents types sont mutuellement exclusifs : on ne peut


déclarer une variable POSITIVE et INTEGER en même temps. On peut également
affecter des valeurs aux bornes inférieures ou supérieures des variables via les
suffixes .LO pour la borne inférieure et .UP pour la borne supérieure. On peut
également introduire une valeur initiale via le suffixe .L, ce qui est particulièrement
utile dans le cas de la programmation non linéaire. Voici des exemples :

X.UP(I,J) = 100 ;
X.LO(I,J) = 1 ;
X.L(I,J) = (X.UP(I,J) - X.LO(I,J))/2 ;
Section 8.5. Utilisation de l’opérateur d’exceptions 91

8.5 Utilisation de l’opérateur d’exceptions

On peut utiliser l’opérateur $ pour des exceptions dans trois cas différents :

1. dans les sommations : pour restreindre la sommation à un sous-ensemble


comme dans le cas d’un réseau de transport où l’on ne veut faire la sommation
que sur les arcs existant et ayant été définis dans l’ensemble à double indice
A(I,J) :

CONSER(I).. SUM( J $A(J,I), FLUX(J,I))

=E= SUM( J$ A(I,J),FLUX(I,J)) ;

La signification est la suivante : on fera la somme des flux F(I,J) que si le


couple (I,J) fait partie de l’ensemble des arcs A(I,J).
On peut également utiliser les opérateurs relationnels dans la condition. Par
exemple, la somme sur les villes I où la capacité est comprise entre 10 et 20
s’écrit en GAMS :

SUM( I $ ( ( CAP(I) GE 10 ) AND ( CAP(I) LE 20 ) ), X(I))

Les opérateurs les plus courants et leur significations sont donnés au ta-
bleau 8.1.

LT Less Than LE Less or Equal


GE Greather or Equal GT Greater Than
EQ Equal NE Non Equal
OR Or AND And
Tableau 8.1: Signification des opérateurs

2. dans le calcul algébrique : pour ajouter un terme dans une équation unique-
ment si la condition est vraie comme dans l’exemple suivant où l’on ajoute
la demande uniquement dans le cas ou I est un nœud de demande :

CONSER(I).. SUM(J$A(J,I),FLUX(J,I)) + OFF(I)$O(I)


=E= SUM(J$A(I,J),FLUX(I,J)) + DEM(I)$D(I);

La signification est la suivante : on ajoutera OFF(I) uniquement dans le cas


où I appartient à l’ensemble O(I) qui est le sous-ensemble des nœuds d’offre.
92 Chapitre 8. Fonctions plus avancées en GAMS

3. dans le domaine de définition d’une équation : ce qui a pour effet de res-


treindre le nombre d’équations générées comme dans le cas suivant où l’on
restreint la contrainte de bilan sur les stocks aux périodes 1 à 4 au lieu des
périodes 0 à 4 :

SETS T /0,1,2,3,4/ ;
BILAN(T)$(ORD(T) GT 1).. PRODUCTION(T) + STOCK(T-1)
=E= DEMANDE(T) + STOCK(T) ;

où ORD(T) donne le numéro d’ordre de T dans l’ensemble.

8.6 Section SOLVE

La syntaxe de cette instruction est illustrée par l’exemple du chapitre introductif :

SOLVE TRANSPORT USING LP MINIMIZING Z ;

Les différents solveurs disponibles sont les suivants :

LP = Linear Programming
NLP = Non Linear Programming
MIP = Mixed Integer Programming

On peut, avant de lancer l’exécution, modifier la valeur par défaut de certains


paramètres de contrôle. Par exemple, les instructions suivantes :

OPTION ITERLIM = 2000 ;


OPTION RESLIM = 3000;

ont pour effet de fixer le nombre maximum d’itérations à 2000 et la limite du temps
maximum d’exécution à 3000 (par défaut, 1000 pour les deux paramètres).
L’instruction suivante est utilisée uniquement en cas de résolution de problèmes
en nombres entiers :

OPTION OPTCR = 0.05 ;

Cette instruction a pour effet d’arrêter l’exécution si la différence relative entre


la meilleure borne supérieure et la meilleure borne inférieure sur l’objectif est
inférieure à 5 %. La valeur par défaut est de 0,1 (10 %). Si on veut forcer la
méthode de branch and bound à aller jusqu’à la solution optimale du problème en
nombres entiers il faut fixer ce paramètre à 0.
Section 8.7. Exercices 93

8.7 Exercices

8.1. Planification de production. Un industriel cherche à établir son plan de


production pour les quatre mois à venir, sachant que les demandes sont déjà
connues (cfr tableau 8.2). En régime normal, la production est de 1200

Mois 1 2 3 4
Commandes 900 1100 1700 1300

Tableau 8.2: Commandes des quatre prochains mois.

articles par mois. A l’aide d’heures supplémentaires, ce niveau standard


peut être élevé jusqu’à 400 articles en plus, mais il faut compter dans ce cas
un coût additionnel de 7 euros par article. Les coûts de stockage mensuels
sont de 3 euros par article en stock en fin de mois.
Comment l’industriel doit-il planifier sa production pour minimiser les coûts
variables, c’est-à-dire les coûts occasionnés par les heures supplémentaires
et le stockage ? La situation est telle qu’il peut se permettre en régime normal
de produire mois de 1200 articles par mois. Cela n’aura aucune incidence
sur les coûts de production, ceux-ci étant fixes en régime normal, mais l’effet
sur les coûts de stockage peut être bénéfique.
Formuler le modèle correspondant et le résoudre au moyen de GAMS.
8.2. Tournées de véhicules. Considérons le problème d’organisation de la col-
lecte des déchets. La collectivité locale dispose de 12 véhicules de collecte
répartis comme suit pour collecter dans 4 villes notées ville 1 à ville 4.

Ville 1 2 3 4
Nombre de camions 4 3 1 4

Les temps de trajets entre ces villes et l’incinérateur sont les suivants :

Vers ville 1 ville 2 ville 3 ville 4 incinérateur


De la ville 1 0 10 ∞ ∞ 45
De la ville 2 10 0 5 ∞ ∞
De la ville 3 ∞ 5 0 5 20
De la ville 4 ∞ ∞ 5 0 ∞
De l’incinérateur 45 ∞ 20 ∞ 0

Formuler le problème de minimisation du temps total pour aller à l’in-


cinérateur comme un problème en nombre entiers et le résoudre avec GAMS.
94 Chapitre 8. Fonctions plus avancées en GAMS

8.3. Location de surfaces d’entreposage. Le bâtiment d’entreposage d’une


firme fabriquant des peintures vient d’être complètement ravagé par le feu.
Pour pouvoir continuer à stocker ses surplus de production prévus pour les 6
prochains mois (soit la période de reconstruction de l’entrepôt), la firme doit
disposer des surfaces minimum reprises au tableau 8.3. La société s’adresse

Mois 1 2 3 4 5 6
Surface (en 100 m2 ) 35 20 30 10 15 20

Tableau 8.3: Besoins minimaux en surface d’entreposage

à une firme spécialisée dans l’entreposage qui permet de louer n’importe


quelle surface pour un nombre quelconque de mois. Le coût de location est
décroissant en fonction de la longueur du bail (cfr tableau 8.4). La firme

Durée du bail (en mois) 1 2 3 4 5 6


Coût du bail (euros pour 100 m2 ) 200 360 500 625 745 850

Tableau 8.4: Coût des baux

peut donc signer chaque mois autant de baux qu’elle le désire pour la durée
et la surface qu’elle juge utiles. L’objectif est de minimiser le coût total des
baux qui permettront de couvrir les besoins en entreposage des 6 prochains
mois. On vous charge d’établir le calendrier de début et de fin de chacun des
baux ainsi que la surface sur laquelle ils portent.
Chapitre 9

Interprétation de la solution

9.1 Un exemple de planification de production

Il s’agit d’un problème de planification de la production tiré de Williams [11].


Une usine peut produire cinq produits (notés PROD1 à PROD5). La marge
bénéficiaire, c’est-à-dire la différence entre le prix de vente et le coût de pro-
duction, est donnée par produit au tableau 9.1.

Produit PROD1 PROD2 PROD3 PROD4 PROD5


Marge 550 600 350 400 200

Tableau 9.1: Profit net par produit

Chaque produit nécessite le passage par trois étapes de fabrication. Le temps


requis à chaque étape est donné pour chaque produit au tableau 9.2.

Produit PROD1 PROD2 PROD3 PROD4 PROD5


Étape 1 12 20 0 25 15
Étape 2 10 8 16 0 0
Étape 3 20 20 20 20 20

Tableau 9.2: Temps de fabrication

Enfin, il faut tenir compte des ressources en facteurs disponibles. Elles sont
données au tableau 9.3. L’usine travaille en deux poses de huit heures par jour, et
ceci, au maximum six jours par semaine. Chaque personne travaille une pose de 8
heures et ceci 6 jours par semaine au maximum.

95
96 Chapitre 9. Interprétation de la solution

Étape Ressource en facteurs


Étape 1 3 machines
Étape 2 2 machines
Étape 3 8 personnes

Tableau 9.3: Ressources en facteurs

La question que se pose le gestionnaire de l’usine est la suivante. Quelles sont


les quantités à fabriquer de chaque produit pour maximiser le profit net ?

9.1.1 Choix des variables de décisions

Dans cet exemple, on note simplement par xi , la quantité du produit i fabriquée


par semaine.

9.1.2 Definition de la fonction objectif

Dans cet exemple, il s’agit de la somme des contributions de chacune des produc-
tions au profit net de l’usine. Elle s’exprime simplement par :

max z = 550x1 + 600x2 + 350x3 + 400x4 + 200x5

9.1.3 Expression des contraintes

Dans l’exemple, il y a trois contraintes :

• La première concerne la limite d’utilisation des machines à l’étape 1. Il


y a en fait trois machines, utilisées en deux poses des huit heures et ceci 6
jours au maximum par semaine, ce qui donne un nombre maximum d’heures
d’utilisation par semaine1 :

3 × (2 × 8) × 6 = 288 heures

Une unité de produit 1 demande 12 heures sur machine à l’étape 1. Si x1


unités de produit 1 sont produites par semaine, cela demande 12 x1 heures
1
Remarquez ici l’importance d’avoir précisé que les quantités produites
l’étaient par semaine.
Section 9.1. Un exemple de planification de production 97

sur la machine 1. Par un raisonnement semblable pour les autres produits,


on obtient finalement la contrainte :

12x1 + 20x2 + 0x3 + 25x4 + 15x5 ≤ 288

• La deuxième contrainte concerne la limite utilisation des machines à l’étape


2. Le nombre maximum d’heures d’utilisation vaut :

2 × (2 × 8) × 6 = 192 heures,

et la contrainte s’exprime comme :

10x1 + 8x2 + 16x3 + 0x4 + 0x5 ≤ 192.

• Enfin, la troisième contrainte concerne la limite utilisation du personnel à


l’étape 3. Le nombre maximum d’heures prestées en une semaine par les 8
personnes est de :

8 × (1 × 8) × 6 = 384 heures.

Et donc la contrainte s’exprime comme :

20x1 + 20x2 + 20x3 + 20x4 + 20x5 ≤ 384

Il faut bien sûr également imposer la positivité des variables :

x1 , x2 , x3 , x4 , x5 ≥ 0

Enfin, généralement on conclut l’étape de construction du modèle, en regroupant


les contraintes et l’objectif. On obtient le programme mathématique suivant :

maxz = 550x1 + 600x2 + 350x3 + 400x4 + 200x5




 12x1 +20x2 +0x3 +25x4 +15x5 ≤ 288






 10x1 +8x2 +16x3 +0x4 +0x5 ≤ 192
s.c.q. 

 20x1 +20x2 +20x3 +20x4 +20x5 ≤ 384





 x1 , x2 , x3 , x4 , x5 ≥ 0
98 Chapitre 9. Interprétation de la solution

9.2 Interprétation économique

Nous allons illustrer différents aspects de l’interprétation économique de la solution


sur l’exemple de planification de la production introduit à la section précédente.
Sa formulation est reprise ci-dessous :

maxz = 550x1 + 600x2 + 350x3 + 400x4 + 200x5




 12x1 +20x2 +0x3 +25x4 +15x5 ≤ 288






 10x1 +8x2 +16x3 +0x4 +0x5 ≤ 192
s.c.q. 

 20x1 +20x2 +20x3 +20x4 +20x5 ≤ 384





 x1 , x2 , x3 , x4 , x5 ≥ 0
La solution optimale de ce problème linéaire est la suivante :
x∗1 = 12; x∗2 = 7, 2; x∗3 = x∗4 = x∗5 = 0.
Tandis que la valeur optimale de l’objectif est :
z ∗ = 10 920

Voici quelques exemples de questions économiques que l’on peut se poser :

1. Les produits 3, 4 et 5 sont vendus à des prix trop faibles par rapport aux deux
autres. De combien augmenter leur prix de vente, ou de combien réduire
leur coût de production, pour les rendre attractifs ?
2. Combien rapporterait en supplément de profit une heure supplémentaire pour
l’étape 1, pour l’étape 2, ou en main d’œuvre ?

Les réponses à ces deux types de questions sont fournies par l’interprétation
économique de la solution optimale.

1. Pour la première question, l’opposé des coûts réduits fournit l’augmentation


de prix nécessaire. En effet, les coûts réduits des variables hors base s’in-
terprètent, en général, comme l’augmentation de la fonction objectif lorsque
l’on augmente d’une unité la variable. Ici, à l’optimum, ces coûts réduits,
notés respectivement d3 , d4 et d5 , sont négatifs (condition d’optimalité d’un
problème de maximisation), traduisant le fait que si la production de ces
biens était positive, elle diminuerait le profit d’autant.
d3 = −125;
d4 = −231, 25
d5 = −368, 75.
Section 9.2. Interprétation économique 99

Pour qu’il devienne intéressant de les produire, il faut donc augmenter leur
prix d’au moins cette quantité. Ici donc, l’opposé des coûts réduits s’in-
terprète comme l’augmentation minimale de prix pour que la production
devienne intéressante.
2. Pour la seconde question, la valeur des variables duales, notées yi∗ , i =1,2,3,
fournit l’effet marginal d’une augmentation de capacité.
y1∗ = 6, 25;
y2∗ = 0;
y3∗ = 23, 75.
En effet, en général, la variable duale associée à une contrainte fournit direc-
tement l’augmentation de la fonction objectif pour une augmentation unitaire
du membre de droite de la contrainte. Ici justement, le membre de droite est
le nombre d’heures de travail disponibles à chaque étape de production.

Remarquez que tous les optimiseurs fournissent en plus de la solution optimale


d’un problème linéaire, ces deux informations :

• Les coûts réduits sont donnés par l’opposé des coefficients des variables
hors base dans la ligne objectif du tableau Simplexe optimal;
• Les variables duales sont données les coefficients des variables d’écart des
contraintes dans la ligne objectif du tableau Simplexe optimal.

9.2.1 Interprétation des prix duaux


Les prix duaux ou valeurs optimales des variables duales s’interprètent comme
l’augmentation du profit pour une augmentation unitaire d’un des coef-
ficients du membre de droite à la fois.
Ainsi dans l’exemple ci-dessus, l’augmentation d’une unité du premier facteur
rapporte 6,25 unités monétaires.

9.2.2 Interprétation des coûts réduits


Les coûts réduits des variables hors base s’interprètent comme l’augmenta-
tion du profit pour une augmentation unitaire de la valeur de la variable
hors base.
Par exemple, pour le produit 3, le coût réduit vaut −125. On en déduit immédiate-
ment que si l’on accroı̂t le prix de vente du produit 3 de 125 unités monétaires,
son coût réduit devient nul et sa production devient intéressante.
100 Chapitre 9. Interprétation de la solution

9.3 Output de GAMS

9.3.1 Echo du programme GAMS

Reprenons l’exemple introductifdu chapitre 7 qui nous a servi à introduire l’écriture


en GAMS d’un modèle. La première chose que fait GAMS dans son listing résultat
est de faire un écho de formulation en GAMS en ajoutant simplement des numéros
de ligne. Pour notre exemple, on obtient le début de listing (.LST) repris ci-dessous :

1 $TITLE un probleme de transport


2 $OFFUPPER
3 SETS
4
5 I les usines /SEATTLE,SAN-DIEGO/
6 J les marches /NEW-YORK,CHICAGO,TOPEKA/;
7
8 PARAMETERS
9
10 A(I) capacite de l’usine i
11 / SEATTLE 350
12 SAN-DIEGO 600 /
13
14 B(J) demande au marche j
15 / NEW-YORK 325
15 CHICAGO 300
17 TOPEKA 275 / ;
18
19 TABLE D(I,J) distance en milliers de miles
20 NEW-YORK CHICAGO TOPEKA
21 SEATTLE 2.5 1.7 1.8
22 SAN-DIEGO 2.5 1.8 1.4 ;
23
24 SCALAR F cout de transport en dollars par Kmiles /90/;
25
26 PARAMETER C(I,J) cout de transport en Kilo dollars ;
27
28 C(I,J) = F * D(I,J)/1000 ;
29
30 VARIABLES
31 X(I,J) quantites transportees
32 Z cout total de transport en Kilo dollars ;
Section 9.3. Output de GAMS 101

33
34 POSITIVE VARIABLE X ;
35
36 EQUATIONS
37 COST definit la fonction objectif
38 SUPPLY(I) respecter la capacite de l’usine i
39 DEMAND(J) satisfaire la demande du marche j;
40
41 COST.. Z =E= SUM((I,J), C(I,J)*X(I,J)) ;
42
43 SUPPLY(I).. SUM(J,X(I,J)) =L= A(I) ;
44
45 DEMAND (J).. SUM(I,X(I,J)) =G= B(J) ;
46
47 MODEL TRANSPORT /ALL/ ;
48
49 SOLVE TRANSPORT USING LP MINIMIZING Z;
50
51 DISPLAY X.L, X.M ;

Nous avons également ajouté en début de programme GAMS des instructions


qui vont contrôler l’output de GAMS. On se référera au manuel GAMS pour la liste
complète de ces instructions. Elle doivent toutes commencer en colonne 1 par un
dollar. L’instruction $TITLE va imprimer le texte qui suit en haut de chaque page.
L’instruction $OFFUPPER permet au listing output de contenir des minuscules et
des majuscules.
S’il y a des erreurs de syntaxe, un message commençant par “****” est indiqué
en dessous de la ligne en cause avec un code d’erreur commençant par $ suivi d’un
chiffre. En fin de listing sont repris la signification des messages d’erreur utilisés
dans le listing.
Les erreurs les plus classiques sont :

• L’oubli d’un “;” pour terminer une ligne d’instruction GAMS. Ce sigle doit
être présent, en particulier, à la fin de toute formule de calcul d’un paramètre
ou de toute définition d’une contrainte.
• L’utilisation du même nom pour une variable et un paramètre ou du même
nom pour une variable et pour une équation. Par exemple, l’équation de de-
mande est appelée DEMAND(I) et il existe déjà une variable DEMAND(I).
• Une variable ou un paramètre ont été définis avec un jeu d’indices et sont
utilisés avec un autre jeu d’indices ou avec un nombre d’indices différent de
102 Chapitre 9. Interprétation de la solution

celui de leur définition.

9.3.2 Liste des contraintes

S’il n’y a plus d’erreur, GAMS permet à l’utilisateur de vérifier si les contraintes
générées correspondent bien à ce qu’il voulait faire en donnant trois contraintes
pour chaque contrainte générique. Ainsi, l’équation :

DEMAND (J).. SUM(I,X(I,J)) =G= B(J) ;

va donner les lignes suivantes dans le listing des contraintes :

-------- DEMAND satisfaire la demande du marche j


DEMAND(NEW-YOR).. X(SEATTLE,NEW-YORK)
+ X(SAN-DIEGO,NEW-YORK) =G= 325 ;

DEMAND(CHICAGO).. X(SEATTLE,CHICAGO)
+ X(SAN-DIEGO,CHICHAGO) =G= 300 ;

DEMAND(TOPEKA).. X(SEATTLE,TOPEKA)
+ X(SAN-DIEGO,TOPEKA) =G= 275 ;

Afin que cette section ne soit pas trop longue, GAMS se limite aux trois premières
contraintes générées pour chaque contrainte générique. On peut modifier ce
nombre par la commande

OPTION LIMROW = r ;

où r est le nombre de lignes souhaitées.

9.3.3 Liste des colonnes

L’output par défaut contient aussi une section “listing des colonnes”, qui, sem-
blablement à la liste des contraintes, reprend pour trois variables spécifiques de
chaque variable générique, ses coefficients dans les différentes équations.

---- X quantites transportees


X(SEATTLE,NEW-YORK)

(.LO, .L, .UP = 0, 0, +INF)


Section 9.3. Output de GAMS 103

-225 COUT
1 OFFRE(SEATTLE)
1 DEMANDE(NEW-YORK)

Pour économiser du papier une fois qu’on est sûr de son modèle, une bonne chose
est d’éviter cet affichage au moyen de la commande suivante :

OPTION LIMCOL = 0 ;

Dans les modèles non linéaires, le listing des équations donne les coefficients
de l’approximation de Taylor du premier ordre des équations non linéaires, cette
approximation étant calculée au point de départ.

9.3.4 Statistiques du modèle

GAMS donne alors une section “statistiques du modèle” qui, pour notre exemple
de transport, donne :

MODEL STATISTICS

BLOCKS OF EQUATIONS 3 SINGLE EQUATIONS 6


BLOCKS OF VARIABLES 2 SINGLE VARIABLES 7
NON ZERO ELEMENTS 19

Les “BLOCKS” signifie le nombre de variables ou d’équations génériques générées


tandis que les “SINGLE” signifie le nombre de variables ou d’équations indivi-
duelles générées.

9.3.5 Status du solveur

GAMS donne alors une très importante section “SOLVE SUMMARY” qui, pour
notre exemple de transport, donne :

S O L V E S U M M A R Y
MODEL TRANSPORT OBJECTIVE Z
TYPE LP DIRECTION MINIMIZE
SOLVER XMP FROM LINE 49
****SOLVER STATUS 1 NORMAL COMPLETION
****MODEL STATUS 1 OPTIMAL
****OBJECTIVE VALUE 153.6750
104 Chapitre 9. Interprétation de la solution

Les deux lignes les plus importantes sont “SOLVER STATUS” et “MODEL STA-
TUS”. La ligne “SOLVER STATUS” nous dit si la résolution s’est terminée norma-
lement ou si le solveur a dû abandonner la résolution. Tandis que la ligne “MODEL
STATUS” donnant l’état du modèle (1 = OPTIMAL, 3= UNBOUNDED, 4 = IN-
FEASIBLE).

9.3.6 Rapport des solutions

Ensuite, GAMS donne les résultat de l’optimisation sous la forme suivante. Pour
chaque contrainte le limite inférieure du membre de gauche, la valeur de celui-ci,
la limite supérieure et la variable duale :

----EQU OFFRE respecter la capacite de l’usine i


LOWER LEVEL UPPER MARGINAL
SEATTLE -INF 350.000 350.000 EPS
SAN-DIEGO -INF 550.000 550.000 .

----EQU DEMAND satisfaire la demande du marche j


LOWER LEVEL UPPER MARGINAL
NEW-YORK 325.000 325.000 +INF 0.225
CHICAGO 300.000 300.000 +INF 0.153
TOPEKA 275.000 275.000 +INF 0.126

Le sigle “.” signifie zéro. Le sigle ‘EPS” signifie epsilon.


Pour les variables, on donne la borne inférieure, la valeur, la borne supérieure
et le coût réduit :

----VAR X quantites transportees


LOWER LEVEL UPPER MARGINAL
SEATTLE .NEW-YORK . 50.000 +INF .
SEATTLE .CHICAGO . 300.000 +INF .
SEATTLE .TOPEKA . . +INF 0.036
SAN-DIEGO.NEW-YORK . 275.000 +INF .
SAN-DIEGO.CHICAGO . . +INF 0.009
SAN-DIEGO.TOPEKA . 275.000 +INF .

A la fin du rapport, GAMS donne le nombre de conditions d’optimalité non


satisfaites, de contraintes non réalisables et de rayons extrêmes de solutions :

****REPORT SUMMARY : 0 NONOPT


0 INFEASIBLE
0 UNBOUNDED
Section 9.4. Exercices 105

9.4 Exercices

9.1. La planification dans une manufacture. Une manufacture, qui fabrique


3 produits, utilise 3 ressources pour cette production : services techniques,
main d’œuvre et services administratifs. Le tableau suivant donne les res-
sources nécessaires à la production d’une unité de chacun des produits, ainsi
que diverses autres données pertinentes.
Ressources utilisées (h/unité)
Produit Services Main Services Profit
techniques d’oeuvre administr.
P1 1 10 2 10
P2 1 4 2 6
P3 1 5 6 4
Capacité (h) 100 600 300
(a) Formuler le problème linéaire et résoudre au moyen de GAMS.
(b) Quel prix maximal l’entreprise serait-elle prête à payer pour obte-
nir une heure supplémentaire de main d’œuvre ? pour une heure
supplémentaire de services administratifs ?
(c) De combien devrait-on augmenter le prix de vente unitaire de P3 pour
qu’il devienne rentable d’en produire ?
9.2. Planification au point mort. Une usine de fabrication de jouets est spé-
cialisée dans trois articles : le tricycle, le camion et la poupée. Le carnet
de commandes impose la production, le mois prochain d’au moins 1 300
tricycles, 1 250 camions et 4 000 poupées. Le directeur s’est fixé comme
contrainte économique d’atteindre le point mort. Il définit la contribution
au profit d’un jouet fabriqué dans son usine comme la différence entre le
prix de vente et le coût de production (à l’exclusion des frais d’exploitation).
L’usine atteint donc le point mort aussitôt que la contribution totale au profit
est égale aux frais d’exploitation, lesquels s’élèvent à 41 000 euros par mois.
Voici les coûts de production et la contribution au profit de chaque jouet.
Jouet Coût de production Contribution au profit
Tricycle 15 euros 4,00 euros
Camion 5 euros 1,50 euros
Poupée 4 euros 1,00 euros
Le directeur cherche donc à déterminer combien de jouets de chaque sorte
produire le mois prochain de façon à atteindre le point mort tout en minimi-
sant les coûts de production.
106 Chapitre 9. Interprétation de la solution

(a) Formuler le problème et résoudre au moyen du logiciel GAMS


(b) Si le coût de production du tricycle augmenter de 4 % et que le prix du
jouet est augmenté en conséquence de manière à maintenir la même
contribution unitaire au profit, que deviendra le plan de production
optimal ?
(c) Si les frais d’exploitation chutent de 1 200 euros et que le directeur
maintient sa demande d’atteindre le point mort tout en minimisant les
coûts, que deviendront les coûts de production ?

9.3. Lancement d’un nouveau produit. Une société envisage l’ajout d’un nou-
veau produit à sa gamme. Deux modèles du nouveau produit on été analysés.
Le modèle standard peut se fabriquer dans l’un ou l’autre des 3 ateliers (A,
B ou C) dont dispose la société; chaque unité de modèle requiert en main
d’œuvre soit 5 heures dans l’atelier A, soit 4 heures dans l’atelier B, soit 5
heures dans C. Quant à l’autre modèle considéré, dit modèle de luxe, l’ate-
lier A ne dispose pas de l’équipement nécessaire et sa fabrication devra être
confiée aux ateliers B et C; enfin, une unité de ce modèle de luxe requiert en
main d’œuvre 5 heures dans l’atelier B, ou 8 heures dans C.
On peut rendre disponibles pour la fabrication de l’un ou l’autre des modèles
de ce produit 2 000 heures dans l’atelier A, 8 000 heures dans B et 4 000
heures dans C. Le salaire horaire versé aux ouvriers est de 11,50 euros dans
l’atelier A, de 13 euros dans B et de 12 euros dans C. Le coût des matériaux et
les dépenses (autres que celles engagées pour la main d’œuvre) directement
liées à la fabrication de cet article sont évalués à 10 euros pour l’unité du
modèle standard et à 15 euros pour l’unité du modèle de luxe. L’entreprise
se propose de vendre le modèle standard à 135 euros l’unité et le modèle de
luxe à 145 euros l’unité. Le service marketing estime qu’on ne peut espérer
vendre plus de 2 500 unités du modèle standard ni plus de 1 000 unités du
modèle de luxe.
Comment doit-on répartir le production des 2 modèles entre les différents
ateliers pour maximiser les profits découlant du lancement de ce produit ?

(a) Formuler le problème et déterminer le plan optimal de production au


moyen de GAMS.
(b) Quel est l’atelier où une variation d’une heure dans le temps disponible
aurait la plus grande répercussion sur le profit ?
(c) Quel est le produit dont le service marketing devrait essayer de pro-
mouvoir la demande ?
Chapitre 10

Résolution de modèles non linéaires

10.1 Modèles en nombres entiers

On appelle programmes en nombres entiers (IP pour “Integer Programming”),


les modèles comportant une fonction objectif et des contraintes linéaires et des va-
riables astreintes à des valeurs entières. Si certaines variables du modèle sont
continues et d’autres en nombres entiers, on parle de programmation mixte
entière (MIP pour “Mixed Integer Programming”). Enfin, un cas particulier très
fréquent de programme en nombres entiers est celui où les variables ne peuvent
prendre que les valeurs 0 ou 1 : on parle alors de programmation zéro/un.

10.2 Utilisation du solveur MIP avec GAMS

Pour résoudre un problème mixte entier en GAMS, il suffit dans la section variables
de déclarer les variables suivant leur type. Ainsi les commandes suivantes :

INTEGER VARIABLE X ;
BINARY VARIABLE Y ;

ont pour effet de déclarer respectivement x comme un entier compris entre 0 et


100 et y comme une variable binaire. Il est à souligner que la suite de commandes
suivantes :

POSITIVE VARIABLE X ;
INTEGER VARIABLE X ;

conduira à une erreur en GAMS. Le type POSITIVE voulant dire “réel positif”.
Pour lancer l’optimisation, il suffit de choisir le bon solveur, c’est-à-dire, le
solveur MIP par l’instruction suivante :

107
108 Chapitre 10. Résolution de modèles non linéaires

SOLVE monmodele USING MIP MINIMIZING lecout;

Rappelons qu’il peut être nécessaire de pousser l’optimisation jusqu’à la fin en


mettant le paramètre OPTCR à zéro par la commande :

OPTION OPTCR = 0.0 ;

Il s’agit du critère relatif d’optimalité qui garantit que la différence entre la borne
supérieure et inférieure sur la valeur optimum du problème en nombres entiers
est inférieure à OPTCR. Par défaut, cette borne est mis à 0,10 soit 10 % d’erreur
relative tolérée. Rappelons que pour un problème de maximisation :

• une borne supérieure est donnée par la relaxation linéaire du problème,


• une borne inférieure est donnée par une solution entière du problème.

Il peut aussi être nécessaire d’augmenter le nombre maximum d’itérations par


la commande :

OPTION ITERLIM = 2000 ;

10.3 Modèles non linéaires

On parle de modèle d’optimisation non linéaire lorsque l’on doit optimiser une
fonction sous contraintes et que soit la fonction objectif, soit au moins une cont-
rainte est non linéaire.

10.4 Résolution de problèmes non linéaires avec GAMS

L’introduction de fonctions non linéaires aussi bien dans la définition de l’objectif


que dans les contraintes ne pose pas de problèmes en GAMS. Rappelons que
l’opérateur de multiplications est le caractère “*” comme dans l’exemple d’objectif
quadratique suivant :

OBJECTIF .. Z =E= SUM(I,0.5*Q(I)*Q(I)) ;

Il suffit, pour lancer l’optimisation, de choisir le bon optimiseur par la com-


mande suivante :

SOLVE mommodele USING NLP MAXIMIZING Z;

Dans le listing de solution de GAMS, les multiplicateurs de Lagrange sont


donnés, au signe près, dans la colonne MARGINAL de la section EQUATIONS.
Section 10.5. Conditions de Kuhn et Tucker 109

10.5 Conditions de Kuhn et Tucker

Pour écrire les conditions d’optimalité, on a besoin qu’une condition de régularité


soit satisfaite.

Définition 10.1 Définition de point régulier des contraintes. Soit x∗ satisfaisant


les contraintes :
h(x∗ ) = 0, g(x∗ ) ≤ 0 (10.1)
Alors x∗ est dit régulier pour les contraintes (10.1) si les gradients des contraintes
actives (c’est-à-dire celle qui vérifiées à l’égalité) sont linéairement indépen-
dants.

On peut alors écrire les très importantes conditions nécessaires suivantes :

Théorème 10.1 Conditions nécessaires de Kuhn-Tucker. Soit x∗ un minimum


local pour le problème
min f
(x)
h(x) = 0, (10.2)
s.c.q.
g(x) ≤ 0
et supposons x∗ régulier pour les contraintes. Alors il existe des multiplicateurs
λ ∈ Rm et µ ∈ Rp tels que

m 
p
∗ ∗
∇f (x ) + λi ∇hi (x ) + µk ∇gk (x∗ ) = 0 (10.3)
i=1 k=1
µk gk (x∗ ) = 0, ∀k = 1, . . .p (10.4)
µk ≥ 0, ∀k = 1, . . .p

Les conditions (10.4) sont les conditions de complémentarité disant que si


une contrainte n’est pas active, son multiplicateur µk doit être nul. Pour bien
comprendre la signification pratique des conditions (10.3), nous allons les récrire
au moyen de la fonction de Lagrange. La fonction de Lagrange est obtenue
en multipliant le membre de gauche de chaque contrainte d’égalité (hi (x) = 0)
par un multiplicateur λi , le membre de gauche de chaque contrainte d’inégalité
(gk (x) ≤ 0) par son multiplicateur µk et en additionnant le tout à l’objectif :


m 
p
L(x, λ, µ) = f (x) + λi hi (x) + µk gk (x)
i=1 k=1

Remarquez que ce faisant, on passe d’un problème d’optimisation sous contraintes


à un problème d’optimisation sans contrainte. Les conditions d’optimalité pour
110 Chapitre 10. Résolution de modèles non linéaires

une fonction définie sur Rn sont simplement l’annulation de son gradient. On


remarque que précisément les conditions de Kuhn et Tucker (10.3) ne sont rien
d’autre que l’annulation du gradient par rapport à x du gradient du Lagrangien :
∇x L(x∗ , λ∗ , µ∗ ) = 0.

Illustrons ceci sur l’exemple suivant :


min 2x21 + 2x1 x2 + x22 − 10x1 − 10x2

x21 + x22 ≤ 5
s.c.q.
3x1 + x2 ≤ 6
Le lagrangien s’écrit de la manière suivante :
L(x, λ, µ) = 2x21 + 2x1 x2 + x22 − 10x1 − 10x2
+µ1 (x21 + x22 − 5) + µ2 (3x1 + x2 − 6)
Les conditions de Kuhn et Tucker s’écrivent ici simplement :
∂L/∂x1 = 4x1 + 2x2 − 10 + 2µ1 x1 + 3µ2 = 0
∂L/∂x2 = 2x1 + 2x2 − 10 + 2µ1 x2 + µ2 = 0
µ1 g1 = µ1 (x21 + x22 − 5) = 0
µ2 g2 = µ2 (3x1 + x2 − 6) = 0
µ1 , µ2 ≥ 0
Parfois, la résolution de ces conditions permet de déterminer le point optimum.
Ainsi, supposons la première contrainte active, et la seconde inactive (µ2 = 0).
Les conditions se réduisent à :
4x1 + 2x2 − 10 + 2µ1 x1 = 0
2x1 + 2x2 − 10 + 2µ1 x2 = 0
x21 + x22 = 5
dont la solution est donnée par :
x∗1 = 1,
x∗2 = 2,
µ1 = 1,
µ2 = 0.
Comme, de plus, µ1 ≥ 0, cette solution satisfait les conditions nécessaires de Kuhn
et Tucker.
Terminons par la proposition suivante.

Proposition 10.1 Si le problème est un problème convexe, les conditions néces-


saires sont aussi suffisantes pour montrer que l’on est à l’optimum.
Section 10.6. Exercices 111

10.6 Exercices

10.1. Appel d’offres. Une municipalité lance un appel d’offres concernant 4 pro-
jets de construction. Elle reçoit des devis de la part de 3 entreprises. Chaque
entreprise propose des devis concernant un sous-ensemble des projets. La
table 10.1 reprend le montrant du devis proposé pour chacun des projets
par l’entreprise uniquement dans le cas où elles ont soumissionné pour le
projet. La municipalité désire minimiser le coût total de ses opérations de

Projet A B C D
Entreprise 1 4 1 - 6
Entreprise 2 - 2 5 -
Entreprise 3 3 - 6 5

Tableau 10.1: Montants des offres.

construction.

(a) Ecrire le programme correspondant sachant que chaque projet doit


être attribué à une seule entreprise. La municipalité désire aussi que
chaque entreprise réalise au moins un projet. A quelle condition ceci
est possible ? En admettant que cette condition soit remplie, écrire la
contrainte correspondante.
(b) Ecrire le modèle en nombres entiers obtenu en GAMS.
(c) Donner la solution obtenue par GAMS.

10.2. Minimisation des risques. Un épargnant dispose de 100 francs à investir


en bourse. Son portefeuille d’actions peut comporter trois titres dont on
veut déterminer les parts optimales x, y et z. Les rendements rX , rY et rZ
de ces trois titres sont des variables aléatoires. On suppose connues leurs
moyennes respectives : 30%, 20% et 8 %. Le risque V (x, y, z) est mesuré
à partir de la matrice de variance-covariance des rendements des trois titres
de la manière suivante :
  
3 1 −0.5 x

V (x, y, z) = (x, y, z)  1 2 −0.4   y 


−0.5 −0.4 1 z

(a) Ecrire le programme linéaire correspondant à la maximisation du ren-


dement espéré. Déterminer sa solution optimale au moyen de GAMS.
112 Chapitre 10. Résolution de modèles non linéaires

(b) On veut maintenant minimiser le risque V (x, y, z) tout en s’imposant


un rendement espéré du portefeuille au moins égal à 12 %. Ecrire le
programme quadratique correspondant et le résoudre avec GAMS.
(c) Ecrire les conditions nécessaires d’optimalité de Kuhn et Tucker pour
ce problème et vérifier si la solution satisfait ces conditions.

10.3. Le problème des emplois saisonniers. Le problème est celui d’un entre-
preneur qui fabrique un produit pour lequel la demande varie en fonction de
la saison. Le nombre minimum d’employés requis par saison est indiqué
au tableau 10.2. Tout employé au dessus de ce niveau est sous-employé

Saison Printemps Eté Automne Hiver


Emploi 255 220 240 200

Tableau 10.2: Niveau minimum de l’emploi requis.

et coûte 2 000 euros par saison. Cependant, changer le niveau de l’emploi


d’une saison à l’autre coûte en prime de licenciement ou en coût d’embauche.
On estime ce coût à 200 euros fois le carré de la différence d’emploi entre
deux saisons. On peut considérer un nombre fractionnaire d’emplois vu la
présence de temps partiels. Le gestionnaire doit décider du niveau d’emploi
à chaque saison de manière à minimiser le coût de l’emploi.

(a) Formuler le problème comme un problème d’optimisation non linéaire.


On considérera une cycle complet d’une année.
(b) Résoudre au moyen du logiciel GAMS.
Bibliographie

[1] BROOKE Anthony, David KENDRICK et Alexander MEERAUS, GAMS


User’s guide Release 2.25, The Scientific Press, San Francisco, 1992.

[2] CHVÁTAL Vas̆ek, Linear Programming, Freeman and Company, 1983.

[3] DE WOLF Daniel, Olivier JANSSENS dE BISTHOVEN et Yves SMEERS,


The Simplex algorithm extended to piecewise linearly constrained problems,
CORE DISCUSSION Paper 9119, Université Catholique de Louvain, 1991.

[4] EXCEL, Guide de l’utilisateur, Microsoft, 1992.

[5] Jean-Luc HAINAUT, Base de données et modèles de calcul, Interedition,


1994.

[6] F.S. HILLIER et G.S. LIEBERMAN, Introduction to Operations Research,


6ème édition, Mac Graw-Hill International Editions, Singapour, 1995.

[7] F.S. HILLIER, M.S. HILLIER et G.S. LIEBERMAN, Introduction to Mana-


gement Sciences, 1ère édition, Mac Graw-Hill International Editions, Boston,
2000.

[8] D. G. LUENBERGER, Linear and NonlinearProgramming, Addison-Wesley,


1984.

[9] NEMHAUSER, G.L. et L.A. WOLSEY, Integer and Combinatorial Optimi-


zation, Wiley, New York, 1988.

[10] Y. NORBERT, R. OUELLET et R. PARENT, La recherche opérationnelle,


Gaëtan Morin Editeur, Montréal-Paris, 1995.

[11] M.P. WILLIAMS, Model building in Mathematical Programming, John Wi-


ley, 1990.

[12] M.P. WILLIAMS, Model solving in Mathematical Programming, John Wiley,


1992.

113