Utilisation du solveur IBM-Cplex via le langage de
Transcription
Utilisation du solveur IBM-Cplex via le langage de
Utilisation du solveur IBM-Cplex via le langage de modélisation OPL ECMA TP noté en binôme (durée 3h30) Mercredi 2 décembre 2015 Le but de ce TP est d'évaluer vos connaissances sur le langage de modélisation OPL. Ce langage permet d'écrire une instance d'un programme mathématique, mais aussi un modèle général, dans lequel les données peuvent varier. Le chier contenant le modèle est suxé par .mod, et le chier contenant les données d'une instance particulière est suxé par .dat. Ce TP est composé de 5 exercices : pour chaque exercice, on vous demande de faire valider votre modèle par un des enseignants, et de rendre à la n du TP un compte-rendu contenant les modèles mathématiques et les résultats des diérents tests qui vous sont demandés. Avant de commencer : 1. Téléchargez le solveur IBM-Cplex à l'adresse suivante : http://cedric.cnam.fr/~lamberta/MPRO/ECMA/sources/sources_cp.exe et installez-le. 2. La documentation du langage de modélisation OPL se trouve à l'adresse suivante : http://cedric.cnam.fr/~lamberta/MPRO/ECMA/doc/oplTutorial.pdf. 3. Les exemples en OPL se trouvent dans le répertoire : C:\Program Files (x86)\IBM\ILOG\CPLEX_Studio125\opl\examples\ Rappel : Comment dénir et exécuter une conguration d'exécution? Après avoir créé le chier .mod correspondant à votre modèle, et éventuellement un chier de données .dat associé, vous devez créer une conguration d'exécution. Pour cela : 1. Allez dans la fenêtre de gauche "Projets OPL", et cliquez (clic droit) sur "Congurations d'exécution". Sélectionnez "Nouveau" puis "Conguration d'exécution". Donnez un nom à cette conguration (par exemple "Conguration_test_1"). 2. Dans la fenêtre "Projets OPL", cliquez (clic droit) sur le nom du chier .mod à ajouter à la conguration, et sélectionnez "Ajouter à la conguration d'exécution", puis "Conguration_test_1" (i.e. la conguration d'exécution que vous venez juste de créer). Faites de même pour l'éventuel chier .dat associé. 3. Enn, toujours dans la fenêtre "Projets OPL", cliquez (clic droit) sur le nom de votre conguration (ici, "Conguration_test_1"), et sélectionnez "Exécuter cette conguration". 1 1 Programmation linéaire (PLNE) Exercice 1 Une première instance en OPL On veut résoudre le problème (P L) suivant : M ax f (x1 , x2 , x3 , x4 , x5 ) = 3x1 + 5x2 − 6x3 + 2x4 − x5 s.c. x1 + 5x2 + 7x3 + 2x4 + 3x5 6 96 4x1 + 2x2 + 6x3 + 1x4 + 4x5 6 68 0 6 x1 6 18 2 6 x3 6 11 (P L) 4 6 x5 6 16 x2 ∈ {0, 1} x4 ∈ {0, 1} x5 ∈ N 1. Lancez Cplex et créez un nouveau projet (File -> new -> opl project). Vous nommerez ce nouveau projet premier_projet. 2. Créez un nouveau modèle (clic droit sur le projet premier_projet, puis new -> model). Vous nommerez ce nouveau modèle premier_modele_opl.mod 3. Après avoir écrit (P L) dans le langage OPL, compilez et résolvez (P L). Observez les informations que renvoie le solveur, copiez-les, et commentez-les. Exercice 2 Généralisation On veut modéliser et résoudre le problème général qui consiste à maximiser une fonction linéaire sous une contrainte linéaire d'égalité, une contrainte linéaire d'inégalité, et sous la contrainte que les variables sont des variables 01 : n X M ax z = ci x i i=1 n X s.c. ai xi = b (P LN E) i=1 n X di xi 6 e i=1 xi ∈ {0, 1} i = 1, . . . , n 1. Créez le projet PLNE. 2. Créez un nouveau modèle OPL et écrivez le chier qui représente (P LN E). Le nom du chier sera suxé par .mod (par exemple plne.mod). De plus, vous veillerez à nommer les données du problème comme proposé dans le modèle (P LN E). 3. Écrivez le chier qui contient les données du modèle suivant : M ax z = 12x1 + 15x2 + 5x3 + 16x4 + 17x5 s.c. 2x1 + 6x2 + x3 + 7x4 + 8x4 = 14 (P ) 3x1 + 6x2 + 2x3 + 5x4 + 9x4 6 20 xi ∈ {0, 1} i = 1, . . . , 5 Le nom du chier de données sera suxé par .dat (par exemple plne.dat). Résolvez ensuite l'instance associée. 4. Téléchargez les cinq chiers de données disponibles à l'adresse suivante : http://cedric. cnam.fr/~lamberta/MPRO/ECMA/data/, et résolvez les instances associées de (P LN E). Exercice 3 Ensemble stable de poids maximal Soit un graphe G = (V, E), où V = {v1 , . . . , vn } désigne l'ensemble des sommets et E l'ensemble des arêtes. Un sous-ensemble de sommets S de V est un ensemble stable si aucune paire de sommets de cet ensemble n'est reliée par une arête. À chaque sommet est associé un poids positif ou nul, et le poids d'un ensemble stable est égal à la somme des poids de ses sommets. Dans ce problème, on cherche à déterminer un ensemble stable de poids maximal dans G. 2 1. Créez le projet StablePoidsMax. 2. Après avoir modélisé le problème de l'ensemble stable de poids maximal sous la forme d'un programme linéaire en variables 01 (en utilisant le fait que, pour chaque arête (u, v), au plus un des deux sommets u et v peut appartenir à un ensemble stable), créez un nouveau modèle OPL et écrivez le PLNE modélisant le problème dans ce chier. 3. Téléchargez les cinq chiers de données disponibles à l'adresse suivante : http://cedric. cnam.fr/~lamberta/MPRO/ECMA/data/, et résolvez les instances associées. Exercice 4 Carrés magiques Pour tout n > 3, un carré magique de taille n est une matrice n × n contenant une et une seule fois chacun des nombres entiers compris entre 1 et n , et dont la somme des éléments 2 sur chaque ligne, chaque colonne et chacune des deux diagonales est la même (on peut noter qu'une telle matrice n'existe pas pour n = 2). 1. Créez le projet CarreMagique. 2. Après avoir modélisé par un programme linéaire en variables 01 la détermination d'un carré magique de taille n quelconque, créez un nouveau modèle OPL, puis écrivez le PLNE modélisant le problème dans ce chier. Comme le problème est hautement symétrique, on cherchera à atténuer cette symétrie (pour faciliter la résolution) en minimisant la valeur de l'élément en haut à gauche (c'est-à-dire, sur la première ligne et la première colonne) de la matrice. (On vous conseille de dénir les variables 01 suivantes : xijk = 1 si et seulement si l'élément sur la ième ligne et la j ème colonne vaut k .) N'oubliez pas d'exprimer le fait que toute case de la matrice doit contenir un et un seul élément. 3. Résolvez ce problème pour n = 2, n = 3 et n = 6 ou 7. 2 Programmation quadratique Exercice 5 Un programme quadratique On veut modéliser et résoudre le problème suivant : n n X X qij xi xj M ax z = i=1 j=1 n X (QP ) s.c. ai xi 6 b i=1 xi ∈ {0, 1} i = 1, . . . , n 1. Créez le projet QPNE. 2. Créez un nouveau modèle OPL et écrivez le programme mathématique (QP ) au format .mod dans ce chier. 3. Quelle propriété doit vérier la matrice des coecients de la fonction objectif de ce problème pour qu'il puisse être résolu ecacement (par exemple, à l'aide d'un algorithme de sous-gradient) ? 4. Téléchargez les cinq chiers de données disponibles à l'adresse suivante : http://cedric. cnam.fr/~lamberta/MPRO/ECMA/data/, et résolvez les instances associées. 3