Académique Documents
Professionnel Documents
Culture Documents
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
1/27
January 30,
DAHMANI Isma — 2021
Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Introduction
Les applications de Callable Library sont créées pour résoudre une grande
variété de problèmes. Chaque application partage certaines caractéristiques
communes, indépendamment de son unicité apparente.
La lecture d’un fichier MPS ou LP peut réduire les efforts de codage, mais
peut également augmenter les besoins en exécution et en espace disque du
programme.
Construire le problème en mémoire, puis appeler CPXcopylp () évite des
lectures fastidieuses de fichiers de disque.
L’utilisation des routines CPXnewcols (), CPXnewrows (), CPXaddcols (),
CPXaddrows () et CPXchgcoeflist () peut conduire à un code modulaire
plus facile à gérer que si vous assemblez toutes les données de modèle en une
seule étape.
Une autre considération est que si l’application Callable Library lit un
fichier au format MPS ou LP, une autre application est généralement
nécessaire pour générer ce fichier.
2/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Introduction
3/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Introduction
4/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
La première étape à faire est d’inclure les fichiers d’entête qui contiennent les
déclarations des différentes variables et fonctions Cplex :
# include <ilcplex/cplex.h>
Gestion de l’erreur
En général les fonctions qui gèrent les erreurs retournent un entier : 0 en cas de
succès, une certaine constante symbolique en cas d’erreur.
Pour retrouver la description associée à un code numérique donné, il faut déclarer
une chaı̂ne de caractères de taille suffisante, puis faire appel à la fonction
CPXgeterrorstring ; le message correspondant à l’entier statut est écrit dans
une chaı̂ne (errmsg dans l’exemple ci-dessous) :
Exemple:
if ( !env ) {/*en cas d’erreur...*/
char errmsg[1024];
CPXgeterrorstring (env, status, errmsg);
fprintf (stderr, "%s", errmsg);
}
6/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Une fois un environnement ouvert, il faut initialiser une structure de donnée dans
laquelle un problème à résoudre sera stocké.
Une autre variable qui sera présente c’est la variable qui pointe sur le programme
linéaire que l’on souhaite résoudre. Cette initialisation se fait par appel à la
routine CPXcreateprob(), qui retourne un pointeur vers un PL.
On désigne par:
CPXLPptr : type Cplex qui désigne un pointeur vers une structure PL;
CPXLPptr lp = CPXcreateprob (env, &status, ”nomDuProb”); /*crée un
PL vide*/
Ou nomDuProb représente le nom donné au problème.
/* traiter l’erreur...*/
if ( !lp )
char errmsg[1024];
CPXgeterrorstring (env, status, errmsg);
fprintf (stderr, "% s", errmsg);
7/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Cplex minimise la fonction objectif par défaut, pour maximiser il faut appeler la
fonction CPXchgobjsen avec le paramètre CPX MAX :
CPXchgobjsen(env, lp, CPX MAX);
La résolution du problème se fait à l’aide d’une des fonctions d’optimisation
suivantes :
CPXlpopt (CPXCENVptr env, CPXLPptr lp) équivalente à optimize;
CPXprimopt(CPXCENVptr env, CPXLPptr lp) équivalente à primopt;
CPXdualopt(CPXCENVptr env, CPXLPptr lp) équivalente à tranopt;
CPXmipopt(CPXCENVptr env, CPXLPptr lp) équivalente à mipopt;
Par exemple la fonction CPXmipopt lance la résolution du PL en nombres
entiers et retourne un entier qui indique si l’optimisation c’est bien passée :
status = CPXmipopt (env, lp); /*résolution d’un PL mixte*/
if ( status )
printf (” echec lors de l’optimisation ”);
9/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Récupération de la solution
10/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Récupération de la solution
10/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Récupération de la solution
11/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Récupération de la solution
11/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Récupération de la solution
2) Deuxième méthode
De manière générale (PL mixte ou fractionnaire) on peut utiliser CPXsolution
pour récupérer la solution.
Exemple: status = CPXsolution (env, lp, &lpstat, &objval, x, pi, slack, dj);
Les paramètres pi , slack et dj sont facultatifs, on peut passer le pointeur NULL
si on ne souhaite pas récupérer les valeurs associées. 12/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
13/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Libérer l’environnement
14/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
15/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
16/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
17/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
ccnt: nombre de nouvelles variables (toujours 0 dans notre cas car on a déjà
toutes nos colonnes grâce à CPXnewcols)
Remarque
La matrice des contraintes est gérée comme une matrice creuse, i.e. matrice
contenant un grand nombre de 0. Afin de gagner de l’espace mémoire on ne stocke
pas les 0. En conséquence, les matrices sont représentées par trois vecteurs
- Le vecteur rmatbeg contient les indices dans rmatval des coefficients qui
sont les premiers de leur ligne.
20/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Exemple d’application:
Nous allons construire le PL suivant :
23/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
25/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Exemple: status = CPXaddcols (env, lp, ccnt, nzcnt, obj, cmatbeg, cmatind, cmatval, lb, ub,
NULL);
26/27
DAHMANI Isma — Solveur Cplex pour l’optimisation: Création d’une appli
Déclaration et Initialisation de l’environnement Cplex
Gestion de l’erreur
Déclaration et initialisation du problème linéaire
Construction du problème linéaire
Résolution d’un problème
Récupération de la solution
Sauvegarde des informations
Libérer l’environnement
Exemple d’application:
Nous allons construire le PL suivant :