Recherche Opérationnelle: Modélisation avec MOSEL

Transcription

Recherche Opérationnelle: Modélisation avec MOSEL
Recherche Opérationnelle:
Modélisation avec MOSEL
Pierre Bonami [email protected]
(copie des transparents et supports de cours disponibles à:
http://pageperso.lif.univ-mrs.fr/ pierre.bonami/Teaching.html)
7 novembre 2012
Plan d’aujourd’hui
Modélisation d’un problème par la programmation linéaire
Mosel
Résolution d’un premier programme linéaire avec MOSEL
Améliorer le modèle
Programme Linéaire
max / min
n
X
c i xi
i=1
sous les contraintes :
 
n
≤
X
aij xi = bj ,
 
i=1
≥
l ≤ x ≤ u,
x ∈ Rn .
j = 1, . . . , m
Programme Linéaire
max / min
n
X
c i xi
i=1
sous les contraintes :
 
n
≤
X
aij xi = bj ,
 
i=1
≥
l ≤ x ≤ u,
x ∈ Rn .
I
Variables de décisions (bornées ou non).
j = 1, . . . , m
Programme Linéaire
max / min
n
X
c i xi
i=1
sous les contraintes :
 
n
≤
X
aij xi = bj ,
 
i=1
≥
l ≤ x ≤ u,
x ∈ Rn .
I
I
Variables de décisions (bornées ou non).
Des constantes
j = 1, . . . , m
Programme Linéaire
max / min
n
X
c i xi
i=1
sous les contraintes :
 
n
≤
X
aij xi = bj ,
 
i=1
≥
l ≤ x ≤ u,
x ∈ Rn .
I
I
I
Variables de décisions (bornées ou non).
Des constantes
Fonction objectif.
j = 1, . . . , m
Programme Linéaire
max / min
n
X
c i xi
i=1
sous les contraintes :
 
n
≤
X
aij xi = bj ,
 
i=1
≥
l ≤ x ≤ u,
x ∈ Rn .
I
I
I
I
Variables de décisions (bornées ou non).
Des constantes
Fonction objectif.
Contraintes.
j = 1, . . . , m
Programme Linéaire
max / min
n
X
c i xi
i=1
sous les contraintes :
 
n
≤
X
aij xi = bj ,
 
i=1
≥
l ≤ x ≤ u,
x ∈ Rn .
I
I
I
I
I
j = 1, . . . , m
Variables de décisions (bornées ou non).
Des constantes
Fonction objectif.
Contraintes.
Les relations entre les variables sont linéaires.
Un problème
La compagnie Pluton fabrique deux types de
barres chocolatées : “pluton base” et “pluton extra”. Pour faire 100
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 profit réalisé est de 5 euros pour 100 barres de
“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 profit ?
Des questions à se poser
I
Quelle décision doit on prendre ?
Quelles sont les variables qui déterminent ces décisions ?
I
Quelles sont les quantités constantes du problème ?
I
Quelle est la fonction objectif ?
I
Des contraintes portent-elles sur les variables et quelles sont les
relations entre les variables ?
I
Ces relations sont elles représentables par des relations linéaires ?
I
Des questions à se poser
I
Quelle décision doit on prendre ? Produire, vendre, acheter,. . .
Quelles sont les variables qui déterminent ces décisions ?
I
Quelles sont les quantités constantes du problème ?
I
Quelle est la fonction objectif ?
I
Des contraintes portent-elles sur les variables et quelles sont les
relations entre les variables ?
I
Ces relations sont elles représentables par des relations linéaires ?
I
Des questions à se poser
I
Quelle décision doit on prendre ? Produire, vendre, acheter,. . .
Quelles sont les variables qui déterminent ces décisions ?
des quantités à produire, à transporter
Quelles sont les quantités constantes du problème ?
I
Quelle est la fonction objectif ?
I
Des contraintes portent-elles sur les variables et quelles sont les
relations entre les variables ?
I
Ces relations sont elles représentables par des relations linéaires ?
I
I
Des questions à se poser
I
I
I
I
Quelle décision doit on prendre ? Produire, vendre, acheter,. . .
Quelles sont les variables qui déterminent ces décisions ?
des quantités à produire, à transporter
Quelles sont les quantités constantes du problème ?
Les ressources, les coûts unitaires, les temps de fabrication
unitaires,. . .
Quelle est la fonction objectif ?
I
Des contraintes portent-elles sur les variables et quelles sont les
relations entre les variables ?
I
Ces relations sont elles représentables par des relations linéaires ?
Des questions à se poser
I
I
I
I
I
I
Quelle décision doit on prendre ? Produire, vendre, acheter,. . .
Quelles sont les variables qui déterminent ces décisions ?
des quantités à produire, à transporter
Quelles sont les quantités constantes du problème ?
Les ressources, les coûts unitaires, les temps de fabrication
unitaires,. . .
Quelle est la fonction objectif ?
en général minimiser le coût, maximiser le revenu ou le profit,
minimiser le temps d’exécution d’un processus
Des contraintes portent-elles sur les variables et quelles sont les
relations entre les variables ?
Ces relations sont elles représentables par des relations linéaires ?
Des questions à se poser
I
I
I
I
I
I
Quelle décision doit on prendre ? Produire, vendre, acheter,. . .
Quelles sont les variables qui déterminent ces décisions ?
des quantités à produire, à transporter
Quelles sont les quantités constantes du problème ?
Les ressources, les coûts unitaires, les temps de fabrication
unitaires,. . .
Quelle est la fonction objectif ?
en général minimiser le coût, maximiser le revenu ou le profit,
minimiser le temps d’exécution d’un processus
Des contraintes portent-elles sur les variables et quelles sont les
relations entre les variables ?
des ressources limités, un ordre d’exécution à respecter,. . .
Ces relations sont elles représentables par des relations linéaires ?
Des questions à se poser
I
I
I
I
I
I
Quelle décision doit on prendre ? Produire, vendre, acheter,. . .
Quelles sont les variables qui déterminent ces décisions ?
des quantités à produire, à transporter
Quelles sont les quantités constantes du problème ?
Les ressources, les coûts unitaires, les temps de fabrication
unitaires,. . .
Quelle est la fonction objectif ?
en général minimiser le coût, maximiser le revenu ou le profit,
minimiser le temps d’exécution d’un processus
Des contraintes portent-elles sur les variables et quelles sont les
relations entre les variables ?
des ressources limités, un ordre d’exécution à respecter,. . .
Ces relations sont elles représentables par des relations linéaires ?
Dans ce cours, oui toujours ! Mais des fois il faut être malin.
Dans le reste du monde peut-être pas, mais en étant malin. . .
Pluton suite...
La compagnie Pluton fabrique deux types de
barres chocolatées : “pluton base” et “pluton extra”. Pour faire 100
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 profit réalisé est de 5 euros pour 100 barres de
“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 profit ?
Réponses
I
I
I
I
I
I
Quelle décision doit on prendre ?
Établir un programme de production des barres chocolatées.
Quelles sont les variables qui déterminent ces décisions ?
Les quantités (positives !) à produire de chaque type de barre.
Quelles sont les quantités constantes du problème ?
La quantité totale de sucre, de chocolat. Les quantités de sucre et
de chocolat pour produire chaque type de barre. Le profits pour
100 barres de chaque type.
Quelle est la fonction objectif ?
Maximiser le profit.
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 représentables par des relations linéaires ?
On a dit, oui toujours !
Le programme de Pluton
I
I
Soit x1 le nombre de barres bases à produire (en 100aine).
Soit x2 le nombre de barres extras à produire (en 100aine).
max 5x1 + 10x2
sous les contraintes :
3x1 + 2x2 ≤ 160
1x1 + 3x2 ≤ 200
0 ≤ x1 ,
0 ≤ x2 .
Langages de modélisation programmation
mathématique
I
I
I
I
Interfaces vers les logiciels de résolutions.
But : Permettre d’écrire naturellement un programme
mathématique en vue de le résoudre avec un logiciel (solveur).
Avantages : prototypage rapide d’applications, détections
d’erreurs dans le modèle, interfaces intuitives.
Pour la programmation linéaires de nombreux languages :
I
I
I
propriétaires : Ampl 1, Gams1, Osl, Mosel, Concert (C++),. . .
libres : GnuMathProg, zimpl, pulp (python), flopC++ (C++),. . .
Interfacés avec un (des) solveur(s)
I
I
propriétaires (payants) : Cplex, XpressMP, Mosek.. . .
libres (gratuits) : GLPK, Clp.. . .
1. Permet aussi de modéliser des problèmes non-linéaires
Mosel
Langage de Modélisation crée par Yves Colombani & Susanne
Heipcke 2.
Aujourd’hui vendu par la société FICO 3.
Interface avec le solveur XpressMP.
Ressources web :
I Tutoriel : http://brblog.typepad.com/files/mosel WP.pdf
I Manuel
utilisateur :http://iem.okstate.edu/baski/IEM4013/moselug.pdf
I Manuel de
référence :http://home.dei.polimi.it/malucell/didattica/appunti/mosel/
language reference.pdf
Livre :
I Applications of Optimization with Xpress-MP , Dash Optimization,
2002.
2. Anciens étudiants Luminy
3. www.fico.com
Le minimum en Mosel
Démarrer->Tous les programmes->FICO->Xpress IVE
File->New
Initialisation
model Nom du model
uses ‘‘mmxprs’’;
Déclarations
Toutes les variables de décision et données doivent être déclarées dans :
declarations
!...
end-declarations
Quelque commandes
I
I
I
end-model termine le model. . .
writeln permet de faire des sorties.
minimize/maximimize minimise/maximise un objectif.
Syntaxe
I
I
I
Affectation avec := (sauf dans les déclarations).
Contraintes d’égalité =
! Commence une ligne de commentaires
Déclarer une variable
On déclare une variable/donnée avec :
nom : type ;
Types principaux : real, string, integer, mpvar(variable de
décision), linctr (expression linéaire).
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
Améliorer les sorties
Pour accéder au résultats on peut utiliser les fonctions :
I getobjval qui donne la valeur optimale ;
I getsol(x1) qui donne la valeur de la variable x1 à l’optimum.
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 réalisé sera ’’,getobjval, ‘‘
euros’’.);
Modèle →
http://pageperso.lif.univ-mrs.fr/ pierre.bonami/MASS/Pluton.mos
Améliorer la présentation du modèle
I
I
I
I
I
But séparer le modèle des données
Le modèle est formulé de manière algébrique, abstraite.
Les donnés sont concrètes et mécaniques.
Quand la taille des problèmes augmente, il devient vite avantageux
d’extraire le modèle des données.
Que se passe-t-il si demain :
1. La quantité de sucre change ?
2. Un nouvel ingrédient entre dans la fabrication ?
3. Un nouvelle barre chocolatée est vendue ?
I
Dans tous ces cas, on devra changer les données mais pas le
modèle.
Ensembles, tableaux, . . .
On les déclare entre declarations . . . end-declarations.
Ensembles
Il servent essentiellement à indexer. Il peuvent être :
I Un intervalle d’entiers consécutifs : {1, 2, 3, 4, 5} :
I = 1..5.
I Un ensemble de chaines de caractères :
S = { ‘‘base’’,‘‘extra’’}.
On peut différer leur définition après la déclaration (ensembles
dynamiques) :
I Ensemble d’entiers :
I : set of integer;
I Ensemble de chaines de caractères :
S : set of string;
Ensembles, tableaux, . . . (suite)
Tableaux
Ils sont indexés par des ensembles (qui doivent avoir été déclarés au
préalable).
I Tableau unidimensionnel :
A1 : array(1..3) of real;
A2 : array(S) of integer;
I Tableau bi-dimensionnel :
A3: array(S,1..2) of real;
(si S est déjà spécifié le tableau sera statique sinon il sera dynamique.)
Pour accéder aux éléments du tableau on fait avec des parenthèses :
I A(1), A(2),
I x(“base”), x(“extra”).
Initialisation des données dynamiques
Deux méthodes :
I Directement dans le fichier de modèle.
I Dans un fichier .dat séparé.
Initialisation des données dynamiques
Deux méthodes :
I Directement dans le fichier de modèle.
I Dans un fichier .dat séparé.
Dans le même répertoire que le fichier de modèle, créer un fichier
d’extension .dat où seront stockées les données.
Ce fichier sera lu dans le modèle dans un bloque :
initializations from ‘‘fichier.dat’’
...
end-initializations
Initialisations dans un fichier externe (conseillé)
Hélas la syntaxe est différente, l’affectation est faite par ” :”
I Donner une valeur à un real : r : 0.5
I Initialiser un tableau unidimensionnel (dont on connait les indices
et la taille) :
A1 : [1.2 3.4 2.3] ! A1 : array(1..3) of real;
I Initialiser un ensemble :
S : [‘‘bleu’’ ‘‘jaune’’] ! S: set of string;.
I Initialiser un tableau unidimensionnel indexé par des string :
A2 : [(‘‘bleu’’) 1 (‘‘jaune’’) 3]! A2 : array(S)
of integer;
I Initialiser un tableau multidimensionnel :
A3 : [
(‘‘bleu’’ 1) 1.1 (‘‘jaune’’ 1) 1.7
(‘‘bleu’’ 2) 2.3 (‘‘jaune’’ 2) 4.3]
! A3 : array(S,1..2) of real;
A nouveau
Fichier data.dat
A1 : [1.2 3.4 2.3]
A2 : [(‘‘bleu’’) 1 (‘‘jaune’’) 3]
A3 : [
(‘‘bleu’’ 1) 1.1 (‘‘jaune’’ 1) 1.7
(‘‘bleu’’ 2) 2.3 (‘‘jaune’’ 2) 4.3]
Commandes dans le modèle
initializations from ‘‘data.dat’’
r A1 S A2 A3
end-initializations
Sommer, répéter, itérer
I
I
I
I
Sommer sur un ensemble S prédéfini :
sum(i in S)
Sommer avec une condition :
sum(i in S |i <> 0)
Sommer sur deux ensembles S1 et S2 :
sum(i in S1, j in S2)
Répéter sur un ensemble :
forall( i in S)
Par exemple on peut définir un ensemble de contraintes :
forall(i in S) sum(j in S2) a(i,j)*x(j) <= b(s).
Retour à Pluton
On peut maintenant définir des ensembles et des tableaux pour séparer
les données du modèle.
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
Données
Données
I
L’ensemble des barres produites : {“base”, “extra”}.
Données
I
I
L’ensemble des barres produites : {“base”, “extra”}.
L’ensemble des ingrédients : {“chocolat”, “sucre”}.
Données
I
I
I
L’ensemble des barres produites : {“base”, “extra”}.
L’ensemble des ingrédients : {“chocolat”, “sucre”}.
Un tableau de variables de décision indexé par l’ensemble des barres
Données
I
I
I
I
L’ensemble des barres produites : {“base”, “extra”}.
L’ensemble des ingrédients : {“chocolat”, “sucre”}.
Un tableau de variables de décision indexé par l’ensemble des barres
Un tableau bi-dimensionnel des quantités d’ingrédients nécessaires
pour produire chaque barre.
Données
I
I
I
I
I
L’ensemble des barres produites : {“base”, “extra”}.
L’ensemble des ingrédients : {“chocolat”, “sucre”}.
Un tableau de variables de décision indexé par l’ensemble des barres
Un tableau bi-dimensionnel des quantités d’ingrédients nécessaires
pour produire chaque barre.
Un tableau unidimensionnel des quantités disponibles et des profits.
Fichier données pour Pluton :
http://pageperso.lif.univ-mrs.fr/ pierre.bonami/MASS/Pluton.dat.
Fichier modèle amélioré :
http://pageperso.lif.univ-mrs.fr/ pierre.bonami/MASS/Pluton2.mos