Vous êtes sur la page 1sur 53

Dbuter avec CPLEX

OUDANI Mustapha, Facult des Sciences et Techniques, Fs, oudani.mustapha@gmail.com,


26 mars 2013

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

1 / 49

Plan

Introduction Optimiseur intractif CPLEX Callable Library API Java OPL Studio

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

2 / 49

Plan

Introduction Optimiseur intractif CPLEX Callable Library API Java OPL Studio

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

2 / 49

Plan

Introduction Optimiseur intractif CPLEX Callable Library API Java OPL Studio

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

2 / 49

Plan

Introduction Optimiseur intractif CPLEX Callable Library API Java OPL Studio

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

2 / 49

Plan

Introduction Optimiseur intractif CPLEX Callable Library API Java OPL Studio

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

2 / 49

Introduction

Historique et Applications

Cre 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 chane logistique, Utilis par plusieurs compagnies arinnes (Delta, Continental,...), 2004 INFORMS Impact Award.

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

3 / 49

Introduction

Problmes couverts

Programmation linaire, Programmation linaire mixte, Programmation quadratique, Programmation mixte quadratique , Programmation contraintes quadratiques, Programmation mixte contraintes quadratiques, Programmes avec des millions de contraines et de variables (version intgrale).

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

4 / 49

Introduction

Algorithmes
Programmation Linaire : Simplex Primal Simplex Dual Simplex pour les problmes de ot Point intrieur (barrier) Programmation Quadratique : Simplex Primal Simplex Dual Point intrieur (barrier) Programmation Contraintes Quadratiques : Point intrieur (barrier)
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

5 / 49

Introduction

Composantes de CPLEX

On peut utiliser CPLEX sous direntes manires : Mode intractif, Cplex Callable Library (bibliothque en langage C) : utilise les matrices pour reprsenter un problme, Ilog Concert Technology : utilise les objects et les mthodes pour reprsenter un problme avec les langages de programmation C++, Java, C#..., Avec un langage de modlisation comme OPL, MPL, AMPL...

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

6 / 49

Optimiseur intractif

Section I : CPLEX en mode intractif

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

7 / 49

Optimiseur intractif

Utiliser le menu d'aide


menu dmarrer Excuter taper : cplex

CPLEX accepte les commandes en dirents formats : on peut taper le nom complet ou sa forme rduite, en majiscule ou en miniscule. Pour obtenir de l'aide CPLEX> help ou CPLEX> h Pour obtenir de l'aide propos d'une commande spcique on a la syntaxe gnrale : help nom_commande ,exemple : CPLEX> help add CPLEX> help problem

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

8 / 49

Optimiseur intractif

Enter un problme
Souvent, on fait entrer les petits problmes d'une faon intractive, pour entrer des problmes de grande taille, on fait la lecture du problme partir d'un chier. exemple : Maximiser x1 + 2x2 + 3x3 S.C : x1 + x2 + x3 20 x1 3x2 + x3 30 0 x1 40 0 x2 0 x3
Dbuter avec CPLEX

Prsent par OUDANI Mustapha

26 mars 2013

9 / 49

Optimiseur intractif

Entrer un problme
Pour entrer un nouveau problme CPLEX> enter On choisit un nom pour notre problme exemple : programme1 On fait entrer le problme dans l'ordre suivant :
1 2 3

Fonction objectif Contraintes Bornes

Pour entrer la fonction objectif maximize (ou max) x1 + 2x2 + 3x3 // ou minimize (min) On peut nommer nos variables en : voiture, machine, conteneur On peut utiliser tous les caractres alphanumriques

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

10 / 49

Optimiseur intractif

Entrer un problme
Pour entrer les contraintes on utilise, subject to ou st st x1 + x2 + x3 <= 20 x1 3x2 + x3 <= 30 On peut nommer les contraintes : st temps : x1 + x2 + x3 <= 20 cot : x1 3x2 + x3 <= 30 On peut entrer des contraintes longues en utilisant <return>, CPLEX interprte les lignes multiples comme une seule contrainte : st x1 + x2 + < return > x3 <= 20 < return > cot : x1 3x2 + x3 <= 30

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

