Présentation Cplex

53

description

Exposé sur le logiciel d'optimisation Cplex: cplex intéractif, Cplex callable Library, API Java et le langage de modélisation mathématique OPL.

Transcript of Présentation Cplex

Page 1: Présentation Cplex

Débuter avec CPLEX

OUDANI Mustapha,

Faculté des Sciences et Techniques, Fès,

[email protected],

26 mars 2013

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 1 / 49

Page 2: Présentation Cplex

Plan

1 Introduction

2 Optimiseur intéractif

3 CPLEX Callable Library

4 API Java

5 OPL Studio

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49

Page 3: Présentation Cplex

Plan

1 Introduction

2 Optimiseur intéractif

3 CPLEX Callable Library

4 API Java

5 OPL Studio

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49

Page 4: Présentation Cplex

Plan

1 Introduction

2 Optimiseur intéractif

3 CPLEX Callable Library

4 API Java

5 OPL Studio

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49

Page 5: Présentation Cplex

Plan

1 Introduction

2 Optimiseur intéractif

3 CPLEX Callable Library

4 API Java

5 OPL Studio

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49

Page 6: Présentation Cplex

Plan

1 Introduction

2 Optimiseur intéractif

3 CPLEX Callable Library

4 API Java

5 OPL Studio

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49

Page 7: Présentation Cplex

Introduction

Historique et Applications

Crée par Robert E. Bixby en utilisant le langage C en 1987,

Racheté par ILOG en 1997,

95 % des papiers qui mentionnent un solveur citent CPLEX,

Solveur Standard dans les applications de la chaîne logistique,

Utilisé par plusieurs compagnies aériènnes (Delta, Continental,...),

2004 INFORMS Impact Award.

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 3 / 49

Page 8: Présentation Cplex

Introduction

Problèmes couverts

Programmation linéaire,

Programmation linéaire mixte,

Programmation quadratique,

Programmation mixte quadratique ,

Programmation à contraintes quadratiques,

Programmation mixte à contraintes quadratiques,

Programmes avec des millions de contraines et de variables (versionintégrale).

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 4 / 49

Page 9: Présentation Cplex

Introduction

Algorithmes

Programmation Linéaire :

Simplex Primal

Simplex Dual

Simplex pour les problèmes de �ot

Point intérieur (barrier)

Programmation Quadratique :

Simplex Primal

Simplex Dual

Point intérieur (barrier)

Programmation à Contraintes Quadratiques :

Point intérieur (barrier)

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 5 / 49

Page 10: Présentation Cplex

Introduction

Composantes de CPLEX

On peut utiliser CPLEX sous di�érentes manières :

Mode intéractif,

Cplex Callable Library (bibliothèque en langage C) : utilise les matricespour représenter un problème,

Ilog Concert Technology : utilise les objects et les méthodes pourreprésenter un problème avec les langages de programmation C++,Java, C#...,

Avec un langage de modélisation comme OPL, MPL, AMPL...

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 6 / 49

Page 11: Présentation Cplex

Optimiseur intéractif

Section I : CPLEX en mode intéractif

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 7 / 49

Page 12: Présentation Cplex

Optimiseur intéractif

Utiliser le menu d'aide

→ menu démarrer → Exécuter → taper : cplex

CPLEX accepte les commandes en di�érents formats : on peut taperle nom complet ou sa forme réduite, en majiscule ou en miniscule.

Pour obtenir de l'aideCPLEX> helpouCPLEX> h

Pour obtenir de l'aide à propos d'une commande spéci�que on a lasyntaxe générale : help nom_commande ,exemple :CPLEX> help addCPLEX> help problem

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 8 / 49

Page 13: Présentation Cplex

Optimiseur intéractif

Enter un problème

Souvent, on fait entrer les petits problèmes d'une façon intéractive,pour entrer des problèmes de grande taille, on fait la lecture duproblème à partir d'un �chier.

exemple :Maximiser x1 + 2x2 + 3x3S.C :

−x1 + x2 + x3 ≤ 20

x1 − 3x2 + x3 ≤ 30

0 ≤ x1 ≤ 40

0 ≤ x2 ≤ ∞0 ≤ x3 ≤ ∞

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 9 / 49

Page 14: Présentation Cplex

Optimiseur intéractif

Entrer un problème

Pour entrer un nouveau problèmeCPLEX> enter

