Вы находитесь на странице: 1из 49

Université des Sciences et de la Technologie Houari Boumediene

FACULTÉ DE MATHÉMATIQUES

TP: Soveur Cplex pour


l’optimisation(SOLO)

January 30, 2021

1/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Introduction

Créer par l’équiper Rober E.Bixby en utilisant le langage C


en 1987 pour résoudre des instances du problème de
voyageur de commerce (TSP) jusqu’à la version 6.0
Racheté par ILOG en 1997 pour étoffer son éventail de
produits destinés à l’aide à la décision.
Racheté par IBM en 2009
95% des papiers qui mentionnent un solveur citent CPLEX

2/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Problème 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 contraintes et de variables

3/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Algorithmes

Programmation linéaire :
Simplex primal
Simplex dual
Simplex pour les problèmes de flot
Point intérieure
Programmation quadratique :
Simplex primal
Simplex dual
Point intérieure
Programmation à contraintes quadratiques :
Point intérieure

4/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
modes de fonctionnement

Mode interactif
Ouvrir CPLEX
Lire le fichier contenant le problème ou construire le
problème directement dans CPLEX
Configurer les paramètres d’optimisation
Optimiser
Accéder aux résultats

5/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Enter un problème
A la main. Depuis le prompt CPLEX>, entrer la commande
enter puis entrer dans l’ordre :
l’objectif :
max (ou maximize)
obj: X1
les contraintes :
st (ou subject to)
C1 : X1 + X2 + X3 - X4 = 0
C2 : X2 + X5 - X4 + X6 <= 6
.....
les bornes : Bounds
X2 <= 4
-inf <= X1 <= inf (ou X1 free)
enfin, le mot-clef
end
6/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Enter un problème
Remarques :
On n’est pas en revanche obligé de faire apparaitre une
variable si celle-ci ne participe pas à la contrainte (i.e., si la
variable a un coefficient nul dans la contrainte).
Attention : si l’on quitte l’environnement Cplex sans avoir
sauvegardé le problème saisi, celui-ci sera perdu (pour le
sauvegarder : cf., section ).

7/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Affichage d’un problème


Après la saisie du problème, on peut vérifier que ce dernier
a été bien entré , pour cela :
CPLEX> display problem all
Pour afficher le nombre et le type de contraintes, variables,
coefficients non nuls des contraintes avec l’option :
CPLEX> Display problem stats
Pour afficher les noms des variables:
CPLEX> Display problem nomVariable
numéroColonne (tous les noms de vars - ou *)
Pour afficher les contraintes :
CPLEX> Display problem nomContrainte
Pour afficher les bornes :
CPLEX> Display problem bounds 1
CPLEX> Display problem bounds -
CPLEX> Display problem bounds *
8/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Résolution d’un problème


Pour résoudre un programme linéaire, on peut lancer l’une des
commandes 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 flot
Optimize Clex choisit l’algorithme de résolution
Mipopt nomProblème pour résoudre un programme mixte

9/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Résolution d’un problème


Pour résoudre un problème déjà saisi :
CPLEX> optimize nomProblème
Pour afficher les informations poste résolution :
CPLEX> display solution variables -
Pour afficher la valeur duale pour chaque contrainte :
CPLEX> display solution dual -

10/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Modification d’un problème


change bounds modifie les bornes d’une variable;
change coefficient modifie un coefficient;
change delete efface des portions du problème;
change name modifie le nom d’une variable ou d’une
contrainte;
change sense modifie le sens de l’optimisation ou des
contraintes;
add permet d’ajouter des contraintes.

11/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Modification d’un problème


max
obj: X1+ 9 X2
st
C1 : X1 - X2 >=2
C2 : 2 X1 + 3 X2 <= 6
C3 : -X1 + 5 X2 = 10
Bounds
X2 <= 4
end

12/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Modification d’un problème


Ajout des coefficients :
CPLEX> change co
Change which coefficient [’constraint’ ’variable’]: c2 X2
Present coefficient of constraint ’c2’, variable ’X2’ is 3.000000
Change coefficient of constraint ’c2’, variable ’X2’ to what : 1
Coefficient of constant ’c2’, variable ’X2’ changed to 1.000000.
CPLEX> ch co c1 X1 -1
Coefficient of constraint ’c1’, variable ’X1’ changed to -1.000000

