Your SlideShare is downloading. ×
0
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Présentation Cplex
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Présentation Cplex

5,768

Published on

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

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

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
5,768
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
185
Comments
1
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Débuter avec CPLEX OUDANI Mustapha, Faculté des Sciences et Techniques, Fès, oudani.mustapha@gmail.com, 26 mars 2013Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 1 / 49
  • 2. Plan 1 Introduction 2 Optimiseur intéractif 3 CPLEX Callable Library 4 API Java 5 OPL StudioPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49
  • 3. Plan 1 Introduction 2 Optimiseur intéractif 3 CPLEX Callable Library 4 API Java 5 OPL StudioPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49
  • 4. Plan 1 Introduction 2 Optimiseur intéractif 3 CPLEX Callable Library 4 API Java 5 OPL StudioPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49
  • 5. Plan 1 Introduction 2 Optimiseur intéractif 3 CPLEX Callable Library 4 API Java 5 OPL StudioPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49
  • 6. Plan 1 Introduction 2 Optimiseur intéractif 3 CPLEX Callable Library 4 API Java 5 OPL StudioPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 2 / 49
  • 7. IntroductionHistorique 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
  • 8. IntroductionProblè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 (version intégrale).Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 4 / 49
  • 9. IntroductionAlgorithmesProgrammation 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
  • 10. IntroductionComposantes de CPLEXOn peut utiliser CPLEX sous diérentes manières : Mode intéractif, Cplex Callable Library (bibliothèque en langage C) : utilise les matrices pour représenter un problème, Ilog Concert Technology : utilise les objects et les méthodes pour repré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
  • 11. Optimiseur intéractif Section I : CPLEX en mode intéractifPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 7 / 49
  • 12. Optimiseur intéractifUtiliser le menu daide → menu démarrer → Exécuter → taper : cplex CPLEX accepte les commandes en diérents formats : on peut taper le nom complet ou sa forme réduite, en majiscule ou en miniscule. Pour obtenir de laide CPLEX help ou CPLEX h Pour obtenir de laide à propos dune commande spécique on a la syntaxe générale : help nom_commande ,exemple : CPLEX help add CPLEX help problemPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 8 / 49
  • 13. Optimiseur intéractifEnter un problème Souvent, on fait entrer les petits problèmes dune façon intéractive, pour entrer des problèmes de grande taille, on fait la lecture du problème à partir dun 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
  • 14. Optimiseur intéractifEntrer un problème Pour entrer un nouveau problème CPLEX enter On choisit un nom pour notre problème exemple : programme1 On fait entrer le problème dans lordre suivant : 1 Fonction objectif 2 Contraintes 3 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 caractères alphanumériquesPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 10 / 49
  • 15. Optimiseur intéractifEntrer un problème 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 coût : x1 − 3x2 + x3 = 30 On peut entrer des contraintes longues en utilisant return, CPLEX interprète les lignes multiples comme une seule contrainte : st −x1 + x2 + return x3 = 20 return coût : x1 − 3x2 + x3 = 30Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 11 / 49
  • 16. Optimiseur intéractifEntrer un problème Pour entrer les bornes, on utilise bounds : bounds x1 = 40 Si aucune borne nest pas entrée, CPLEX donne la valeur 0 pour la borne inférieure et +∞ pour la borne supérieure, donc pour notre problème 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 particulières : Pour les variables entières, on entre generals,exemple : generals x1 Pour les variables binaires, on entre binaries,exemple : binaries x2 Pour nir lentrée dun problème on tape endPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 12 / 49
  • 17. Optimiseur intéractifAchage dun problème Après la saisie du problème, on peut vérier que ce dernier a été bien entré, pour cela : CPLEX display Une liste doptions apparait. Certaines options concernent la partie de description du problème, laure concerne la solution. Celle-ci ne peut être achée quaprès la résolution du problème. problem all Si le problème est dune grande taille, son achage sur écran est moins pratique. On peut utiliser loption stats pour acher 1 Le nombre et le type de contraintes 2 Variables 3 Coecients non nuls des contraintes display problem statsPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 13 / 49
  • 18. Optimiseur intéractifAchage dun problème Pour acher 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 la colonne de la variable On peut acher tous les noms des variables en tapant - ou * après le mot variables Pour acher les contraintes diplay problem nom_contrainte La fonction objectif est considérée comme la contrainte numéro 0, elle peut être achée également par son nom par défaut obj Pour acher 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
  • 19. Optimiseur intéractifRésolution dun problèmePour résoudre un programme linéaire, on peut lancer lune 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 lalgorithme de résolutionPour résoudre un programme mixte (linéaire ou quadratique ou àcontraintes quadratiques), on peut utiliser la commande :mipopt nom_problèmePrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 15 / 49
  • 20. Optimiseur intéractifRésolution dun problème Pour résoudre un probème déja saisi : CPELX optimize nom_probème Pour acher les informations post-résolution : CPLEX display solution variables - Pour acher la valeur dual pour chaque contrainte : CPLEX display solution dual - On peut aussi acher lanalyse de sensibilité de la fonction objectif (Changement de la solution optimale comme réponse aux petites perturbations des données du problèmes) CPLEX display sensitivity obj - ou CPLEX display sensitivity obj *Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 16 / 49
  • 21. Optimiseur intéractifEcriture dun problème et chier de solution Le problème ou sa solution peuvent être enregitrés en utilisant la commande write Lorsque vous taper la commande write un message vous demande dentrer 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 directement CPLEX write exemple lp ou CPLEX write exemple.lpPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 17 / 49
  • 22. Optimiseur intéractifEcriture dun problème et chier de solution La syntaxe générale pour la commande write est : CPLEX write nom_chier format_chier ou CPLEX write nom_chier.extensionPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 18 / 49
  • 23. Optimiseur intéractifLecture dun problème à partir dun chier On peut faire entrer souvent un problème par sa lecture à partir dun chier au lieu de sa saisie par clavier Pour lire un lire un exemple dun chier LP CPLEX read Spécier le nom de chier (exemple) Entrer le format du chier : lp Maintenant le problème est pris en considération en mémoire, et on peut le manipuler avaec les commandes de CPLEX La syntaxe générale pour la commande read est : CPLEX read nom_chier format_chier ou CPLEX read nom_chier.extensionPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 19 / 49
  • 24. Optimiseur intéractifCongurer les paramètres de CPLEX Lutilisateur peut changer les paramètres de CPLEX en modiant leurs valeurs initiales, pour voir les paramètres congurables : CPLEX set Une liste de ces paramètres sache, on peut congurer lun deux en tapant son nom La syntaxe générale pour la commande set est : CPLEX set nom_paramètre nouvelle_valeur Il est possible de recongurer tous les paramètres à leurs valeurs initiales par : CPLEX set defaultsPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 20 / 49
  • 25. Cplex Callable Library Section II :Cplex Callable LibraryPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 21 / 49
  • 26. Cplex Callable LibraryIntroduction La Cplex Callable Library est un ensemble de fonctions prédénies de cplex, Cplex Callable Library utilise les matrices creuses pour représenter un problème, Ces fonctions prédénies de Cplex commencent par le préxe CPX Nous allons se baser sur lexemple mipex1.c pour lexplication des diérentes instructions de la Callabe LibraryPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 22 / 49
  • 27. Cplex Callable LibraryParamètres 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 descontraintes)char *probname = NULL ; (nom du problème)int numcols ;(nombre colonnes)int numrow ; (nombre de lignes)int objsen ; ( le sens de lobjectif)double *obj = NULL ; (tableau des coecients de lobjectif)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
  • 28. Cplex Callable LibraryParamètres de gestion de Cplexint *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 lobjectif)double x[NUMCOLS] ; (variables)double slack[NUMROWS] ;(variables decart)Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 24 / 49
  • 29. Cplex Callable LibraryOuverture de CplexCPXENVptr env=0 ; Pointeur sur lenvironnement CplexCPXLPptr lp=0 ; Pointeur sur la structure contenant PLint status ; Récupère le code dune éventuelle erreur Cplex, status=0 si ilny a pas derreur 1 sinon.env = CPXopenCPLEX (status) ;Cette fonction permet louverture de lenvironement Cplex, elle stocke laraison dune éventuelle erreur dans statusPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 25 / 49
  • 30. Cplex Callable LibraryFonctions Cplex status = CPXsetintparam (env, CPX_PARAM_SCRIND, CPX_ON) ; Cette fonction permet la modication 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 sera dé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
  • 31. Cplex Callable LibraryFonctions 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 doptimisation. solstat = CPXgetstat (env, lp) ; Fonction statut de la solution.Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 27 / 49
  • 32. Cplex Callable LibraryFonctions Cplex status = CPXgetobjval (env, lp, objval) ; Obtenir la valeur de lobjectif. 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
  • 33. Cplex Callable LibrarySaisie de donnéesLe 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 = 3Integersx4EndPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 29 / 49
  • 34. Cplex Callable LibrarySaisie de donnéesLes coecients 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 ;Lindice 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
  • 35. Cplex Callable LibrarySaisie de donnéesBornes 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
  • 36. API Java Section III : API JavaPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 32 / 49
  • 37. API Javaintroduction LAPI Java utilise les objets et les méthodes pour représenter un problème, Commencer par la création dun nouveau Java Project Ajouter cplex.jar lors de la création 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 *. ;Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 33 / 49
  • 38. API JavaCréation dobjets Ilocplex On crée un objet (une instance) de type IloCplex (qui implémente linterface IloMPModeler, et donc linterface IloModeler). Exemple : IloCplex modele = new IloCplex() ; Tous les appels au solveur (dénition de la fonction économique et des contraintes du modèle à résoudre, résolution, achage de la solution) vont se faire via cet objet.Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 34 / 49
  • 39. API JavaVariables 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) ; écriture generique pour une variable var1 var2 = modele.intVar(borne_inf, borne_sup) ;écriture pour une variable var2 entière var3 = modele.boolVar() ; écriture pour une variable 0-1 var3Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 35 / 49
  • 40. API JavaVariablesSi une variable réelle na 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) ou IloNumVarType.Float (variable réelle)Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 36 / 49
  • 41. API JavaLes expressions Une expression est une combinaison de variables : Somme, diérence, 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 opération (+, -, *, /, etc.), on utilise une instruction dé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 produit scalaire : IloLinearNumExpr lin = modele.scalProd(vectcoef, var) ; ou vectcoef est le vecteur des coecients, et var est le vecteur des variables.Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 37 / 49
  • 42. API JavaContraintes Les contraintes sont des objets de type IloRange Une contrainte ctr se dénit à partir dune 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
  • 43. API JavaContraintesPour 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
  • 44. API JavaFonction objectif Pour ajouter la fonction économique :modele.addMaximize(lin) ; ou modele.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 enn pour fermer laccès au solveur : modele.end() ;Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 40 / 49
  • 45. OPL, une brève description Section IV : OPL, une brève descriptionPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 41 / 49
  • 46. OPL, une brève descriptionIntroduction OPL=Optimization Programming Language, OPL est un langage de haut niveau pour la description des programmes mathématiques, OPL est un langage dILOG, OPL Studio est un EDI (Environnement de Développement Intégré)Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 42 / 49
  • 47. OPL, une brève descriptionManipulation de CPLEX Studio IDE On peut lancer CPLEX Studio IDE daprè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 (dextension .mod ), cliquer avec le bouton droit, sur le projet puis choisir Nouveau→ Modèle Pour insérer un chier de données au projet (dextension .dat ), cliquer avec 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 conguration dexécutionPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 43 / 49
  • 48. OPL, une brève descriptionManipulation de CPLEX Studio IDE Pour créer une nouvelle conguration, cliquer avec le bouton droit, sur le projet puis choisir Nouveau→ Conguration dexécution Glisser les deux chiers modèle (.mod) et données (.dat) vers la nouvelle conguration créee, Pour exécuter une conguration , cliquer avec le bouton droit sur la conguration dexécution, puis choisir Exécuter cette congurationPrésenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 44 / 49
  • 49. OPL, une brève descriptionStructure de modèles OPLUn 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 objectifsubject to {Contrainte 1 ;Contrainte 2 ;...Contrainte n ;};Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 45 / 49
  • 50. OPL, une brève descriptionExemples de modèles OPL : problème de transportLe 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 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] ;};Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 46 / 49
  • 51. OPL, une brève descriptionExemples de modèles OPL : problème de transportLe 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} ;ore=[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
  • 52. OPL, une brève descriptionExemples de modèles OPL : problème de sac à dosLe problème de sac à dos se modélise en OPL comme suit (chier .mod) :int n=... ;int prot[1..n] =... ;int poids[1..n] =... ;int poidmax=... ;dvar int x[1..n] ;maximizesum(i in 1..n) prot[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
  • 53. OPL, une brève descriptionExemples de modèles OPL : problème de sac à dosLe chier de données (.dat) initialise les constantes déclarées dans le chiermodèle (.mod) :n=3 ; poidmax=59 ;prot = [10, 11, 13] ;poids= [10, 12, 13] ;Présenté par OUDANI Mustapha Débuter avec CPLEX 26 mars 2013 49 / 49

×