29 0 236KB
Utilisation du solveur IBM-Cplex via le format LP et le langage de modélisation OPL
ECMA Semaine du 10 décembre 2012 Dans ce TP, nous présentons l'utilisation du solveur de programmes mathématiques appelé IBM-Cplex. Ce solveur est un logiciel propriétaire, qui permet de résoudre des programmes dont la fonction à optimiser est soit linéaire, soit quadratique et convexe (dans le cas d'une minimisation), et où les variables peuvent prendre soit des valeurs entières, soit des valeurs continues.
Avant de commencer :
1. Téléchargez le solveur IBM-Cplex à l'adresse suivante :
MPRO/ECMA/sources/sources_cp.exe.
http://cedric.cnam.fr/~lamberta/
2. Installez le solveur. 3. La documentation du langage de modélisation OPL se trouve à l'adresse suivante :
//cedric.cnam.fr/~lamberta/MPRO/ECMA/doc/oplTutorial.pdf.
http:
4. Les exemples en OPL se trouvent dans le répertoire
C:\Program Files (x86)\IBM\ILOG\CPLEX_Studio125\opl\examples\
5. Les exemples en format LP se trouvent dans le répertoire
C:\Program Files (x86)\IBM\ILOG\CPLEX_Studio125\cplex\examples\data\
6. Le chemin de l'exécutable Cplex est le suivant
C:\Program Files (x86)\IBM\ILOG\CPLEX_Studio125\cplex\bin\x86_win32\cplex.exe
1 Utilisation du solveur linéaire de IBM-Cplex pour exécuter des chiers au format LP
Le format de chier LP :
Le format de chier LP permet d'écrire une instance d'un problème mathématique. Ce chier peut
cplex.exe, toto.lp :
être exécuté via le terminal. Plus précisément, après avoir lancé l'exécutable saisir les commandes suivantes pour exécuter le chier nommé par exemple
il faut
CP LEX > read toto.lp CP LEX > opt
La syntaxe du format de chier LP
En général :
Les commentaires sont précédés d'un backslash, et peuvent être placés n'im-
porte où dans le chier. Les mots clés doivent être en début de ligne.
Début de chier : "Min"
ou
"Max",
Les variables : 0-9)
Le chier doit commencer par le mot clé
"Minimize", "Maximize",
où la casse n'a pas d'importance. Les variables sont nommées par une chaîne alphanumérique
ou un de ces symboles !
" # $ % & ( ) / , .;? @ _ { } ` ' |
(a-z, A-Z,
n'excédant pas
16 caractères, et ne peut commencer par une période ou un chire. Les caractères ˆ, sont interdits dans les noms de variables. La lettre valides, ou par une autre lettre
E,
ou
e,
E,
ou
e,
∗, [
et
]
seule ou suivie par des symboles
est interdite car cette notation est réservée pour
l'exponentielle. Ainsi, les noms de variables suivants sont interdits :
1
e9, E-24, E8cats,
etc.
La fonction objectif : Minimize/Maximize
La dénition de la fonction objectif doit suivre les mots clés
et peut être saisie sur plusieurs lignes tant que ni une variable, ni une
constante, ni une indication de sens n'est coupée par un retour à la ligne. Par exemple, la fonction objectif
1x1 + 2x2 + 3x3
x1 + 2x2 + 3x3
peut être saisie de la façon suivante :
mais non comme ça
1x1 + 2x 2 + 3x3
La fonction objectif doit être nommée en la faisant précéder d'un nom suivi de deux points ( : ), et le nom et les deux points ( : ) doivent apparaître sur la même ligne. Le nom de la
Attention :
fonction objectif doit être déni en suivant les mêmes règles que pour les noms de variables. si la fonction objectif est quadratique, les termes quadratiques doivent être
multipliés par deux, placés entre crochets [ et ], puis divisés par deux (après le crochet refermant). Par exemple, la fonction objectif quadratique suivante
max x1 + 2x2 + x21 + 3x1 x2 s'écrira :
Maximize obj: x1 + 2x2 + [2x1*x1+6x1*x2]/2
Les contraintes :
La section dénissant les contraintes doit commencer par le mot clé
Subject to, S.T., ou ST. où la casse n'a pas d'importance. Chaque dénition de contrainte
doit commencer sur une nouvelle ligne. Une contrainte doit être nommée en entrant un nom et deux points ( : ) avant la contrainte, et le nom et les deux points ( : ) doivent apparaître sur la même ligne. Le nom de chaque contrainte doit être déni en suivant les mêmes règles que pour les noms de variables. Si aucun nom n'est assigné aux contraintes, le solveur les nommera
R1, R2, R3,
etc. Une contrainte doit être suivie par une indication sur
son sens et un coecient, qui est son membre de droite. Ces deux éléments doivent être saisis sur la même ligne. Les sens possibles sont
time: x1 + x2 0, x4 ∈ N
peut être saisi au format LP de la façon suivante :
Maximize obj: x1 + 2 x2 + 3 x3 + x4 Subject To c1: - x1 + x2 + x3 + 10 x4