On choisit un nom pour notre problème exemple : programme1

On fait entrer le problème dans l'ordre suivant :1 Fonction objectif2 Contraintes3 Bornes

Pour entrer la fonction objectifmaximize (ou max) x1 + 2x2 + 3x3 // ou minimize (min)

On peut nommer nos variables en : voiture, machine, conteneur

On peut utiliser tous les caractères alphanumériques

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 10 / 49

Page 15: Présentation Cplex

Optimiseur intéractif

Entrer un problème

Pour entrer les contraintes on utilise, subject to ou st

st −x1 + x2 + x3 <= 20x1 − 3x2 + x3 <= 30

On peut nommer les contraintes :st temps : −x1 + x2 + x3 <= 20coût : x1 − 3x2 + x3 <= 30

On peut entrer des contraintes longues en utilisant <return>, CPLEXinterprète les lignes multiples comme une seule contrainte :st −x1 + x2+ < return >x3 <= 20 < return >coût : x1 − 3x2 + x3 <= 30

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 11 / 49

Page 16: Présentation Cplex

Optimiseur intéractif

Entrer un problème

Pour entrer les bornes, on utilise bounds :bounds x1 <= 40

Si aucune borne n'est pas entrée, CPLEX donne la valeur 0 pour laborne inférieure et +∞ pour la borne supérieure, donc pour notreproblème on va pas entrer les autres contraintes sur les bornes.

Pour une variable qui prend des valeurs quelconques,bounds

x3 freePour entrer des variables particulières :

Pour les variables entières, on entre generals,exemple :generalsx1Pour les variables binaires, on entre binaries,exemple :binariesx2

Pour �nir l'entrée d'un problème on tape end

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 12 / 49

Page 17: Présentation Cplex

Optimiseur intéractif

A�chage d'un problème

Après la saisie du problème, on peut véri�er que ce dernier a été bienentré, pour cela :CPLEX> display

Une liste d'options apparait. Certaines options concernent la partie dedescription du problème, l'aure concerne la solution. Celle-ci ne peutêtre a�chée qu'après la résolution du problème.problem all

Si le problème est d'une grande taille, son a�chage sur écran estmoins pratique. On peut utiliser l'option stats pour a�cher

1 Le nombre et le type de contraintes2 Variables3 Coe�cients non nuls des contraintes

display problem stats

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 13 / 49

Page 18: Présentation Cplex

Optimiseur intéractif

A�chage d'un problème

Pour a�cher les noms de variables :display problem nom_variable numéro_colonne

Pour numéro_colonne on entre un nombre qui indique le numéro de lacolonne de la variable

On peut a�cher tous les noms des variables en tapant - ou * après lemot variables

Pour a�cher les contraintesdiplay problem nom_contrainteLa fonction objectif est considérée comme la contrainte numéro 0, ellepeut être a�chée également par son nom par défaut obj

Pour a�cher les bornes :display problem bounds 1

display problem bounds -

display problem bounds *

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 14 / 49

Page 19: Présentation Cplex

Optimiseur intéractif

Résolution d'un problème

Pour résoudre un programme linéaire, on peut lancer l'une des cinqcommandes suivantes :

primopt algorithme primal du simplexe

tranopt algorithme dual du simplexe

baropt algorithme de points intérieurs

netopt algorithme primal du simplexe pour les problèmes de �ot

optimize Cplex choisit l'algorithme de résolution

Pour résoudre un programme mixte (linéaire ou quadratique ou àcontraintes quadratiques), on peut utiliser la commande :mipopt nom_problème

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 15 / 49

Page 20: Présentation Cplex

Optimiseur intéractif

Résolution d'un problème

Pour résoudre un probème déja saisi :CPELX> optimize nom_probème

Pour a�cher les informations post-résolution :CPLEX> display solution variables -

Pour a�cher la valeur dual pour chaque contrainte :CPLEX> display solution dual -

On peut aussi a�cher l'analyse de sensibilité de la fonction objectif(Changement de la solution optimale comme réponse aux petitesperturbations des données du problèmes)CPLEX> display sensitivity obj -

ouCPLEX> display sensitivity obj *

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 16 / 49

Page 21: Présentation Cplex

Optimiseur intéractif

Ecriture d'un problème et �chier de solution

Le problème ou sa solution peuvent être enregitrés en utilisant lacommande write