11 / 49

Optimiseur intractif

Entrer un problme
Pour entrer les bornes, on utilise bounds : bounds x1 <= 40 Si aucune borne n'est pas entre, CPLEX donne la valeur 0 pour la borne infrieure et + pour la borne suprieure, donc pour notre problme on va pas entrer les autres contraintes sur les bornes. Pour une variable qui prend des valeurs quelconques,
bounds x3 free

Pour entrer des variables particulires :


generals x1

Pour les variables entires, on entre generals,exemple : Pour les variables binaires, on entre binaries,exemple :
binaries x2

Pour nir l'entre d'un problme on tape end


Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

12 / 49

Optimiseur intractif

Achage d'un problme


Aprs la saisie du problme, on peut vrier que ce dernier a t bien entr, pour cela : CPLEX> display Une liste d'options apparait. Certaines options concernent la partie de description du problme, l'aure concerne la solution. Celle-ci ne peut tre ache qu'aprs la rsolution du problme.
problem all

Si le problme est d'une grande taille, son achage sur cran est moins pratique. On peut utiliser l'option stats pour acher
Le nombre et le type de contraintes Variables Coecients non nuls des contraintes display problem stats
1 2 3 Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

13 / 49

Optimiseur intractif

Achage d'un problme


Pour acher les noms de variables :
display problem nom_variable numro_colonne Pour numro_colonne on entre un nombre qui indique le numro de la

colonne de la variable On peut acher tous les noms des variables en tapant - ou * aprs le mot variables Pour acher les contraintes diplay problem nom_contrainte La fonction objectif est considre comme la contrainte numro 0, elle peut tre ache galement par son nom par dfaut obj Pour acher les bornes :
display problem bounds 1 display problem bounds display problem bounds *
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

14 / 49

Optimiseur intractif

Rsolution d'un problme


Pour rsoudre un programme linaire, on peut lancer l'une des cinq commandes suivantes : primopt algorithme primal du simplexe tranopt algorithme dual du simplexe baropt algorithme de points intrieurs netopt algorithme primal du simplexe pour les problmes de ot optimize Cplex choisit l'algorithme de rsolution Pour rsoudre un programme mixte (linaire ou quadratique ou contraintes quadratiques), on peut utiliser la commande : mipopt nom_problme

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

15 / 49

Optimiseur intractif

Rsolution d'un problme


Pour rsoudre un probme dja saisi : CPELX> optimize nom_probme Pour acher les informations post-rsolution : CPLEX> display solution variables Pour acher la valeur dual pour chaque contrainte : CPLEX> display solution dual On peut aussi acher l'analyse de sensibilit de la fonction objectif (Changement de la solution optimale comme rponse aux petites perturbations des donnes du problmes) CPLEX> display sensitivity obj ou CPLEX> display sensitivity obj *
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

16 / 49

Optimiseur intractif

Ecriture d'un problme et chier de solution

Le problme ou sa solution peuvent tre enregitrs en utilisant la commande write Lorsque vous taper la commande write un message vous demande d'entrer un nom du problme crire Aprs slectionner un format du chier parm une liste de choix, choisissez le format LP On peut entrer le nom et le type du chier de problme directement CPLEX> write exemple lp ou CPLEX> write exemple.lp

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

17 / 49

Optimiseur intractif

Ecriture d'un problme et chier de solution

La syntaxe gnrale pour la commande write est : CPLEX> write nom_chier format_chier ou CPLEX> write nom_chier.extension

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

18 / 49

Optimiseur intractif

Lecture d'un problme partir d'un chier


On peut faire entrer souvent un problme par sa lecture partir d'un chier au lieu de sa saisie par clavier Pour lire un lire un exemple d'un chier LP CPLEX> read Spcier le nom de chier (exemple) Entrer le format du chier : lp Maintenant le problme est pris en considration en mmoire, et on peut le manipuler avaec les commandes de CPLEX La syntaxe gnrale pour la commande read est : CPLEX> read nom_chier format_chier ou CPLEX> read nom_chier.extension
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

