Professional Documents
Culture Documents
Buts de ce cours
Modliser dirents types de probl`mes par la programmation e e e linaire (probl`me conomique, de gestion, de production, . . . ). e e e Maitriser un language de modlisation pour rsoudre ces e e probl`mes. e Comprendre, interprter les solutions (dun point de vue e conomique) pour tre capable de proposer des alternatives et des e amliorations. e Evaluation: 2 devoirs ` faire par groupe de deux ou trois. a Premier devoir donn aujourdhui ` rendre le 3 novembre. e a Organisation du cours (aujourdhui ` part): Yann Vaxes le mardi a matin, moi mercredi apr`s midi. e
Plan daujourdhui
Modlisation dun probl`me par la programmation linaire e e e MOSEL Rsolution dun premier programme linaire avec MOSEL e e Amliorer le mod`le e e
Programme Linaire e
n
max / min
i=1
c i xi
j = 1, . . . , m
Programme Linaire e
n
max / min
i=1
c i xi
j = 1, . . . , m
Programme Linaire e
n
max / min
i=1
c i xi
sous les contraintes: n aij xi = bj , i=1 l x u, x Rn . Variables de dcisions (bornes ou non). e e Des constantes
j = 1, . . . , m
Programme Linaire e
n
max / min
i=1
c i xi
sous les contraintes: n aij xi = bj , i=1 l x u, x Rn . Variables de dcisions (bornes ou non). e e Des constantes Fonction objectif.
j = 1, . . . , m
Programme Linaire e
n
max / min
i=1
c i xi
sous les contraintes: n aij xi = bj , i=1 l x u, x Rn . Variables de dcisions (bornes ou non). e e Des constantes Fonction objectif. Contraintes.
j = 1, . . . , m
Programme Linaire e
n
max / min
i=1
c i xi
j = 1, . . . , m
Variables de dcisions (bornes ou non). e e Des constantes Fonction objectif. Contraintes. Les relations entre les variables sont linaires. e
Un probl`me e
La compagnie Pluton fabrique deux types de barres chocolates: pluton base et pluton extra. Pour faire 100 e barres de pluton base il faut 3 kilos de sucre et 1 kilo de chocolat. Pour faire 100 barres de pluton extra, il faut 2 kilos de sucre et 3 kilos de chocolat. Le prot ralis est de 5 euros pour 100 barres de e e pluton base, et de 10 euros pour 100 barres de pluton extra. Nous avons en stock 160 kilos de sucre et 200 kilos de chocolat. Combien doit on produire de barres de chaque type pour maximiser le prot?
Des contraintes portent-elles sur les variables et quelles sont les relations entre les variables? Ces relations sont elles reprsentables par des relations linaires? e e
Des contraintes portent-elles sur les variables et quelles sont les relations entre les variables? Ces relations sont elles reprsentables par des relations linaires? e e
Des contraintes portent-elles sur les variables et quelles sont les relations entre les variables? Ces relations sont elles reprsentables par des relations linaires? e e
Des contraintes portent-elles sur les variables et quelles sont les relations entre les variables? Ces relations sont elles reprsentables par des relations linaires? e e
Pluton suite...
La compagnie Pluton fabrique deux types de barres chocolates: pluton base et pluton extra. Pour faire 100 e barres de pluton base il faut 3 kilos de sucre et 1 kilo de chocolat. Pour faire 100 barres de pluton extra, il faut 2 kilos de sucre et 3 kilos de chocolat. Le prot ralis est de 5 euros pour 100 barres de e e pluton base, et de 10 euros pour 100 barres de pluton extra. Nous avons en stock 160 kilos de sucre et 200 kilos de chocolat. Combien doit on produire de barres de chaque type pour maximiser le prot?
Rponses e
Quelle dcision doit on prendre? e Etablir un programme de production des barres chocolates. e Quelles sont les variables qui dterminent ces dcisions? e e Les quantits (positives!) ` produire de chaque type de barre. e a Quelles sont les quantits constantes du probl`me? e e La quantit totale de sucre, de chocolat. Les quantits de sucre et e e de chocolat pour produire chaque type de barre. Le prots pour 100 barres de chaque type. Quelle est la fonction objectif? Maximiser le prot. Des contraintes portent-elles sur les variables et quelles sont les relations entre les variables? Respecter les contraintes de ressources en sucre et chocolat. Ces relations sont elles reprsentables par des relations linaires? e e On a dit, oui toujours!
Le programme de Pluton
Soit x1 le nombre de barres bases ` produire (en 100aine). a Soit x2 le nombre de barres extras ` produire (en 100aine). a max 5x1 + 10x2 sous les contraintes: 3x1 + 2x2 160 1x1 + 3x2 200 0 x1 , 0 x2 .
Mosel
Language de Modlisation cre par Yves Colombani & Susanne e e Heipcke2. Aujourdhui vendu par la socit FICO3. ee Interfac avec le solveur XpressMP. e Ressources web: Tutoriel: http://brblog.typepad.com/les/mosel WP.pdf Manuel utilisateur:http://www.artelys.com/fr/pdf/mosel lang.pdf Manuel de rfrence:http://www.dil.univee mrs.fr/ vancan/m09/documents/MOSEL user guide.pdf Livre: Applications of Optimization with Xpress-MP , Dash Optimization, 2002.
Comme Mosel lui est un language de programmation informatique pour la programmation mathmatique on peut tre pris de e e confusions. Ne pas confondre: Variables de dcisions et variables au sens e informatique (int i;).
deux applications ont t rsolues ` la main: lapprovisionnement de berlin lors du blocus de ee e a 1948, un programme de rgime ` 17 variables et 9 contraintes (rsolu en 120 jours de travail!) e a e
4
Le minimum en Mosel
Dmarrer->Tous les programmes->Xpress->Xpress IVE e I agree File->New
Le minimum en Mosel
Initialisation
model Nom du model uses mmxprs;
Dclarations e
Toutes les variables de dcision et donnes doivent tre dclares dans: e e e e e declarations !... end-declarations
Quelque commandes
end-model termine le model. . . writeln permet de faire des sorties. minimize/maximimize minimise/maximise un objectif.
Syntaxe
Aectation avec := (sauf dans les dclarations). e Contraintes dgalit = e e ! Commence une ligne de commentaires
Le retour de pluton
model Pluton uses "mmxprs"; declarations x1 : mpvar; x2 : mpvar; Objective:linctr end-declarations Objective:= 5 * x1 + 10 * x2; 3*x1+2*x2 <= 160; x1 + 3* x2 <= 200; maximize(Objective); end-model
Pour accder au rsultats on peut utiliser les fonctions: e e getobj qui donne la valeur optimale; getsol (x1) qui donne la valeur de la variable x1 ` loptimum. a En combinant avec writeln on peut faire une sortie raisonnable: writeln(On doit produire ,getsol(x1)*100, barres bases et ,getsol(x2)*100, barres extras.); writeln(Le profit ralis sera ,getobjval, e e euros.);
But sparer la modlisation des donnes. e e e Le mod`le est abstrait et requiert la connaissance dun spcialiste e e (vous!). Les donns sont concr`tes et mcanniques. e e e Que se passe-t-il si demain:
1. La quantit de sucre change? e 2. Un nouvel ingrdient entre dans la fabrication? e 3. Un nouvelle barre chocolate est vendue? e
Dans tous ces cas, on devra changer les donnes mais pas le e mod`le. e
Ensembles, tableaux, . . .
On les dclare entre declarations . . . end-declarations. e
Ensembles
Il servent essentielement ` indexer. Il peuvent tre: a e Un interval dentiers consecutifs : {1, 2, 3, 4, 5}: I = 1..5. Un ensemble de chaines de charact`res : e S = { base,extra}. On peut direr leur dnition apr`s la dclaration (ensembles e e e e dynamiques): Ensemble dentiers: I : set of integer; Ensemble de chaines de charact`res: e S : set of string;
Tableaux
Ils sont indexs par des ensembles (qui doivent avoir t dclars au e ee e e pralable). e Tableau dentiers: A : array(S) of integer (o` S est un u ensemble) Tableau bi-dimensionnel: x: array(S,1..10) of mpvar (si S est dj` spci le tableau sera statique sinon il sera dynamique.) ea e e Pour accder aux lments du tableau on fait avec des parenthses: e ee A(1), A(2) x(base), x(extra).
Attention: si A1 est index par des string, les lments seront ordonns par lordre e ee e alphabtique. e
Sommer sur un ensemble S prdni: e e sum(i in S) Sommer avec une condition: sum(i in S |s <> 0) Sommer sur deux ensembles S1 et S2: sum(i in S1, j in S2) Rpter sur un ensemble: e e forall( i in S) Par exemple on peut dnir un ensemble de contraintes: e forall(i in S) sum(j in S2) a(i,j)*x(j) <= b(s).
Retour ` Pluton a
On peut maintenant dnir des ensembles et des tableaux pour sparer e e les donnes du mod`le. e e model Pluton uses "mmxprs"; declarations x1 : mpvar; x2 : mpvar; Objective:linctr end-declarations Objective:= 5 * x1 + 10 * x2; 3*x1+2*x2 <= 160; x1 + 3* x2 <= 200; maximize(Objective); end-model
Donnes e
Donnes e
Donnes e
Lensemble des barres produites: {base, extra}. Lensemple des ingrdients: {chocolat, sucre}. e
Donnes e
Lensemble des barres produites: {base, extra}. Lensemple des ingrdients: {chocolat, sucre}. e Un tableau de variables de dcision index par lensemble des e e barres
Donnes e
Lensemble des barres produites: {base, extra}. Lensemple des ingrdients: {chocolat, sucre}. e Un tableau de variables de dcision index par lensemble des e e barres Un tableau bi-dimensionnel des quantits dingrdients ncssaires e e e e pour produire chaque barre.
Donnes e
Lensemble des barres produites: {base, extra}. Lensemple des ingrdients: {chocolat, sucre}. e Un tableau de variables de dcision index par lensemble des e e barres Un tableau bi-dimensionnel des quantits dingrdients ncssaires e e e e pour produire chaque barre. Un tableau unidimensionnel des quantits disponibles et des prots. e Modiez le mod`le Mosel pour sparer les donnes du mod`le (chier e e e e .dat - http://pageperso.lif.univ-mrs.fr/ pierre.bonami/MODRO/Pluton.dat
Il y a un probl`me avec la solution trouve par Xpress: e e On ne peut pas vendre des fractions de barres chocolates.! e On peut simplement prciser quune variable ne prend que des valeurs e enti`res avec la commande: e is integer
Remarque
Quand des variables doivent prendre des valeurs enti`res lalgorithme du e Simplexe ne marche plus et le probm`me devient NP-Dicile. e Namoins les solveurs modernes comme XpressMP peuvent rsoudre e e des probl`mes industriels en nombres entiers de tr`s grandes tailes e e (plusieurs milliers voir millions de variables).