Lorsque vous taper la commande write un message vous demanded'entrer un nom du problème à écrire

Après sélectionner un format du �chier parm une liste de choix,choisissez le format LP

On peut entrer le nom et le type du �chier de problème directementCPLEX> write exemple lp

ouCPLEX> write exemple.lp

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 17 / 49

Page 22: Présentation Cplex

Optimiseur intéractif

Ecriture d'un problème et �chier de solution

La syntaxe générale pour la commande write est :CPLEX> write nom_�chier format_�chier

ouCPLEX> write nom_�chier.extension

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 18 / 49

Page 23: Présentation Cplex

Optimiseur intéractif

Lecture d'un problème à partir d'un �chier

On peut faire entrer souvent un problème par sa lecture à partir d'un�chier au lieu de sa saisie par clavier

Pour lire un lire un exemple d'un �chier LPCPLEX> read

Spéci�er le nom de �chier (exemple)

Entrer le format du �chier : lp

Maintenant le problème est pris en considération en mémoire, et onpeut le manipuler avaec les commandes de CPLEX

La syntaxe générale pour la commande read est :CPLEX> read nom_�chier format_�chier

ouCPLEX> read nom_�chier.extension

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 19 / 49

Page 24: Présentation Cplex

Optimiseur intéractif

Con�gurer les paramètres de CPLEX

L'utilisateur peut changer les paramètres de CPLEX en modi�ant leursvaleurs initiales, pour voir les paramètres con�gurables :CPLEX> set

Une liste de ces paramètres s'a�che, on peut con�gurer l'un d'eux entapant son nom

La syntaxe générale pour la commande set est :CPLEX> set nom_paramètre nouvelle_valeur

Il est possible de recon�gurer tous les paramètres à leurs valeursinitiales par :CPLEX> set defaults

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 20 / 49

Page 25: Présentation Cplex

Cplex Callable Library

Section II :Cplex Callable Library

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 21 / 49

Page 26: Présentation Cplex

Cplex Callable Library

Introduction

La Cplex Callable Library est un ensemble de fonctions prédé�nies decplex,

Cplex Callable Library utilise les matrices creuses pour représenter unproblème,

Ces fonctions prédé�nies de Cplex commencent par le pré�xe CPX

Nous allons se baser sur l'exemple mipex1.c pour l'explication desdi�érentes instructions de la Callabe Library

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 22 / 49

Page 27: Présentation Cplex

Cplex Callable Library

Paramètres de gestion de Cplex

#de�ne NUMROWS 3 (nombre de contraintes)#de�ne NUMCOLS 4 (nombre de de variables)#de�ne NUMNZ 9 (nombre de coe�cients 6= 0 de la matrice descontraintes)char *probname = NULL ; (nom du problème)int numcols ;(nombre colonnes)int numrow ; (nombre de lignes)int objsen ; ( le sens de l'objectif)double *obj = NULL ; (tableau des coe�cients de l'objectif)double *rhs = NULL ; (tableau des second membres)char *sense = NULL ; (le sens des contraintes)

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 23 / 49

Page 28: Présentation Cplex

Cplex Callable Library

Paramètres de gestion de Cplex

int *matbeg = NULL ; (marque le début de chaque colonne des matrices decontraintes)int *matcnt = NULL ; (nombre des éléments non nuls par colonne)int *matind = NULL ; (indice de lignes des éléments non nuls)double *matval = NULL ; (les éléments non nuls)double *lb = NULL ; (bornes inférieurs)double *ub = NULL ; (bornes supérieures)char *ctype = NULL ; (types des variables)int solstat ;(statut de la solution)double objval ; (valeur de l'objectif)double x[NUMCOLS] ; (variables)double slack[NUMROWS] ;(variables d'ecart)

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 24 / 49

Page 29: Présentation Cplex

Cplex Callable Library

Ouverture de Cplex

CPXENVptr env=0 ; Pointeur sur l'environnement CplexCPXLPptr lp=0 ; Pointeur sur la structure contenant PLint status ; Récupère le code d'une éventuelle erreur Cplex, status=0 si iln'y a pas d'erreur 1 sinon.env = CPXopenCPLEX (&status) ;Cette fonction permet l'ouverture de l'environement Cplex, elle stocke laraison d'une éventuelle erreur dans status

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 25 / 49

