Mod´elisation
Programmation lin´eaire
Recherche Op´erationnelle et Optimisation Master 1 informatique
S´ebastien Verel verel@lisic.univ-littoral.fr
http://www-lisic.univ-littoral.fr/~verel
Universit´e du Littoral Cˆote d’Opale Laboratoire LISIC Equipe CAMOME
Mod´elisation AMPL Param`etres
Plan
Mod´elisation AMPL Param`etres
Bibliographie
Fran¸cois Lemaire, universit´e Lille 1.
http://portail.fil.univ-lille1.fr/portail/index.
php?dipl=L&sem=S5&ue=ARO&label=Documents Denis Lugiez, Universit´e de Provence, Aix-Marseille I.
http://pageperso.lif.univ-mrs.fr/~denis.lugiez/
Enseignement/Master1/RO/ro.html
Mod´elisation AMPL Param`etres
Un probl` eme industriel
Aci´erie
Aci´erie produit bandes et rouleaux m´etalliques pendant 40 heures par semaine au total
Vitesses de production : 200 bandes par heure et 140 rouleaux par heure.
bandes vendues 25 euros l’unit´e et rouleaux 30 euros l’unit´e March´e limit´e : impossible de vendre de 6000 bandes et 4000 rouleaux
Comment maximiser le profit de l’aci´erie ?
Mod´elisation AMPL Param`etres
Vers la R´ esolution
Mod´elisation d’un probl`eme de programmation lin´eaire
Ecriture dans le langage math´ematique, ”Mise en in´equations et
´equations”
Variables Param`etres Contraintes Objectif(s)
Mod´elisation AMPL Param`etres
Exemple de mod´ elisation
d’un probl`eme de programmation lin´eaire
Variables
x1 le nombre de bandes `a produire x2 le nombre de rouleaux `a produire
25x1+ 30x2 = z [max] x1 ≥ 0 x2 ≥ 0 x1 ≤ 6000 x2 ≤ 4000 1/200x1+ 1/140x2 ≤ 40
Mod´elisation AMPL Param`etres
Exemple de mod´ elisation
d’un probl`eme de programmation lin´eaire
Variables
x1 le nombre de bandes `a produire x2 le nombre de rouleaux `a produire
25x1+ 30x2 = z [max]
x1 ≥ 0 x2 ≥ 0 x1 ≤ 6000 x2 ≤ 4000 1/200x1+ 1/140x2 ≤ 40
Mod´elisation AMPL Param`etres
Exemple de mod´ elisation
d’un probl`eme de programmation lin´eaire
Variables
x1 le nombre de bandes `a produire x2 le nombre de rouleaux `a produire
25x1+ 30x2 = z [max] x1 ≥ 0 x2 ≥ 0 x1 ≤ 6000 x2 ≤ 4000 1/200x1+ 1/140x2 ≤ 40
Mod´elisation AMPL Param`etres
R´ esolution graphique
Chaque in´equation (lin´eaire) : demi-plan des solutions r´ealisables Objectif :
Droite parall`ele `a ”25x1+ 30x2” dont l’abscisse `a l’origine est la plus grande (max)
Plus grande valeur du produit scalaire (projection) 25
30
. x1
x2
= 25x1+ 30x2
25x1+ 30x2 = z [max] x1 ≥ 0 x2 ≥ 0 x1 ≤ 6000 x2 ≤ 4000 1/200x1+ 1/140x2 ≤ 40
Mod´elisation AMPL Param`etres
AMPL
http://www.ampl.com/
Logiciel con¸cu et r´ealis´e par Fourer, Gay et Kernigham Fonctionnnement :
Interface pour ”programmer” le mod`ele
Calculs d´el´egu´es `a un solveur (minos, cplex,etc.)
Installer en suivant les instructions :
http://portail.fil.univ-lille1.fr/portail/index.php?
dipl=L&sem=S5&ue=ARO&label=Documents
Mod´elisation AMPL Param`etres
Resolution AMPL
var x1 >= 0;
var x2 >= 0;
maximize z : 25*x1 + 30*x2;
subject to bandes : x1 <= 6000;
subject to rouleaux : x2 <= 4000;
subject to production : (1/200)*x1 + (1/140)*x2 <= 40;
solve;
MINOS 5.5: optimal solution found. 2 iterations, objective 192000 display z, x1, x2;
z = 192000 x1 = 6000 x2 = 1400
Mod´elisation AMPL Param`etres
Resolution AMPL
var x1 >= 0;
var x2 >= 0;
maximize z : 25*x1 + 30*x2;
subject to bandes : x1 <= 6000;
subject to rouleaux : x2 <= 4000;
subject to production : (1/200)*x1 + (1/140)*x2 <= 40;
solve;
MINOS 5.5: optimal solution found.
2 iterations, objective 192000 display z, x1, x2;
z = 192000 x1 = 6000 x2 = 1400
Mod´elisation AMPL Param`etres
Param` etres
Les param`etres sont les ”constantes” du probl`eme
Les param`etres permettent de d´efinir une classe de probl`emes Lorsque les valeurs des param`etres sont donn´es, la r´esolution num´erique peut s’effectuer.
Exemple
Le nombre d’heure ouvr´ees par semaine.
Mod´elisation AMPL Param`etres
S´ emantique et syntaxe AMPL
Param`etre num´erique
qui peut ˆetre flottant (ou entier cf. plus loin) param heures ouvrees>= 0 ;
Ensemble
Equivalent au type ´enum´er´e set PROD;
Ensemble de param`etres num´eriques param vitesse production { PROD }; Ensemble de variables
param vitesse production { PROD };
cf. tutorialhttp://www.columbia.edu/~dano/courses/4600/
lectures/6/AMPLTutorialV2.pdf
Mod´elisation AMPL Param`etres
Exemple
Le mod`ele, fichierex2.mod
# set of products set PROD;
# parameters
param heures_ouvrees >= 0;
param vitesse_production {PROD} >= 0;
param prix_vente {PROD} >= 0;
param vente_max {PROD} >= 0;
# variables
var qte_produite {p in PROD} >= 0, <= vente_max [p];
# objective maximize profit :
sum {p in PROD} qte_produite [p] * prix_vente [p];
# constraints
subject to production_limitee : sum {p in PROD}
(qte_produite [p] / vitesse_production [p]) <= heures_ouvrees;
Mod´elisation AMPL Param`etres
Exemple
Les donn´eesex2.dat
set PROD := bandes rouleaux;
param heures_ouvrees := 40;
param: vitesse_production prix_vente vente_max :=
bandes 200 25 6000 rouleaux 140 30 4000;
Mod´elisation AMPL Param`etres
Exemple
L’ex´ecutableex2.run
reset;
model ex2.mod;
data ex2.dat;
solve;
display qte_produite.lb, qte_produite, qte_produite.ub;
Mod´elisation AMPL Param`etres
Exercice
Ajouter un produit, des poutres tel que : production max de 160 par heure 29 euros par unit´e
3500 unit´es vendues au maximum
Mod´elisation AMPL Param`etres
R´ esultats et valeur minimale
Abandon du march´e des rouleaux...
Ajoutons une contrainte pour une vente minimale : param vente min PROD >= 0;
var qte produite p in PROD >= vente min [p], <= vente max [p];
Mod´elisation AMPL Param`etres
R´ esolution en nombre entier
Le nombre de poutres n’est pas un entier ! Ajouter le qualificatif int`egre aux variables :
var qte produite p in PROD integer >= vente min [p], <= vente max [p];
R´esolution avec le soldeur cplex : reset;
model ex4.mod;
data ex4.dat;
option solver cplex;
solve; display qte produite.lb, qte produite, qte produite.ub;
Au passage notez que la r´esolution en entier n’est pas le ”cut”
des nombres r´eels !...
Mod´elisation AMPL Param`etres
Exercice : Planification sur plusieurs semaines
Planifier la production sur 3 semaines set SEMS := 1 .. N;
var qte produite {SEMS, PROD } >= 0;
... qte produite[s, p] ...
Stock possible, mais limit´e.
var qte stock {1 .. N+1, PROD } >= 0;
Stock initial et final nul.