13/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Mode interactif

Modification d’un problème


Ajout de la contrainte :
CPLEX> add
Enter new constraints and bounds [’end’ terminates]:
c4 : X1 - 2 X2 <= 8
end
Problem addition successful.

14/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Exercice 1
Le self-service d’un hôtel offre chaque jour à ses clients quatre plats : plat 1, plat
2, plat 3, plat 4. Le prix d’une unité du plat 1 vaut 50DA, du plat 2 vaut 20DA,
du plat 3 vaut 30DA et du plat 4 vaut 80DA. Le tableau suivant nous donne la
quantité de vitamines V1, V2, V3 et V4 dans une unité de chaque plat :

Un client suit un régime alimentaire doit manger au moins : 500 unités de V1, 6
unités de V2, 10 unités de V3 et 8 unités de V4. Déterminer le régime qui coûte le
moins cher.
1 Saisir le PL,
2 Afficher le PL par CPLEX,
3 Résoudre le PL,
4 Afficher la solution optimale, puis la sauvegarder dans un fichier
5 Enregistrer le PL dans un fichier.
15/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Exercice 2
Saisir le PL suivant dans un fichier texte (enregistrer ce fichier avec un nom ayant
un suffixe .lp) :

Charger ce PL dans CPLEX (à l’aide de la commande read). Le résoudre et


afficher sa solution optimale. Puis, ajouter les contraintes suivantes l’une après
l’autre (à l’aide de la commande add) :
Ajouter la contrainte x1 + x2 >= 20 et résoudre le PL. Qu’observe-t-on ?
Pouvait-on le prévoir ?
Ajouter la contrainte x1 <= 15 et résoudre le PL. Qu’observe-t-on ?
Ajouter la contrainte x2 <= 4 et résoudre le PL. Qu’observe-t-on ?
Ajouter la contrainte x1 + 2x2 <= 60. Peut-on prévoir le résultat de la
résolution par CPLEX ? Résoudre le PL.
16/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Exercice 3
Saisir le PL suivant dans CPLEX :

Le sauvegarder dans deux fichiers LP différents, et le résoudre. Puis, modifier ce


PL :
Supprimer le terme x1 dans la troisième contrainte, en supprimant
l’ancienne contrainte et en la remplaçant par une nouvelle(utiliser le PL
contenu dans le premier fichier LP), puis résoudre le PL,
Supprimer le terme x1 dans la troisième contrainte, en modifiant
directement la contrainte (utiliser le PL contenu dans le deuxième fichier
LP), puis résoudre le PL. Vérifier que ces deux PL ont la même valeur
optimale. Puis, ajouter le terme 5x1 à la fonction objectif, et résoudre le PL.
Afficher la solution optimale obtenue. Enfin, supprimer la contrainte
2x1 + x2 + 4x3 <= 98, et résoudre le PL. Que remarque-t-on ? Si on
supprimait ensuite la première contrainte, que se passerait-il ? Le vérifier
avec CPLEX.
17/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Pour ouvrir un fichier, que ce soit pour le lire ou pour y écrire il faut:
1 On appelle la fonction d’ouverture de fichier fopen qui nous renvoie un
pointeur sur le fichier.
2 On vérifie si l’ouverture a réussi (c’est-à-dire si le fichier existait) en testant
la valeur du pointeur qu’on a reçu.
3 Si le pointeur vaut NULL, c’est que l’ouverture du fichier n’a pas
fonctionné, dans ce cas on ne peut pas continuer (il faut afficher un message
d’erreur).
4 Si l’ouverture a fonctionné (si le pointeur est différent de NULL donc),
alors on peut lire et écrire dans le fichier à travers des fonctions.
5 Une fois qu’on a terminé de travailler sur le fichier, il faut penser à le fermer
avec la fonction fclose.

18/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Pour manipuler un fichier, on utilise un pointeur sur une donnée spécifique dont le
type est FILE:

FILE *fichier

La variable fichier contiendra l’adresse en mémoire du début du fichier

19/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Pour manipuler un fichier, on utilise un pointeur sur une donnée spécifique dont le
type est FILE:

