Vous êtes sur la page 1sur 43

` MODelisation de problemes en Recherche Operationnelle:

Prsentation, modlisation avec MOSEL e e

Pierre Bonami pierre.bonami@lif.univ-mrs.fr Yann Vaxes


(copie des transparents et supports de cours disponibles `: a http://pageperso.lif.univ-mrs.fr/ pierre.bonami/Teaching.html)

October 18, 2010

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

sous les contraintes: n aij xi = bj , i=1 l x u, x Rn .

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

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

sous les contraintes: n aij xi = bj , i=1 l x u, x Rn .

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 questions ` se poser a


Quelle dcision doit on prendre? e Quelles sont les variables qui dterminent ces dcisions? e e Quelles sont les quantits constantes du probl`me? e e

Quelle est la fonction objectif?

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 questions ` se poser a


Quelle dcision doit on prendre? Produire, vendre, acheter,. . . e Quelles sont les variables qui dterminent ces dcisions? e e Quelles sont les quantits constantes du probl`me? e e

Quelle est la fonction objectif?

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 questions ` se poser a


Quelle dcision doit on prendre? Produire, vendre, acheter,. . . e Quelles sont les variables qui dterminent ces dcisions? e e des quantits ` produire, ` transporter e a a Quelles sont les quantits constantes du probl`me? e e

Quelle est la fonction objectif?

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 questions ` se poser a


Quelle dcision doit on prendre? Produire, vendre, acheter,. . . e Quelles sont les variables qui dterminent ces dcisions? e e des quantits ` produire, ` transporter e a a Quelles sont les quantits constantes du probl`me? e e Les ressources, les cots unitaires, les temps de fabrication u unitaires,. . . Quelle est la fonction objectif?

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 questions ` se poser a


Quelle dcision doit on prendre? Produire, vendre, acheter,. . . e Quelles sont les variables qui dterminent ces dcisions? e e des quantits ` produire, ` transporter e a a Quelles sont les quantits constantes du probl`me? e e Les ressources, les cots unitaires, les temps de fabrication u unitaires,. . . Quelle est la fonction objectif? en gnral minimser le cot, maximiser le revenu ou le prot, e e u minimiser le temps dexecution dun process 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 questions ` se poser a


Quelle dcision doit on prendre? Produire, vendre, acheter,. . . e Quelles sont les variables qui dterminent ces dcisions? e e des quantits ` produire, ` transporter e a a Quelles sont les quantits constantes du probl`me? e e Les ressources, les cots unitaires, les temps de fabrication u unitaires,. . . Quelle est la fonction objectif? en gnral minimser le cot, maximiser le revenu ou le prot, e e u minimiser le temps dexecution dun process Des contraintes portent-elles sur les variables et quelles sont les relations entre les variables? des ressources limits, un ordre dexcution ` respecter,. . . e a Ces relations sont elles reprsentables par des relations linaires? e e

Des questions ` se poser a


Quelle dcision doit on prendre? Produire, vendre, acheter,. . . e Quelles sont les variables qui dterminent ces dcisions? e e des quantits ` produire, ` transporter e a a Quelles sont les quantits constantes du probl`me? e e Les ressources, les cots unitaires, les temps de fabrication u unitaires,. . . Quelle est la fonction objectif? en gnral minimser le cot, maximiser le revenu ou le prot, e e u minimiser le temps dexecution dun process Des contraintes portent-elles sur les variables et quelles sont les relations entre les variables? des ressources limits, un ordre dexcution ` respecter,. . . e a Ces relations sont elles reprsentables par des relations linaires? e e Dans ce cours, oui toujours! Mais des fois il faut tre malin. e Dans le reste du monde peut-tre pas, mais en tant malin. . . 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 .

Languages de modlisation programmation e mathmatique e


Interfaces vers les logiciels de rsolutions. e But : Permettre dcrire naturellement un programme e mathmatique en vue de le rsoudre avec un logiciel (solveur). e e Avantages : prototypage rapide dapplications, dtections e derreurs dans le mod`le, interfaces intuitives. e Pour la programmation linaires de nombreux languages: e
propritaires : Ampl1, Gams1, Osl, Mosel, Concert (C++),. . . e libres : GnuMathProg, zimpl, pulp (python), opC++ (C++),. . .

Interfacs avec un (des) solveur(s) e


propritaires (payants): Cplex, XpressMP, Mosek.. . . e libres (gratuits): GLPK, Clp.. . .

Dans ce cours nous utiliserons le language MOSEL.

Permet aussi de modliser des probl`mes nonlinaires e e e

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.

Anciens tudiants Luminy e 3 www.co.com

Programmation Mathmatique = Programmation e informatique


Les deux termes nont que leur tymologie en commun e (programmation dans le sens militaire: tablir un plan dactions). e Namoins les deux sont historiquement tr`s lis: e e e
Le troisi`me ordinateur construit ` t utilis pour rsoudre des e aee e e programmes linaires4. e Un des premiers codes importants crit dans un language de e programmation (FORTRAN) tait un simplexe. e Jusqu` rcemment la majorit des calculs dans le monde taient des a e e e rsolutions de programmes linaire. e e

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

Dclarer une variable e


On dclare une variable/donne avec: e e nom : type ; Types principaux : real, string, integer, mpvar(variable de dcision), linctr (expression linaire). e e Exemple: x1: mpvar; x2: mpvar;

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

Amliorer les sorties e

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.);

Amliorer la prsentation du mod`le e e e

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;

Ensembles, tableaux, . . . (suite)

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).

Initialisation des donnes dynamiques e


Deux mthodes: e Directement dans le chier de mod`le. e Dans un chier .dat spar. e e

Dans le mod`le (hors des dclarations) e e


Donner une valeure a un real: r := 0.5; Initialiser un tableau unidimensionnel: A1 :: [1.2, 3.4, 2.3] 5 Initialiser un lment du tableau: A1(3) := 2.2 ee Initialiser un ensemble: S := {base, extra}. Initialiser un tableau multidimensionnel: A2 :: (1..2 0..2) [1, 4, 3, 4, 5, 8]

Attention: si A1 est index par des string, les lments seront ordonns par lordre e ee e alphabtique. e

Initialisations dans un chier externe (conseill) e


Donner une valeure a un real: r : 0.5 Initialiser un tableau unidimensionnel (dont on connait les indices et la taille): A1 : [1.2 3.4 2.3] Initialiser un ensemble: S : [bleu jaune]. Initialiser un tableau unidimensionnel index par des string: e A2 : [(bleu) 1 (jaune) 3] Initialiser un tableau multidimensionnel: A3 :: [(bleu 0) 1.1 (jaune 0) 1.7 (bleu 1) 2.3 (jaune 1) 4.3]

Commandes dans le model


initializations from initdata.dat r A1 S A2 A3 end-initializations

Sommer, rpter, itrer e e 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

Lensemble des barres produites: {base, extra}.

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

La cerise sur la barre chocolate e

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).