19 / 49

Optimiseur intractif

Congurer les paramtres de CPLEX

L'utilisateur peut changer les paramtres de CPLEX en modiant leurs valeurs initiales, pour voir les paramtres congurables : CPLEX> set Une liste de ces paramtres s'ache, on peut congurer l'un d'eux en tapant son nom La syntaxe gnrale pour la commande set est : CPLEX> set nom_paramtre nouvelle_valeur Il est possible de recongurer tous les paramtres leurs valeurs initiales par : CPLEX> set defaults

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

20 / 49

Cplex Callable Library

Section II :Cplex Callable Library

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

21 / 49

Cplex Callable Library

Introduction

La Cplex Callable Library est un ensemble de fonctions prdnies de cplex, Cplex Callable Library utilise les matrices creuses pour reprsenter un problme, Ces fonctions prdnies de Cplex commencent par le prxe CPX Nous allons se baser sur l'exemple mipex1.c pour l'explication des direntes instructions de la Callabe Library

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

22 / 49

Cplex Callable Library

Paramtres de gestion de Cplex


#dene NUMROWS 3 (nombre de contraintes) #dene NUMCOLS 4 (nombre de de variables) #dene NUMNZ 9 (nombre de coecients = 0 de la matrice des contraintes) char *probname = NULL ; (nom du problme) int numcols ;(nombre colonnes) int numrow ; (nombre de lignes) int objsen ; ( le sens de l'objectif) double *obj = NULL ; (tableau des coecients de l'objectif) double *rhs = NULL ; (tableau des second membres) char *sense = NULL ; (le sens des contraintes)

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

23 / 49

Cplex Callable Library

Paramtres de gestion de Cplex


int *matbeg = NULL ; (marque le dbut de chaque colonne des matrices de contraintes) int *matcnt = NULL ; (nombre des lments non nuls par colonne) int *matind = NULL ; (indice de lignes des lments non nuls) double *matval = NULL ; (les lments non nuls) double *lb = NULL ; (bornes infrieurs) double *ub = NULL ; (bornes suprieures) 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)

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

24 / 49

Cplex Callable Library

Ouverture de Cplex

CPXENVptr env=0 ; Pointeur sur l'environnement Cplex CPXLPptr lp=0 ; Pointeur sur la structure contenant PL int status ; Rcupre le code d'une ventuelle erreur Cplex, status=0 si il n'y a pas d'erreur 1 sinon. env = CPXopenCPLEX (&status) ; Cette fonction permet l'ouverture de l'environement Cplex, elle stocke la raison d'une ventuelle erreur dans status

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

25 / 49

Cplex Callable Library

Fonctions Cplex

status = CPXsetintparam (env, CPX_PARAM_SCRIND, CPX_ON) ; Cette fonction permet la modication des paramtres de cplex status = setproblemdata (&probname, &numcols, &numrows, &objsen, &obj, &rhs, &sense, &matbeg, &matcnt, &matind, &matval, &lb, &ub, &ctype) ; Cette fonction permet de saisir les donnes du problme, elle sera dtaille plus loin. lp = CPXcreateprob (env, &status, probname) ; Cette fonction permet la cration du problme.

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

26 / 49

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

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

27 / 49

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 problme sous format lp.

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

28 / 49

Cplex Callable Library

Saisie de donnes
Le problme rsoudre est : Maximize obj : x1 + 2 x2 + 3 x3 + x4 Subject To c1 : - x1 + x2 + x3 + 10x4 <= 20 c2 : x1 - 3 x2 + x3 <= 30 c3 : x2 - 3.5x4 = 0 Bounds 0 <= x1 <= 40 2 <= x4 <= 3 Integers x4 End
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

29 / 49

Cplex Callable Library