FILE *fichier

La variable fichier contiendra l’adresse en mémoire du début du fichier

Ouverture − fermeture de fichiers


Ouverture d’un fichier à l’aide de la fonction fopen :

FILE *fopen (char *nom, char *mode)

Cette fonction renvoie un pointeur sur le fichier ouvert.

19/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

fopen est définie dans le fichier stdio.h par :


nom est une chaı̂ne de caractères (tableau de caractères) contenant le nom
du fichier,
mode désigne le type de traitement des données
- ”r” ( read) : lecture (si le fichier existe)
- ”w” (write) : écriture (le fichier est écrasé s’il existe et s’il n’existe pas, il
est créé)

fichier = fopen(”fichier1.txt”,”r”);

20/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

fopen est définie dans le fichier stdio.h par :


nom est une chaı̂ne de caractères (tableau de caractères) contenant le nom
du fichier,
mode désigne le type de traitement des données
- ”r” ( read) : lecture (si le fichier existe)
- ”w” (write) : écriture (le fichier est écrasé s’il existe et s’il n’existe pas, il
est créé)

fichier = fopen(”fichier1.txt”,”r”);

Où se trouve le fichier ouvert ?


Dans le répertoire de travail

20/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

fopen est définie dans le fichier stdio.h par :


nom est une chaı̂ne de caractères (tableau de caractères) contenant le nom
du fichier,
mode désigne le type de traitement des données
- ”r” ( read) : lecture (si le fichier existe)
- ”w” (write) : écriture (le fichier est écrasé s’il existe et s’il n’existe pas, il
est créé)

fichier = fopen(”fichier1.txt”,”r”);

Où se trouve le fichier ouvert ?


Dans le répertoire de travail
Comment travailler sur un fichier situé ailleurs ?
Le chemin absolu d’accès au fichier peut être donné (attention anti slash de
Windows deviennent / en C)

fichier = fopen(”C:/Data/fichier1.txt”,”r”);

20/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Fermeture d’un fichier à l’aide de la fonction fclose :

fclose(fichier) ;

Important : Il faut toujours fermer un fichier après l’avoir utilisé Afin de libérer
la mémoire

21/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Fermeture d’un fichier à l’aide de la fonction fclose :

fclose(fichier) ;

Important : Il faut toujours fermer un fichier après l’avoir utilisé Afin de libérer
la mémoire

Exemple : écriture dans un fichier


void main()
{
int a=15, b=2 ;
FILE *fichier;
// Ouverture du fichier en écriture gr^ ace à "w"
fichier = fopen("essai.txt","w");
// Vérifier que le fichier a bien été ouvert
if (fichier != NULL)
{
// Écriture
fprintf(fichier,"%d",a);
fprintf(fichier,"%d",b);
fprintf(fichier,"%s","yes");
// Fermeture du fichier
fclose(fichier);
} 21/45
} DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Exemple : lecture à partir d’un fichier


void main()
{
int i;
int tab[2];
FILE *fichier;
// Ouverture du fichier en lecture gr^
ace à "r"
fichier = fopen("essai.txt","r");
if (fichier != NULL)
{
for(i=0;i<2;i++)
fscanf(fichier,"%d",&tab[i]);
fclose(fichier);
}
for(i=0;i<2;i++) printf("%d",tab[i]);
}

22/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Problème du sac à dos


Le problème de sac à dos est formulé de la façon suivante :

n
X
(KP ) M ax : f (x) = c j xj (1)
j=1
n
X
s.c. wj xj ≤ R (2)
j=1

xj ∈ {0, 1} ∀j ∈ {1, ..., n}, (3)

n : est le nombre d’éléments,


cj : est le profit de l’élément j
wj :est le poids de l’élément j
R : est la capacité du sac à dos.

23/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Problème de la distribution équitable KSP

Une instance du KSP binaire est définie par un sac à dos de capacité R et un ensemble N
d’éléments.
Cet ensemble est réparti sur m classes disjointes. Si Ni représente l’ensemble des éléments de
ième classe i ∈ {1, ..., m}, alors ∀p = 1, ..., m et ∀q = 1, ..., m , p 6= q Np Nq = ∅ et
T
la
Sm
i=1 Ni = N .
De plus, à chaque élément j de la classe i est associé un poids wij et un profit cij .
L’objectif est de déterminer le sous-ensemble d’objets à retenir dans le sac à dos qui satisfait la
contrainte de capacité. Cet sous-ensemble est choisi de façon à maximiser la valeur de la
fonction qui réalise le minimum par rapport à l’ensemble de toutes les classes.
Le problème peut être formulé comme suit :