Page 30: Présentation Cplex

Cplex Callable Library

Fonctions Cplex

status = CPXsetintparam (env, CPX_PARAM_SCRIND, CPX_ON) ;Cette fonction permet la modi�cation des paramètres de cplex

status = setproblemdata (&probname, &numcols, &numrows,&objsen, &obj, &rhs, &sense, &matbeg, &matcnt, &matind,&matval, &lb, &ub, &ctype) ;Cette fonction permet de saisir les données du problème, elle seradétaillée plus loin.

lp = CPXcreateprob (env, &status, probname) ;Cette fonction permet la création du problème.

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 26 / 49

Page 31: Présentation Cplex

Cplex Callable Library

Fonctions Cplex

status = CPXcopylp (env, lp, numcols, numrows, objsen, obj,rhs,sense, matbeg, matcnt, matind, matval, lb, ub, NULL) ;Cette fonction permet de copier le problème.

status = CPXcopyctype (env, lp, ctype) ;Elle permet de copier le tableau ctype.

status = CPXmipopt (env, lp) ;Fonction d'optimisation.

solstat = CPXgetstat (env, lp) ;Fonction statut de la solution.

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 27 / 49

Page 32: Présentation Cplex

Cplex Callable Library

Fonctions Cplex

status = CPXgetobjval (env, lp, &objval) ;Obtenir la valeur de l'objectif.

status = CPXgetx (env, lp, x, 0, cur_numcols-1) ;Obtenir les valeurs des variables.

status = CPXgetslack (env, lp, slack, 0, cur_numrows-1) ;Obtenir les valeurs des variables d'écarts.

status = CPXwriteprob (env, lp, "mipex1.lp", NULL) ;Ecrire une copie de problème sous format lp.

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 28 / 49

Page 33: Présentation Cplex

Cplex Callable Library

Saisie de données

Le problème à résoudre est :Maximizeobj : x1 + 2 x2 + 3 x3 + x4Subject Toc1 : - x1 + x2 + x3 + 10x4 <= 20c2 : x1 - 3 x2 + x3 <= 30c3 : x2 - 3.5x4 = 0Bounds0 <= x1 <= 402 <= x4 <= 3Integersx4End

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 29 / 49

Page 34: Présentation Cplex

Cplex Callable Library

Saisie de données

Les coe�cients de la fonction objectif :zobj[0] = 1.0 ; zobj[1] = 2.0 ; zobj[2] = 3.0 ; zobj[3] = 1.0 ;Les débuts de colonnes de la matrice des contraintes :zmatbeg[0] = 0 ; zmatbeg[1] = 2 ; zmatbeg[2] = 5 ; zmatbeg[3] = 7 ;Le nombre des éléments non nuls par chaque colonne :zmatcnt[0] = 2 ; zmatcnt[1] = 3 ; zmatcnt[2] = 2 ; zmatcnt[3] = 2 ;L'indice ligne de chaque éléments non nul :zmatind[0] = 0 ; zmatind[2] = 0 ; zmatind[5] = 0 ; zmatind[7] = 0 ;zmatind[1] = 1 ; zmatind[3] = 1 ; zmatind[6] = 1 ;zmatind[4] = 2 ;zmatind[8] = 2 ;La valeur des éléments non nuls :zmatval[0] = -1.0 ; zmatval[2] = 1.0 ; zmatval[5] = 1.0 ; zmatval[7] = 10.0 ;zmatval[1] = 1.0 ; zmatval[3] = -3.0 ; zmatval[6] = 1.0 ;zmatval[4] = 1.0 ;zmatval[8] = -3.5 ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 30 / 49

Page 35: Présentation Cplex

Cplex Callable Library

Saisie de données

Bornes supérieures et bornes inférieures :zlb[0] = 0.0 ; zlb[1] = 0.0 ; zlb[2] = 0.0 ; zlb[3] = 2.0 ;zub[0] = 40.0 ; zub[1] = CPX_INFBOUND ; zub[2] = CPX_INFBOUND ;zub[3] = 3.0 ;Types de variables :zctype[0] = 'C' ; zctype[1] = 'C' ; zctype[2] = 'C' ; zctype[3] = 'I' ;C=Continu,I=Integer, B=BinarySens des contraintes :zsense[0] = 'L' ;zsense[0] = 'L' ;zsense[0] = 'E' ;L=Low,E=Equal,G=Great,Seconds menmbres :zrhs[0] = 20.0 ;zrhs[1] = 30.0 ;zrhs[2] = 0.0 ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 31 / 49

