Optim
Optim
Optim
UFR DE MATHEMATIQUES,
SCIENCES ECONOMIQUES
ET SOCIALES.
Licence MASS
Daniel DE WOLF
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
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
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
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.
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 ?”
2. formulation de l’objectif,
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.
Ici l’entreprise désire maximiser son profit net qui s’exprime comme suit :
max z = 3x1 + 5x2
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.
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 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
z = k.
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
x∗ = (2, 6).
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.
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.
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) 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.
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
17
18 Chapitre 2. Algorithme du Simplexe.
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.
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é.
z = 3x1 + 5x2 .
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
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
(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6)
z = 30.
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
(2, 6, 2, 0, 0)
x∗1 = 2
x∗2 = 6
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.
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 :
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.
z −3x1 −5x2 = 0
x1 +x3 = 4
2x2 +x4 = 12
3x1 +2x2 +x5 = 18
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.
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
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
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.
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
(x1 , x2 , x3 , x4 , x5 ) = (0, 6, 4, 0, 6)
z = 30.
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
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
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.
2.7 Exercices
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.
Analyse postoptimale.
3.1 Introduction
31
32 Chapitre 3. Analyse postoptimale.
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
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
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) :
z ∗ = 37, 5
34 Chapitre 3. Analyse postoptimale.
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
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.
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, +∞].
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.
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
2x2 = 12,
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
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
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.
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
4.1 Introduction
41
42 Chapitre 4. La programmation en nombres entiers.
Si x = 0, c(x) = 0;
(4.1)
Si x > 0, c(x) = K + mx.
c(x)
x
Figure 4.1: Représentation d’un coût fixe
c(x, y) = Ky + mx
x ≤ M y, et y ∈ {0, 1} (4.2)
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.
x i ≤ Mi y i (4.5)
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
y1 + y2 + y3 + y4 = 1 (4.7)
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.
x2
P0
5
P1 P2
P3
4
P5
0
0 1 2 3 4 5 6 7 8 x1
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
soit x1 ≤ 4 soit x1 ≥ 5
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
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
4.4 Exercices
5.1 Introduction
51
52 Chapitre 5. Les modèles non linéaires
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
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
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
x2
(0, 7)
z = 3x 1 + 5x 2 = 35
6
4 (4, 3)
z = 3x 1 + 5x 2 = 27
2
2 4 x1
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
Q
Q
P
f (x)
f (x)
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.
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
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;
y = x2
C
6
4 B
1
A
O
1 2 x
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
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 :
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
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
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
x1LP = (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
c1 = 5 − 2 × 0 = 5
c2 = 8 − 4 × 2 = 0
Section 5.5. La méthode de Franck-Wolfe 61
max
5x1
3x1 + 2x2 ≤ 6
scq
x1 , x2 ≥ 0
x2LP = (2, 0)
10 − 24α = 0
∂f (xk−1 )
cj =
∂xj
5.6 Exercices
63
Chapitre 6
Le solveur d’EXCEL.
6.1 Introduction
65
66 Chapitre 6. Le solveur d’EXCEL.
max =
3x1 + 5x2
x1 ≤ 4
2x2 ≤ 12
s.c.q. 3x1 + 2x2 ≤ 18
x1 ≥ 0
x2 ≥ 0
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
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
$B$2:$C$2 >= 0
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 :
x∗1 = 2
x∗2 = 6
z ∗ = 36
Section 6.2. Les rapports du solveur 69
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.
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.
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.3 Exercices
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-
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.
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
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
Le language GAMS
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
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.
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 /
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
Voyons maintenant plus en détails chacune des sections d’un fichier GAMS.
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 :
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 :
PARAMETERS
OFF(I) capacite de l’usine i
/ SEATTLE 350
SAN-DIEGO 600 /
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 :
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 :
ALIAS(I,J) ;
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 :
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 :
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.
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.
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 ;
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 sommation peut porter sur un seul indice, comme dans l’exemple suivant :
La sommation peut porter sur plusieurs indices comme dans l’exemple suivant :
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.
LP Linear Programming
NLP Non Linear Programming
MIP Mixed Integer Programming
Tableau 7.4: Signification du type d’optimiseur à utiliser
7.3 Exercices
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 %
à 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
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 :
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) ;
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 :
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
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
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 :
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 :
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
On peut utiliser l’opérateur $ pour des exceptions dans trois cas différents :
Les opérateurs les plus courants et leur significations sont donnés au ta-
bleau 8.1.
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 :
SETS T /0,1,2,3,4/ ;
BILAN(T)$(ORD(T) GT 1).. PRODUCTION(T) + STOCK(T-1)
=E= DEMANDE(T) + STOCK(T) ;
LP = Linear Programming
NLP = Non Linear Programming
MIP = Mixed Integer Programming
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 :
8.7 Exercices
Mois 1 2 3 4
Commandes 900 1100 1700 1300
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 :
Mois 1 2 3 4 5 6
Surface (en 100 m2 ) 35 20 30 10 15 20
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
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
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 :
3 × (2 × 8) × 6 = 288 heures
2 × (2 × 8) × 6 = 192 heures,
8 × (1 × 8) × 6 = 384 heures.
x1 , x2 , x3 , x4 , x5 ≥ 0
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.
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.
• 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.
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 ;
• 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
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(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 ;
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.
-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.
GAMS donne alors une section “statistiques du modèle” qui, pour notre exemple
de transport, donne :
MODEL STATISTICS
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).
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 :
9.4 Exercices
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 ?
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 ;
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
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 :
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.
m
p
L(x, λ, µ) = f (x) + λi hi (x) + µk gk (x)
i=1 k=1
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.
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
construction.
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é
113