X
(KSP ) M ax : min1≤i≤m { cij xij } (4)
j∈Ni
m X
X
s.c. wij xij ≤ R (5)
i=1 j∈Ni

xij ∈ {0, 1}, j ∈ Ni , i = 1, ..., m. (6)

La variable de décision xij vaut un si l’élément j de la classe i est retenu dans le sac à dos et
zéro sinon. L’équation (5) désigne la contrainte de capacité du sac à dos.

24/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un fichier à partir des données d’un fichier .txt

Linéarisation du KSP
Le programme linéaire en nombres entiers associé au KSP peut être écrit sous la
forme suivante :

(P LN EKSP ) M ax : γ (7)
Xm X
s.c. wij xij ≤ R, (8)
i=1 j∈Ni
X
cij xij ≥ γ, i = 1, ..., m (9)
j∈Ni

xij ∈ {0, 1}, γ∈N j ∈ Ni , i = 1, ..., m. (10)

25/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Installation du Cplex sous ubuntu

Première étape: création des répertoires ilog/cplex123


Créer un répertoire avec la commande : sudo mkdir nom-répertoire
sudo mkdir ilog
Afficher les répertoires et les fichiers du répertoire actif: ls
Accéder au répertoire ilog : cd nom-répertoire
cd ilog
Dans le dossier ilog, créer un autre répertoire cplex126 : sudo mkdir
cplex126
Accéder au dossier cplex126 : cd cplex126
Afficher le chemin absolu du répertoire courant : pwd
/home/hp/ilog/cplex126

26/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Installation du Cplex sous ubuntu

Deuxième étape: installation du Cplex


La commande sudo bash nom-fichier.bin permet de lancer l’installation
du cplex,
Attention! Il faut rentrer dans le répertoire qui contient le fichier .bin
ensuite lancer l’installation
sudo bash cplexstudio126.linux−x86−64.bin
Pour préciser l’emplacement de l’installation, il faut indiquer le chemin.
/home/hp/ilog/cplex126

27/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Installation du Cplex sous ubuntu

Troisième étape: mettre l’exécutable dans le répertoire bin


Accéder au répertoire qui contient le fichier exécutable
- cd cplex
- ls
- cd bin
- ls
- cd x86-64linux
- ls
la commande cp non-fichier nom-répertoire permet de copier le fichier Cplex
dans répertoire bin
sudo cp cplex /bin

28/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Utilisation des librairies de CPLEX( C, C++, Java,...) Cplex Callable Library

Initialisation de l’environnement Cplex

Création d’un programme linéaire

Résolution d’un problème

Récupération de la solution

Fermer Cplex

29/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Initialisation de l’environnement Cplex

Pour invoquer des objets ou fonctions Cplex, il faut en premier lieu initialiser
l’environnement, Cplex ayant besoin de quelques structures de données internes
pour opérer. La fonction CPXopenCplex() permet cette initialisation et
retourne un pointeur vers l’environnement créé (dont le type est CPXENVptr).

CPXENVptr : type Cplex qui désigne un pointeur vers l’environnement

CPXopenCPLEX : permet d’ouvrir l’environnement Cplex

CPXgeterrorstring : permet la Gestion de l’erreur

30/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Initialisation de l’environnement Cplex

Exemple 1 :

31/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Initialisation de l’environnement Cplex

De plus,
CPXsetintparam : vérifier l’affichage à l’écran
Exemple 2:

32/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire

Une fois un environnement ouvert, il faut initialiser une structure de donnée dans
laquelle un problème à résoudre sera stocké. Cette initialisation se fait par appel à
la fonction CPXcreateprob(), qui retourne un pointeur vers un PL :
CPXLPptr lp = NULL;
Exemple 3:

33/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire

