2. Le logiciel MPL Xavier.Gandibleux@Univ-Valenciennes.fr 1
Contenu et organisation Présentation de MPL l environnement, le langage, une première session Modèle explicite modélisation du problème sous MPL en explicite, variation autour des paramètres, récupération/formatage des résultats, interprétation des résultats Modèle implicite modélisation du problème sous MPL en implicite, données internes et externes Compléments les fonctions disponibles sous MPL 2
Présentation de MPL 3
Présentation de MPL Votre première session MPL : exécuter MPL sur un modèle simple; 4 étapes Etape 1 : démarrer MPL Etape 2 : charger le fichier modèle Etape 3 : résoudre le modèle Etape 4 : examiner la solution 4
Etape 1 : Démarrer MPL Sélectionner MPL for windows dans le menu de démarrage 5
Résultat de l'étape 1 : L'écran d'accueil de MPL 6
Etape 2 : charger le fichier modèle dans MPL Sélectionner open dans le menu file afin d'accéder au menu de dialogue Sélectionner le fichier modèle model1.mpl comme suit : Résultat : fichier modèle chargé dans l'environnement MPL 7
8
Si le modèle contient des erreurs... 9
Etape 3 : Résoudre le modèle Choisir le solveur, par exemple CPLEX, dans le menu run MPL informe l'utilisateur sur l'évolution du processus de résolution 10
Option de réglages du solveur 11
Etape 4 : visualisation de la solution Sélectionner le bouton View apparent sur la fenêtre présentée durant la résolution Toutes les informations concernant la résolution sont présentées : 12
Option pour formater les résultats 13
Etape 5 : Examen des différents éléments du modèle Sélectionner Model definition dans le menu View Choisir la variable Produce par exemple : 14
Résultat de l'étape 5 : Les valeurs de la solution pour la variable Produce... 15
Utiliser le système d'aide de MPL A tout moment, l'aide est disponible dans le menu help 16
Aussi une aide contextuelle 17
18
Depuis un modèle explicite, vers un modèle implicite 19
Localisation de sites Quel que soit le secteur où vous habitez, SuperBurger a un restaurant près de chez vous! 3 9 1 10 2 8 4 5 7 6 Combien de restaurant ouvrir et où? Réponse : 2 en 3 et 7 Problèmes difficiles; au pire : n=5 32 possibilités n=50 1 125 899 906 842 624 pos. n=500 3,27 E150 possibilités 20
{ Modèle d'un SCP in extenso -- X. Gandibleux } TITLE SCP DECISION X1, X2, X3, X4, X5, X6, X7, X8, X9, X10; MODEL MIN z = X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10; END SUBJECT TO ctecouverture0 : X1 + X2 + X3 >= 1 ; ctecouverture1 : X1 + X2 + X3 + X4 + X5 + X7 + X10 >= 1 ; ctecouverture2 : X1 + X2 + X3 + X9 + X10 >= 1 ; ctecouverture3 : X2 + X4 + X7 + X8 + X10 >= 1 ; ctecouverture4 : X2 + X5 + X6 + X7 >= 1 ; ctecouverture5 : X5 + X6 + X7 >= 1 ; ctecouverture6 : X2 + X4 + X5 + X6 + X7 + X8 >= 1 ; ctecouverture7 : X4 + X7 + X8 + X9 + X10 >= 1 ; ctecouverture8 : X3 + X8 + X9 + X10 >= 1 ; ctecouverture9 : X2 + X3 + X4 + X8 + X9 + X10 >= 1 ; BINARY X1, X2, X3, X4, X5, X6, X7, X8, X9, X10; 21
{ Modèle d'un SCP version implicite 1 -- X. Gandibleux} TITLE SCP INDEX i := 1..10; {ensembles, i=1..n} DECISION MODEL X[i]; MIN z = sum(i: X[i]); SUBJECT TO ctecouverture0 : X[1] + X[2] + X[3] >= 1 ; ctecouverture1 : X[1] + X[2] + X[3] + X[4] + X[5] + X[7] + X[10] >= 1 ; ctecouverture2 : X[1] + X[2] + X[3] + X[9] + X[10] >= 1 ; ctecouverture3 : X[2] + X[4] + X[7] + X[8] + X[10] >= 1 ; ctecouverture4 : X[2] + X[5] + X[6] + X[7] >= 1 ; ctecouverture5 : X[5] + X[6] + X[7] >= 1 ; ctecouverture6 : X[2] + X[4] + X[5] + X[6] + X[7] + X[8] >= 1 ; ctecouverture7 : X[4] + X[7] + X[8] + X[9] + X[10] >= 1 ; ctecouverture8 : X[3] + X[8] + X[9] + X[10] >= 1 ; ctecouverture9 : X[2] + X[3] + X[4] + X[8] + X[9] + X[10] >= 1 ; BINARY X[i]; END 22
{ Modèle d'un SCP version implicite 2 -- X. Gandibleux} TITLE SCP_Implicite2 INDEX i := 1..10; {ensembles, i=1..n} l := 0..9; {sommets, l=1..k} DATA A[l,i] := (1,1,1,0,0,0,0,0,0,0, 1,1,1,1,1,0,1,0,0,1, 1,1,1,0,0,0,0,0,1,1, 0,1,0,1,0,0,1,1,0,1, 0,1,0,0,1,1,1,0,0,0, 0,0,0,0,1,1,1,0,0,0, 0,1,0,1,1,1,1,1,0,0, 0,0,0,1,0,0,1,1,1,1, 0,0,1,0,0,0,0,1,1,1, 0,1,1,1,0,0,0,1,1,1); DECISION MODEL X[i]; MIN z = sum(i: X[i]); SUBJECT TO ctecouverture0 : sum(i: A[0,i] * X[i]) >= 1 ; ctecouverture1 : sum(i: A[1,i] * X[i]) >= 1 ; ctecouverture2 : sum(i: A[2,i] * X[i]) >= 1 ; ctecouverture3 : sum(i: A[3,i] * X[i]) >= 1 ; ctecouverture4 : sum(i: A[4,i] * X[i]) >= 1 ; ctecouverture5 : sum(i: A[5,i] * X[i]) >= 1 ; ctecouverture6 : sum(i: A[6,i] * X[i]) >= 1 ; ctecouverture7 : sum(i: A[7,i] * X[i]) >= 1 ; ctecouverture8 : sum(i: A[8,i] * X[i]) >= 1 ; ctecouverture9 : sum(i: A[9,i] * X[i]) >= 1 ; BINARY X[i]; END 23
{ Modèle d'un SCP version implicite 3 -- X. Gandibleux} TITLE SCP_Implicite3 INDEX i := 1..10; {ensembles, i=1..n} l := 0..9; {sommets, l=1..k} DATA C[i] := (1,1,1,1,1,1,1,1,1,1); {vecteur objectif} A[l,i] := (1,1,1,0,0,0,0,0,0,0, 1,1,1,1,1,0,1,0,0,1, 1,1,1,0,0,0,0,0,1,1, 0,1,0,1,0,0,1,1,0,1, 0,1,0,0,1,1,1,0,0,0, 0,0,0,0,1,1,1,0,0,0, 0,1,0,1,1,1,1,1,0,0, 0,0,0,1,0,0,1,1,1,1, 0,0,1,0,0,0,0,1,1,1, 0,1,1,1,0,0,0,1,1,1); {matrice des contraintes} DECISION MODEL X[i]; MIN z = SUM( i : C[i] * X[i]); SUBJECT TO ctecouverture[l] : SUM( i : A[l,i] * X[i]) >= 1 ; END BINARY X[i]; 24
{ Modèle d'un SCP version implicite 4 -- X. Gandibleux} TITLE SCP_Implicite4 INDEX i := 1..10; {ensembles, i=1..n} l := 0..9; {sommets, l=1..k} DATA C[i] := (1,1,1,1,1,1,1,1,1,1); {vecteur objectif} A[l,i] := SPARSEFILE("scp10.crt"); {matrice des contraintes} DECISION MODEL X[i]; MIN z = SUM( i : C[i] * X[i]); SUBJECT TO ctecouverture[l] : SUM( i : A[l,i] * X[i]) >= 1 ; BINARY X[i]; END scp10.crt 0, 1, 1 0, 2, 1 0, 3, 1 1, 1, 1 1, 2, 1 1, 3, 1 1, 4, 1 1, 5, 1 1, 7, 1 1, 10, 1 2, 1, 1 2, 2, 1 2, 3, 1 2, 9, 1 25
{ Modèle d'un SCP version implicite 5 -- X. Gandibleux} TITLE SCP_Implicite5 INDEX i := INDEXFILE("scp10i.idx"); {ensembles, i=1..n} l := INDEXFILE("scp10l.idx"); {sommets, l=1..k} DATA C[i] := DATAFILE("scp10.fct"); {vecteur objectif} A[l,i] := SPARSEFILE("scp10.crt"); {matrice des contraintes} DECISION X[i]; MODEL MIN z = SUM( i : C[i] * X[i]); SUBJECT TO ctecouverture[l] : SUM( i : A[l,i] * X[i]) >= 1 ; BINARY X[i]; END scp10i.idx scp10.fct scp10.crt 1 2 3 4 5 6 7 8 9 10 scp10l.idx 0 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 0, 1, 1 0, 2, 1 0, 3, 1 1, 1, 1 1, 2, 1 1, 3, 1 1, 4, 1 1, 5, 1 1, 7, 1 1, 10, 1 2, 1, 1 2, 2, 1 2, 3, 1 2, 9, 1 26
MPL Modeling System - Copyright (c) 1988-1998, Maximal Software, Inc. -------------------------------------------------------------------------------- MODEL STATISTICS Problem name: SCP_Implicite6 Filename: SCP_Implicite6.mpl Date: October 27, 2000 Time: 14:34 Parsing time: 0.22 sec Solver: CPLEX 300 Objective value: 2.00000000000 Iterations: 5 Solution time: 0.11 sec Constraints: 10 Variables: 10 Nonzeros: 48 Density: 48 % SOLUTION RESULT Optimal solution found MIN z = 2.0000 DECISION VARIABLES VARIABLE X[i] : END i Activity ----------------------- 1 0.0000 2 0.0000 3 1.0000 4 0.0000 5 0.0000 6 0.0000 7 1.0000 8 0.0000 9 0.0000 10 0.0000 ----------------------- 27