Saisie de donnes
Les coecients de la fonction objectif : zobj[0] = 1.0 ; zobj[1] = 2.0 ; zobj[2] = 3.0 ; zobj[3] = 1.0 ; Les dbuts de colonnes de la matrice des contraintes : zmatbeg[0] = 0 ; zmatbeg[1] = 2 ; zmatbeg[2] = 5 ; zmatbeg[3] = 7 ; Le nombre des lments non nuls par chaque colonne : zmatcnt[0] = 2 ; zmatcnt[1] = 3 ; zmatcnt[2] = 2 ; zmatcnt[3] = 2 ; L'indice ligne de chaque lments 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 lments 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 ;
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

30 / 49

Cplex Callable Library

Saisie de donnes
Bornes suprieures et bornes infrieures : 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=Binary Sens 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 ;

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

31 / 49

API Java

Section III : API Java

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

32 / 49

API Java

introduction

L'API Java utilise les objets et les mthodes pour reprsenter un problme, Commencer par la cration d'un nouveau Java Project Ajouter cplex.jar lors de la cration du votre projet (Libraries Add External JARs) Pour utiliser les interfaces Java ILOG CPLEX, vous devez importer les deux packages :
import ilog.concert *. ; import ilog.cplex *. ;

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

33 / 49

API Java

Cration d'objets Ilocplex

On cre un objet (une instance) de type IloCplex (qui implmente l'interface IloMPModeler, et donc l'interface IloModeler). Exemple : IloCplex modele = new IloCplex() ; Tous les appels au solveur (dnition de la fonction conomique et des contraintes du modle rsoudre, rsolution, achage de la solution) vont se faire via cet objet.

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

34 / 49

API Java

Variables

Les variables sont des objets de type soit :


IloNumVar IloIntVar

Chacun de ces objets, pour tre intgr au modle courant (modele), doit ensuite tre dni ainsi :
var1 = modele.numVar(borne_inf, borne_sup, type) ; criture generique pour une variable var1 var2 = modele.intVar(borne_inf, borne_sup) ;criture pour une variable var2 entire var3 = modele.boolVar() ; criture pour une variable 0-1 var3

(variables quelconques) (variables entires)

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

35 / 49

API Java

Variables

Si une variable relle n'a pas : De borne inf.borne_inf = -Double.MAX_VALUE De borne sup.borne_sup = Double.MAX_VALUE Possibilit de dnir des tableaux de variables via model.numVarArray (ou model.intVarArray ou model.boolVarArray) Paramtre type vaut IloNumVarType.Int (variable entire) ou IloNumVarType.Float (variable relle)

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

36 / 49

API Java

Les expressions
Une expression est une combinaison de variables : Somme, dirence, multiplication par des coecients... Une expression est un objet de type IloNumExpr Exemple : Pour crire : x1 + 2x2 expr = modele.sum(x1, modele.prod(2.0, x2)) ; Pour chaque opration (+, -, *, /, etc.), on utilise une instruction ddie :
Opration " somme " : modele.sum(...) Opration " produit " : modele.prod(...) Opration " dirence " : modele.di(...) Opration " ngation " : modele.negative(...) Opration " lever au carr " : modele.square(...)

Pour exprimer une expression linaire, on peut utiliser le produit scalaire : IloLinearNumExpr lin = modele.scalProd(vectcoef, var) ; ou vectcoef est le vecteur des coecients, et var est le vecteur des variables.
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

37 / 49

API Java

Contraintes

Les contraintes sont des objets de type IloRange Une contrainte ctr se dnit partir d'une expression expr. Exemple : On peut aussi utiliser :
IloRange ctr = modele.range(borne_inf, expr, borne_sup) ;
IloRange le = modele.Le(expr, borne_sup) ;

//contrainte en //contrainte en IloRange eq = modele.Eq(expr, borne_sup) ; //contrainte en =


IloRange ge = modele.Ge(expr, borne_inf) ;

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

38 / 49

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 =

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

39 / 49

API Java

Fonction objectif

modele.addMinimize(lin) ;