Définir un problème
Il est possible de définir un problème de plusieurs manières : par structures
informatiques, par appels successifs à des fonctions de modification de PL, ou par
lecture de fichier.
1- Par lecture de fichier Si les données sont déjà rangées dans un fichier au
format lp , la fonction CPXreadcopyprob() permet de lire le fichier et d’en
copier les données dans la structure PL
Exemple 4 :

2- Par fonctions : ??

34/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire

2- Par fonctions
Création des colonnes (variables)
On note nbVar le nombre de variables du problème (qui correspond aussi le
nombre de colonnes de la matrice des contraintes).
La création des colonnes se fait à l’aide de la fonction CPXnewcols :

35/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire

nbVar : le nombre de variables

coeff : un tableau de dimension nbVar qui contient les coefficients des


variables dans la fonction objectif

lb( ub) : un tableau de dimension nbVar qui contient la borne


inférieure(borne supérieure) des variables

ctype : le type des variables (”B” pour binaire, ”I” pour entier, et ”C” pour
réel)

colname : un tableau de char * de dimension nbVar qui contient le nom des


variables
Les vecteurs lb, ub et colname sont facultatifs : si on passe NULL à la place de
ces vecteurs, Cplex attribue les valeurs par défaut.

36/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire

Création des lignes (contraintes)


La création des lignes est réalisée par la fonction CPXaddrows :

ccnt: le nombre de nouvelles variables (toujours 0 dans notre cas car on a déjà
toutes nos colonnes)
nbRow : nombre de lignes ( nombre de contraintes)
nbVar-non-nul : nombre de variables avec un coefficient non nul dans la matrice
des contraintes

37/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire

rhs : vecteur de dimension nbRow, rhs[i] contient le membre de droite de la


contrainte i
sense : vecteur de dimension nbRow, sense[i] contient le sens de la contrainte i : L
pour <=, E pour = et G pour >=
rmatbeg : vecteur de dimension nbRow, rmatbeg contient les indices dans
rmatval qui correspondent à des débuts de ligne
rmatind : vecteur de dimension nbVar-non-nul, rmatind [i] contient le numéro de
colonne de la variable dont le coefficient dans la matrice des contraintes est donné
par rmatval [i]
rmatval : vecteur de dimension nbVar-non-nul qui contient tous les coefficients
non nuls de la matrice des contraintes
colname : nom des nouvelles colonnes (pointeur NULL dans notre cas)
rowname : un tableau de char ∗ qui contient le nom des variables

38/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire

Sens de l’optimisation:
Par défaut Cplex minimise la fonction objectif. Pour maximiser il faut appeler la
fonction CPXchgobjsen avec le paramètre CPX-MAX :

39/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire: Exemple

Soit la matrice des contraintes M suivante :

Cette matrice est décrite à l’aide des vecteurs rmatbeg rmatind et rmatval de la
manière suivante :

40/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Création d’un programme linéaire: Exemple

Remarque: on peut utiliser la fonction

Exemple

41/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Résolution d’un problème

La résolution du problème se fait à l’aide d’une des routines d’optimisation


suivantes :

Exemple 5:

42/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Récupération de la solution

Après appel à une fonction d’optimisation, les informations relatives à la


résolution d’un problème peuvent être récupérées :
Exemple6:

43/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Fermer Cplex

Il faut commencer par Libérer le problème avec la fonction CPXfreeprob puis


quitter l’environnement avec la fonction CPXcloseCPLEX
Exemple 7:

44/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)
Compilation sous ubuntu

Compilateur
g++ -c *.c -g
g++ -o out *.o
./out

Compilateur Cplex
g++ -m64 -fPIC -I/ chemin vers include de Cplex -c *.c -g
Exemple: g++ -m64 -fPIC -I/
/opt/ibm/ILOG/CPLEX Studio126/cplex/include -c *.c -g

g++ -o out *.o -L/ chemin vers les lib -lcplex -m64 -lm -lpthread
Exemple: g++ -o out *.o -L/
/opt/ibm/ILOG/CPLEX Studio126/cplex/lib/x86-
64 linux/staticpic -lcplex -m64 -lm
-lpthread
./out

45/45
DAHMANI Isma — TP: Soveur Cplex pour l’optimisation(SOLO)

Вам также может понравиться