Page 36: Présentation Cplex

API Java

Section III : API Java

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 32 / 49

Page 37: Présentation Cplex

API Java

introduction

L'API Java utilise les objets et les méthodes pour représenter unproblème,

Commencer par la création d'un nouveau Java Project

Ajouter cplex.jar lors de la création du votre projet (Libraries → AddExternal JARs)

Pour utiliser les interfaces Java ILOG CPLEX, vous devez importer lesdeux packages :import ilog.concert *. ;

import ilog.cplex *. ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 33 / 49

Page 38: Présentation Cplex

API Java

Création d'objets Ilocplex

On crée un objet (une instance) de type IloCplex (qui implémentel'interface IloMPModeler, et donc l'interface IloModeler). Exemple :IloCplex modele = new IloCplex() ;

Tous les appels au solveur (dé�nition de la fonction économique et descontraintes du modèle à résoudre, résolution, a�chage de la solution)vont se faire via cet objet.

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 34 / 49

Page 39: Présentation Cplex

API Java

Variables

Les variables sont des objets de type soit :

IloNumVar (variables quelconques)IloIntVar (variables entières)

Chacun de ces objets, pour être intégré au modèle courant (modele),doit ensuite être dé�ni ainsi :

var1 = modele.numVar(borne_inf, borne_sup, type) ; écrituregenerique pour une variable var1var2 = modele.intVar(borne_inf, borne_sup) ;écriture pour unevariable var2 entièrevar3 = modele.boolVar() ; écriture pour une variable 0-1 var3

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 35 / 49

Page 40: Présentation Cplex

API Java

Variables

Si une variable réelle n'a pas :

De borne inf.borne_inf = -Double.MAX_VALUE

De borne sup.borne_sup = Double.MAX_VALUE

Possibilité de dé�nir des tableaux de variables via model.numVarArray(ou model.intVarArray ou model.boolVarArray)

Paramètre type vaut IloNumVarType.Int (variable entière) ouIloNumVarType.Float (variable réelle)

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 36 / 49

Page 41: Présentation Cplex

API Java

Les expressions

Une expression est une combinaison de variables : Somme, di�érence,multiplication par des coe�cients...

Une expression est un objet de type IloNumExpr

Exemple : Pour écrire : x1 + 2x2expr = modele.sum(x1, modele.prod(2.0, x2)) ;Pour chaque opération (+, -, *, /, etc.), on utilise une instructiondédiée :

Opération " somme " : modele.sum(...)Opération " produit " : modele.prod(...)Opération " di�érence " : modele.di�(...)Opération " négation " : modele.negative(...)Opération " élever au carré " : modele.square(...)

Pour exprimer une expression linéaire, on peut utiliser le produitscalaire :IloLinearNumExpr lin = modele.scalProd(vectcoef, var) ; ou vectcoef

est le vecteur des coe�cients, et var est le vecteur des variables.

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 37 / 49

Page 42: Présentation Cplex

API Java

Contraintes

Les contraintes sont des objets de type IloRange

Une contrainte ctr se dé�nit à partir d'une expression expr. Exemple :IloRange ctr = modele.range(borne_inf, expr, borne_sup) ;

On peut aussi utiliser :

IloRange le = modele.Le(expr, borne_sup) ; //contrainte en ≤IloRange ge = modele.Ge(expr, borne_inf) ; //contrainte en ≥IloRange eq = modele.Eq(expr, borne_sup) ; //contrainte en =

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 38 / 49

Page 43: Présentation Cplex

API Java

Contraintes

Pour ajouter une contrainte on utilise :

modele.addLe(linExpr, borne_sup) ; //contrainte en ≤modele.addGe(linExpr, borne_inf) ; //contrainte en ≥modele.addEq(linExpr, 2nd_membre) ; //contrainte en =

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 39 / 49

Page 44: Présentation Cplex

API Java

Fonction objectif

Pour ajouter la fonction économique :modele.addMaximize(lin) ; oumodele.addMinimize(lin) ;

Pour la récupération de la valeur optimale modele.getObjValue() ;

Pour la récupération de la solution optimale modele.getValue(var1) ;