Pour ajouter la fonction conomique :modele.addMaximize(lin) ; ou

Pour la rcupration de la valeur optimale modele.getObjValue() ; Pour la rcupration de la solution optimale modele.getValue(var1) ; ou modele.getValues(tab_vars) ; Pour obtenir le status modele.getStatus() ; et enn pour fermer l'accs au solveur : modele.end() ;

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

40 / 49

OPL, une brve description

Section IV : OPL, une brve description

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

41 / 49

OPL, une brve description

Introduction

OPL=Optimization Programming Language, OPL est un langage de haut niveau pour la description des programmes mathmatiques, OPL est un langage d'ILOG, OPL Studio est un EDI (Environnement de Dveloppement Intgr)

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

42 / 49

OPL, une brve description

Manipulation de CPLEX Studio IDE

On peut lancer CPLEX Studio IDE d'aprs le menu dmarrer, Commencer par crer un nouveau projet, en cliquant sur Fichier Nouveau Projet OPL Pour insrer un nouveau modle au projet (d'extension .mod ), cliquer avec le bouton droit, sur le projet puis choisir Nouveau Modle Pour insrer un chier de donnes au projet (d'extension .dat ), cliquer avec le bouton droit, sur le projet puis choisir Nouveau Donnes Pour excuter un modle (.mod) associ un chier de donnes (.dat), il faut crer une conguration d'excution

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

43 / 49

OPL, une brve description

Manipulation de CPLEX Studio IDE

Pour crer une nouvelle conguration, cliquer avec le bouton droit, sur le projet puis choisir Nouveau Conguration d'excution Glisser les deux chiers modle (.mod) et donnes (.dat) vers la nouvelle conguration cree, Pour excuter une conguration , cliquer avec le bouton droit sur la conguration d'excution, puis choisir Excuter cette conguration

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

44 / 49

OPL, une brve description

Structure de modles OPL


Un modle OPL se prsente sous la forme suivante : <Type de la constante> <Nom de la constante> =... ; dvar <Type de la variable de dcision> <Nom de la variable de dcision> ; minimize (ou maximize) <Fonction objectif> subject to { <Contrainte 1> ; <Contrainte 2> ; ... <Contrainte n> ; };

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

45 / 49

OPL, une brve description

Exemples de modles OPL : problme de transport


Le problme de transport se modlise en OPL comme suit (chier .mod) : {string} usines=... ; {string} clients=... ; int nbr_usines=... ; int nbr_clients=... ; oat cout[usines][clients]=... ; oat demande[clients]=... ; oat ore[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]<=ore[i] ; forall (j in clients) contdemande : sum (i in usines) x[i][j]>=demande[j] ; };
Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

46 / 49

OPL, une brve description

Exemples de modles OPL : problme de transport

Le chier de donnes (.dat) initialise les constantes dclares dans le chier modle (.mod) : nbr_usines=3 ; nbr_clients=4 ; usines={"1","2","3"} ; clients={"1","2","3","4"} ; ore=[35,50,40] ; demande=[45,20,30,30] ; cout=[[8,6,10,9],[9,12,13,7],[14,9,16,5]] ;

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

47 / 49

OPL, une brve description

Exemples de modles OPL : problme de sac dos


Le problme de sac dos se modlise en OPL comme suit (chier .mod) : int n=... ; int prot[1..n] =... ; int poids[1..n] =... ; int poidmax=... ; dvar int x[1..n] ; maximize sum(i in 1..n) prot[i] * x[i] ; subject to { sum(i in 1..n) poids[i] * x[i] <= poidmax ; };

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

48 / 49

OPL, une brve description

Exemples de modles OPL : problme de sac dos

Le chier de donnes (.dat) initialise les constantes dclares dans le chier modle (.mod) : n=3 ; poidmax=59 ; prot = [10, 11, 13] ; poids= [10, 12, 13] ;

Prsent par OUDANI Mustapha

Dbuter avec CPLEX

26 mars 2013

49 / 49

Vous aimerez peut-être aussi