Download - présentation cplex
Débuter avec CPLEX
OUDANI Mustapha,
Faculté des Sciences et Techniques, Fès,
26 mars 2013
Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 1 / 49
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
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
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
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
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
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
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
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
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
Optimiseur intéractif
Section I : CPLEX en mode intéractif
Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 7 / 49
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
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
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
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
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
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
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
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
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
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
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
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
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
Cplex Callable Library
Section II :Cplex Callable Library
Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 21 / 49
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
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
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
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
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
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
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
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
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
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
API Java
Section III : API Java
Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 32 / 49
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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