ou modele.getValues(tab_vars) ;

Pour obtenir le status modele.getStatus() ; et en�n pour fermer l'accèsau solveur : modele.end() ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 40 / 49

Page 45: Présentation Cplex

OPL, une brève description

Section IV : OPL, une brève description

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 41 / 49

Page 46: Présentation Cplex

OPL, une brève description

Introduction

OPL=Optimization Programming Language,

OPL est un langage de haut niveau pour la description desprogrammes mathématiques,

OPL est un langage d'ILOG, OPL Studio est un EDI (Environnementde Développement Intégré)

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 42 / 49

Page 47: Présentation Cplex

OPL, une brève description

Manipulation de CPLEX Studio IDE

On peut lancer CPLEX Studio IDE d'après le menu démarrer,

Commencer par créer un nouveau projet, en cliquant sur Fichier →Nouveau→ Projet OPL

Pour insérer un nouveau modèle au projet (d'extension .mod), cliqueravec le bouton droit, sur le projet puis choisir Nouveau→ Modèle

Pour insérer un �chier de données au projet (d'extension .dat), cliqueravec le bouton droit, sur le projet puis choisir Nouveau→ Données

Pour exécuter un modèle (.mod) associé à un �chier de données(.dat), il faut créer une con�guration d'exécution

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 43 / 49

Page 48: Présentation Cplex

OPL, une brève description

Manipulation de CPLEX Studio IDE

Pour créer une nouvelle con�guration, cliquer avec le bouton droit, surle projet puis choisir Nouveau→ Con�guration d'exécution

Glisser les deux �chiers modèle (.mod) et données (.dat) vers lanouvelle con�guration créee,

Pour exécuter une con�guration , cliquer avec le bouton droit sur lacon�guration d'exécution, puis choisir Exécuter cette con�guration

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 44 / 49

Page 49: Présentation Cplex

OPL, une brève description

Structure de modèles OPL

Un modèle OPL se présente sous la forme suivante :<Type de la constante> <Nom de la constante> =... ;dvar <Type de la variable de décision> <Nom de la variable de décision> ;minimize (ou maximize)<Fonction objectif>subject to {<Contrainte 1> ;<Contrainte 2> ;...<Contrainte n> ;} ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 45 / 49

Page 50: Présentation Cplex

OPL, une brève description

Exemples de modèles OPL : problème de transport

Le problème de transport se modélise en OPL comme suit (�chier .mod) :{string} usines=... ;{string} clients=... ;int nbr_usines=... ;int nbr_clients=... ;�oat cout[usines][clients]=... ;�oat demande[clients]=... ;�oat o�re[usines]=... ;dvar �oat+ x[usines][clients] ;minimize sum (i in usines, j in clients) cout[i][j]*x[i][j] ;subject to {forall (i in usines) contProduction :sum (j in clients) x[i][j]<=o�re[i] ;forall (j in clients) contdemande :sum (i in usines) x[i][j]>=demande[j] ;} ;Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 46 / 49

Page 51: Présentation Cplex

OPL, une brève description

Exemples de modèles OPL : problème de transport

Le �chier de données (.dat) initialise les constantes déclarées dans le �chiermodèle (.mod) :nbr_usines=3 ;nbr_clients=4 ;usines={"1","2","3"} ;clients={"1","2","3","4"} ;o�re=[35,50,40] ;demande=[45,20,30,30] ;cout=[[8,6,10,9],[9,12,13,7],[14,9,16,5]] ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 47 / 49

Page 52: Présentation Cplex

OPL, une brève description

Exemples de modèles OPL : problème de sac à dos

Le problème de sac à dos se modélise en OPL comme suit (�chier .mod) :int n=... ;int pro�t[1..n] =... ;int poids[1..n] =... ;int poidmax=... ;dvar int x[1..n] ;maximizesum(i in 1..n) pro�t[i] * x[i] ;subject to {sum(i in 1..n) poids[i] * x[i] <= poidmax ;} ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 48 / 49

Page 53: Présentation Cplex

OPL, une brève description

Exemples de modèles OPL : problème de sac à dos

Le �chier de données (.dat) initialise les constantes déclarées dans le �chiermodèle (.mod) :n=3 ; poidmax=59 ;pro�t = [10, 11, 13] ;poids= [10, 12, 13] ;

Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 49 / 49