ampl cplex 8.0drmdh.free.fr/stad/cour_info/ro/rechercheoperationne/automne2004/cours... · 1:...
TRANSCRIPT
1
1
MTH 6414 - AMPL CPLEX
AMPL CPLEX 8.0
Introduction à l’utilisation de Cplex 8.0avec l’interface DOS
2
2
MTH 6414 - AMPL CPLEX
CPLEX 8.0
• ILOG CPLEX est un logiciel d’optimisation robuste et puissant qui permet de résoudre des problèmes linéaires, en nombres entiers ou quadratiques.
3
3
MTH 6414 - AMPL CPLEX
Spécifier les instructions à CPLEX
• Spécifier CPLEX comme solver:• option solver cplex;
• Spécifier les option de CPLEX• option cplex_options ‘options de résolutions’;• Ex: option cplex_options ‘ crash=0 dual \
feasibility=1.0e-8 scales=1’;
Les options sont obligatoirement entre guillemets, séparées par un espace et les lignes coupées par des \..
4
4
MTH 6414 - AMPL CPLEX
Problèmes traités par CPLEX
• CPLEX est conçu pour résoudre :– Des problèmes linéaires– Des problèmes en nombres entiers – Des problèmes de réseaux – Des problèmes quadratiques
Voir: AMPL: A Modeling Language for MathematicalProgramming
5
5
MTH 6414 - AMPL CPLEX
Problèmes traités par CPLEX
• Programmes à termes linéaires par morceaux :– Tous les termes linéaires par morceaux doivent
être convexes dans le cas de minimisation.– Tous les termes linéaires par morceaux doivent
être concaves dans le cas de maximisation.– Tous les termes linéaires par morceaux dans les
contraintes doivent être convexes et à droite de contraintes ≤ ou sinon concaves et à droite de contraintes ≥.
Si les conditions ne sont pas respectées, le problème est converti en un problème en nombres entiers. AMPL effectue la conversion automatiquement, fait la résolution à l’aide de CPLEX et reconvertit la solution dans les variables définies par l’usager. La conversion a pour effet d’ajouter des variables qui correspondent à chaque morceau linéaire.
6
6
MTH 6414 - AMPL CPLEX
Problèmes traités par CPLEX
• Problèmes quadratiques :minimize ½ xT Q x + cT xsubject to A x ~ b
l ≤ x ≤ u
Q est une matrice des termes quadratiques
Qii: coefficients des termes xi2
Qij Qji: coefficient des termes xixj
CPLEX peut résoudre les problèmes quadratique à l’aide d’un algorithme de Barrier si le problème respecte les conditions suivantes:
1. Toutes les contraintes doivent être linéaires2. L’objectif doit être une somme de termes qui sont soit une expression linéaire
ou un produit de deux expressions linéaires3. Pour toutes les valeurs des variables, la partie quadratique de l’objectif doit
avoir une valeur non négative (si l’on minimise) ou une valeur non positive ( si l’on maximise)
7
7
MTH 6414 - AMPL CPLEX
Programmation linéaire avec CPLEX
8
8
MTH 6414 - AMPL CPLEX
Algorithmes de PL de CPLEX
• Algorithme du simplexe primal• Algorithme du simplexe dual• Algorithme du simplexe pour réseaux• Algorithme de Barrier (points intérieurs)
primal-dual
9
9
MTH 6414 - AMPL CPLEX
Sélection de l’algorithme LP
Choix de la formulation utilisée.
dualtresh=i (defaut 32000)primaldual
Lorsque le nombre de contraintes est plus élevé que le nombre de variables dans le problème primal, le problème dual a une matrice de base plus petite et CPLEX résout le problème plus rapidement.
Les options primal et dual force la formulation du problème.L’option dualtresh fait le choix de la formulation dual si le nombre de contraintes excède le nombre de variables par i.
10
10
MTH 6414 - AMPL CPLEX
Sélection de l’algorithme LP
CPLEX utilise l’algorithme du simplexe dual par défaut
primaloptdualoptbaroptnetopt=i (defaut 1)relax
La sélection de l’algorithme de résolution n’est pas influencée par la sélection de la formulation vue précédemment.
CPLEX utilise dualopt par défaut.
La résolution netopt utilise des routine du simplexe pour les contraintes de « réseaux purs »
0: n’utilise pas l’algorithme1: identification automatique2: force l’utilisation pour toutes les contraintes
L’option relax ignore les contraintes d’intégralité des variables.
11
11
MTH 6414 - AMPL CPLEX
Prétraitement
Le prétraitement tend à réduire le nombre d’itérations nécessaires
aggregate=i1 (défaut 1)aggfill=i2 (défaut 10)dependency=i3 (défaut 0)
Lorsque aggregate=1, CPLEX cherche les contraintes qui définissent une variable x en termes d’autres variables.Ex: x = y + b
x = ∑j yj où x apparaît dans au moins i2 autres contraintes
Lorsque i1vaut:-1: nombre de passes automatique0: pas de passe1 et plus…: nombre de passe égale à i (entier)
La grandeur de i2>2 diminue généralement la taille du problème mais augmente le nombre de coefficients de contraintes différents de zéro, ce qui augmene le temps de résolution des itérations du simplexe. 10 semble un bon compromis.
L’option dependency ne recherche les lignes dépendantes de la matrice des coefficients que lorsque i3=1.
12
12
MTH 6414 - AMPL CPLEX
Prétraitement
predual=i1 (défaut 0)prereduce=i2 (défaut 3)presolve=i3 (défaut 1)prestats=i4 (défaut 0)scale=i5 (défaut 0)
L’option predual décide s’il résout le problème dual ou primal selon le cas le plus rapide.i1= -1: primal
0: automatique1: dual
L’option prereduce détermine quel type de réductions seront faites.i2= 0: pas de réduction
1: primal seulement2: dual seulement3: primal et dual
L’option presolve détermine si le prétraitement est actif ou non.i3= 0: inactif
1: actif
L’option prestats détermine si on affiche ou non les statistiques de de prétraitement.i4= 0: inactif
1: actif
L’option scale permetde mettre à l’échelle la matrice des coefficients.i5= -1: inactif
0: normale1: mise à l’échelle agressive
13
13
MTH 6414 - AMPL CPLEX
Contrôle de l’algo. du simplexe
Sélection de la variable à inclure dans la basepgradient=i1 (defaut 0)dgradient=i2 (defaut 0)pdswitch=i3 (defaut 0)pricing=i4 (defaut 0)
L’option pgradient choisit l’algorithme de sélection des variable entrants dans la base pour l’algorithme du simplexe primal.
i1 -1: Reduce-cost pricing (petit problème ou très dense – 20 à 30 coefficient non zéro par colonne)
0: Hybrid reduced-cost/devex pricing1: Devex pricing (problème de Phase I long)2: Steepest-edge pricing (réduit le nombre d’itération pour les problèmes très
complexes)3: Steepest-edge pricing with slack initial norms (peu d’itération ou itération rapide)4: Full reduced-cost pricing (calcule le coût réduit de toutes les variables)
L’option dgradient choisit l’algorithme de sélection des variables sortant de la base pour l’algorithme du simplexe dual.
i1 0: Détermination automatique1: Standard dual pricing2: Steepest-edge pricing3: Steepest-edge pricing in slack space4: Steepest-edge pricing with unit initial norms
L’option pdswitch élimine les perturbations lors de la résolution du simplexe primal et dual en passant de l’un à l’autre.
i3= -1: pas de switch0: automatique1: utile lorsque le cycle automatique est souvent appelé
L’option pricing contrôle la taille du sous-ensemble de variable à entrer dans la baseI4=0: automatique
>0: taille manuelle
14
14
MTH 6414 - AMPL CPLEX
Contrôle de l’algo. du simplexe
Autres options :advance=i1 (défaut 1)crash=i2 (défaut 1)refactor=i3 (défaut 0)netfinf=i4 (défaut 1)
L’option advance oblige l’utilisation de base déjà existante pour débuter l’optimisation. (0/1)
L’option crash fait choisir la base initiale.i2= :-1,1 2 heuristiques de sélection
:0 ne tient pas compte de l’objectif pour choisir la base
L’option refactor détermine le nombre d’itération avant la refactorisation de la matrice de base. i3=0 est automatique.
L’option netfind contrôle l’optimiseur de réseau.i4= 1: natural scaling
2: reflective scaling3: reflective scaling and general scaling
15
15
MTH 6414 - AMPL CPLEX
Contrôle de l’algo. de Barrier
baralg=i1 (défaut 0)bargrowth=r1 (défaut 1e+6)barcorr=i2 (défaut -1)barobjrange=r2 (défaut 1e+5)barstart=i3 (défaut 1)barvarup=r3 (défaut 1e+20)
L’option baralg sélectionne l’algorithme de barrière à utliser.i1= 0: sélection automatique
1: infesability-estimate start2: infeasability-constant start3: standard barrier algo.
L’option bargrowth détermine si la face optimale n’est pas limitée. Plus la valeur est élevée, moins l’algorithme aura tendance à conclure à une face non limitée.
L’option barcorr détermine s’il faut effectuer une correction de centrage. I2=-1 fait une estimation automatique du nombre de correction par itération.
L’option barobjrange détermine la valeur maximum de la fonction objectif. Permet de détecter un problème non limité.
L’option barstart contrôle le point de départ de la méthode de Barrier. Valeur possible (1,2,3,4)
L’option barvarup limite la valeur maximum de toutes les variables limitées à l’infini. Toutes valeurs inférieures à 1e+20.
16
16
MTH 6414 - AMPL CPLEX
Contrôle de l’algo. de Barrier
comptol=r1 (défaut 1e-8)crossover=i1 (défaut 1)densecol=i2 (défaut 0)ordering=i3 (défaut 0)
L’option comptol spécifie la tolérance utilisée par l’algorithme de Barrier pour tester une convergence à l’optimal. r1=toute valeur plus grande que 1e-10.
L’option crossover permet de choisir l’algorithme d’initialisation du « crossovers » pour convertir la solution de Barrier en une solution de base.i1= 0: inactif
1: primal simplex2: dual simplex
L’option densecol permet de distinguer les colonne dense de la matrice des contraintes. Les colonnes denses traitées séparément permettent d’accélérer le temps de résolution. i2= 0 détermine le nombre de coefficients non nuls par colonne pour être dense. i2>0 est le nombre de coefficients non nuls par colonne pour être dense.
L’option ordering permet de choisir la méthode utilisée pour permuter les lignes de contraintes afin de réduire le remplissage du facteur de Cholesky.i3= 0: automatique
1: approximate minimum degree2: approximate minimum fill3: nested distinction
17
17
MTH 6414 - AMPL CPLEX
Amélioration de la stabilité
CPLEX est très robuste et est conçu pour éviter les problèmes de blocage dus à la dégénérescence et à l’imprécision numérique.
dopertub=i1 (défaut 0)perturbation=r1 (défaut 1.0e-6)perturblimit=i2 (défaut 0)feasibility=r2 (défaut 1.0e-6)markowitz=r3 (défaut 0.01)optimality=r4 (défaut 1.0e-6)
L’option dopertub choisit la stratégie de perturbation des solution dégénérées pour éviter les blocage.i1= 0: automatique
1: perturber au commencement
L’option perturbation détermine le niveau de perturbation. Si CPLEX indique plusieurs perturbations, c’est que r1 est trop élevé.
L’option perturblimit détermine le nombre d’itérations bloquées avant de perturber le problème. i2=0 détermine automatiquement ce nombre, sinon on peut le définir manuellement.
L’option feasability permet de déterminer le niveau jusqu’où un problème linéaire peut violer les limites de ses variables. r1=[1e-9 - 0.1] Si r1 est trop petit, CPLEX retourne de fausses infaisabilités.
L’option markowitz influence l’ordre d’élimination des variables lors de la factorisation de la base. r2=[0.0001 – 0.9999]
L’option optimality permet de définir la tolérance à laquelle la solution doit se trouver pour conclure à l’optimalité.
18
18
MTH 6414 - AMPL CPLEX
Arrêt et départ des procédures
Normalement CPLEX itère jusqu’à l’optimalité.« CTRL-C » arrêt manueltimelimit=r1 (défaut 1.0e+75)lpiterlimit=i1 (défaut 2.1 e+9 ou plus)bariterlimit=i2 (défaut automatique)lowerobj=r2 (défaut -1.0e+75)upperobj=r3 (défaut +1.0e+75)singularity=i3 (défaut 10)
Lorsque CPLEX arrête avant d’avoir trouver la solution optimale, il retourne la meilleure solution trouvée.
L’option timelimit détermine le temps maximal en secondes durant lequel CPLEX doit itérer.
L’option lpiterlimit détermine le nombre maximal d’itération du simplexe que CPLEX exécute avant d’arrêter.
L’option bariterlimit détermine le nombre maximal d’itération de la méthode de Barrier que CPLEX exécute avant d’arrêter.
Les option lowerobj et upperobj limite la valeur que peut prendre la fonction objectif.
L’option singularity limite le nombre de fois que CPLEX réparera la matrice de base lors de singularité.
19
19
MTH 6414 - AMPL CPLEX
Contrôle de l’affichage
Solve > filenamelpdisplay=i1 (défaut 0)bardisplay=i2 (défaut 0)timing=i3 (défaut 0)version
La commande solve retourne quelques lignes sur les performance de CPLEX. Ces lignes peuvent peuvent être sauvées dans un fichier ascii.
L’option lpdisplay permet d’afficher les information sur l’algorithme du simplexe.i1= 0: minimal
1: information critique (refactorisation, infaisabilité, information sur les réseaux)2: affiche chaque itération
L’option bardisplay permet d’afficher les informations sur l’algorithme de Barrieri2= 0: minimal
1: infaisabilité, objectif primal et dual, nombre d’itérations2: information supplémentaire
L’option timing permet d’afficher le temps de résolution nécessairei3= 0: aucune
1: temps standard2: erreur standard3: 1 et 2
L’option version permet d’afficher la version de CPLEX utilisée.
20
20
MTH 6414 - AMPL CPLEX
Programmationen nombres entiers avec
CPLEX
21
21
MTH 6414 - AMPL CPLEX
Prétraitement
Coupes disponibles:cliquecuts=i1 (défaut 0)covercuts=i2 (défaut 0)disjcuts=i3 (défaut 0)flowcuts=i4 (défaut 0)flowpathcuts=i5 (défaut 0)fraccuts=i6 (défaut 0)gubcuts=i7 (défaut 0)impliedcuts=i8 (défaut 0)mircuts=i9 (défaut 0)
Le temps de résolution des programmes en nombres entiers peut souvent être amélioré par l’utilisation de nouvelles contraintes (ou coupes) basés sur des propriétés polyédriques. Ces contraintes réduisent le sous-ensemble de solutions possibles en réduisant le nombre de variables fractionnelles à choisir quand CPLEX requière la sélection d’une variable de branchement.ix= -1: off
0: mode automatique1: mode modéré2: mode agressif
22
22
MTH 6414 - AMPL CPLEX
Prétraitement
aggcutlim=i1 (défaut 3)boundstr=i2 (défaut -1)coeffreduce=i3 (défaut 2)cutpass=i4 (défaut 0)cutsfactor=r1 (défaut 4.0)fraccand=i5 (défaut 200)fracpass=i6 (défaut 0)
L’option aggcut permet de contrôler le nombre de contraintes qui peuvent être agrégées pour générer des coupes «flow cover» et «mixed integer rounding». Si zéros, aucune agrégation.
L’option boundstr ressert les limites des variables des MIP. Cette option permet à CPLEX de fixer et retirer une variable du problème durant le branchement.i2= -1: automatique
0: off1: on
L’option coeffreduce permet de réduire le temps de résolution des sous-problèmes LP lors de la génération de l’arbre. Cependant cela peut rendre les problèmes plus complexes. i3= 0: off
1: réduit seulement les coefficient à des valeurs entières2: réduction lorsque possible
L’option cutpass permet de définir le nombre de passes que CPLEX effectue pour générer les coupes.i4= -1: off
0: automatique>0: nombre de passe
L’option cutsfactor permet de contrôler le nombre de coupes additionnelles générées par CPLEX. CPLEX ne génère pas plus que r1 fois le nombre de lignes.
L’option fraccand limite le nombre de variables candidates que CPLEX examine pour générer les coupes.
L’option fracpass contrôle le nombre de passes de CPLEX quand il génère les coupes fractionnelles sur les modèle MIP. 0 est un mode automatique.
23
23
MTH 6414 - AMPL CPLEX
Prétraitement
mipstartstatus=i1 (défaut 1)mipstartvalue=i2 (défaut 1)prerelax=i3 (défaut 0)presolvenode=i4 (défaut 0)probe=i5 (défaut 0)
L’option mipstartstatus indique à CPLEX comment utiliser les solution MIP existantes. i1=0 indique d’ignorer ces solutions.
L’option mipstartvalue indique à CPLEX de vérifier si la solution en nombres entiers est faisable avant d’optimiser. Si la solution est faisable alors l’objectif est utilisé comme cutoff lors du branchement. i2=0 ignore ces valeurs.
L’option prerelax appelle la fonction presolve de CPLEX pour le PL associé avec la relaxation du MIP. i3= actif.
L’option presolvenode détermine comment CPLEX applique le prétraitement au PL du sousproblème des nœud de l’arbre.i4= -1: inactif
0: automatique1: prétraitement forcé
L’option probe contrôle s’il faut effectuer un sondage avant d’effectuer la résolution MIP. Cette fonction peut réduire de façon importante la taille du MIP mais prendre plus de temps.i5= -1: off
0: automatique1,2,3: niveau de sondage
24
24
MTH 6414 - AMPL CPLEX
Contrôle de l’algorithme
CPLEX utilise des réglages par défaut permettant de résoudre une grande variété de MIP efficacement. Changer les options peut permettre de réduire le temps de résolution.
backtrack=r1 (défaut 0.01)bbinterval=i1 (défaut 7)nodeselect=i2 (défaut 1)branch=i3 (défaut 0)heuristicfreq=i4 (défaut 0)
L’option backtrack compare la valeur de la solution d’un nœud avec celle du nœud parent et détermine s’il faut aller plus profondément dans l’arbre ou s’il est mieux de changer de nœud parent. La valeur de r1 est entre 0 et 1. Lorsque r1 tend vers 0, l’exploration est de type «breadthfirst» et de type «deepth first» lorsque r tend vers 1.
L’option nodeselect défini le critère utilisé pour choisir le prochain nœud à évaluer lors d’un backtrack.i2= 0: recherche deepth first
1: la valeur du nœud est la limite de l’optimal en nombres entiers du sous problème du PL.
2-3: la valeur du nœud est un estimé du meilleur objectif qui peut être obtenu en branchant à partir du nœud (pseudocost)
L’option bbinterval utilisée avec la meilleure estimation de sélection de nœud i2=2 contrôle l’intervalle pour choisir la meilleure limite du nœud. Réduire lorsque l’estimation trouve une bonne solution mais progresse lentement, augmenter lorsque l’estimation ne trouve pas de meilleure solution entière.
L’option branch détermine la direction que CPLEX utilise pour le branchement sur les variables fractionnelles. i3= -1: down branching
0: automatique1: up branching
L’option heuristicfre détermine la fréquence à laquelle une heuristique d’arrondissement à d’autre nœud que le nœud de base. Permet de trouver des solutions qui seraient ignorées autrement.i4= -1: heuristique inactif
0: automatique>0: fréquence spécifiée
25
25
MTH 6414 - AMPL CPLEX
Contrôle de l’algorithme
mipalgorithm=i (défaut 2)0: Simplexe dual pour nb d’itérations limité puis
Simplexe primal1: Simplexe primal2: Simplexe dual, Simplexe primal si dual échoue3: Network sur la partie réseau puis Simplexe dual 4: Algo. de Barrier5: Simplexe dual pour nb itérations limité puis Barrier6: Algo. Barrier sans «crossover»
L’option mipalgoritm détermine l’algorithme utilisé par CPLEX pour résoudre le sous-problème à chaque nœud.
26
26
MTH 6414 - AMPL CPLEX
Contrôle de l’algorithme
mipcrossover=i1 (défaut 1)mipemphasis=i2 (défaut 0)ordertype=i3 (défaut 0)
L’option mipcrossover détermine l’algorithme utilisé pour le crossover de la méthode de Barrier.i1= 1: Primal simplex
2: Dual simplex
L’option mipemphasis détermine si CPLEX recherche premièrement une solution optimale ou une bonne solution rapidement.i2= 0: optimal
1: bonne solution
L’option ordertype détermine l’ordre de priorité de sélection des variables de branchement.i3= 0: inactif
1: variables avec grand coût premièrement2: variables avec petit coût premièrement3: améliore les problèmes de recouvrement
27
27
MTH 6414 - AMPL CPLEX
Contrôle de l’algorithme
startalgorithm=i (défaut 2)1: Simplexe primal2: Simplexe dual 3: Network-simplex puis Simplexe dual 4: Algo. de Barrier5: Simplexe dual pour nb itération limité puis
algo. de Barrier6: Algo. de Barrier sans crossover
L’option startalgorithm permet de choisir l’algorithme de résolution de la relaxation du PL initial.
28
28
MTH 6414 - AMPL CPLEX
Contrôle de l’algorithme
strongcand=i1 (défaut 10)strongit=i2 (défaut 0)
varselect=i3 (défaut 0)
L’option strongcand permet de déterminer la grandeur de l’ensemble des candidats pour le branchement fort.
L’option strongit permet de limiter le nombre d’itération pour le branchement fort. i2=0 est automatique.
L’option varselect détermine comment CPLEX choisit les valeurs des variables fractionnelles.i3= -1: minimum infeasability rule, choisit la variable avec la plus petite part
fractionnelle.0: automatique1: maximum infeasability rule, choisit la variable avec la plus grande
part fractionnelle.2: pseudocost rule, estime la pire dégradation de l’objectif qui
résulterait du forçage des variables fractionnelles et l’utilise pour choisir le branchement.
3: strong branching, considère plusieurs différents branchements et choisit la variable qui donne le meilleur résultat.
29
29
MTH 6414 - AMPL CPLEX
Relaxation de l’optimalité
Permet de trouver une bonne solution plutôt que l’optimalité pour les problèmes complexes
absmipgap=r1 (défaut 0.0)
| best node – best integer | < r1
mipgap=r2 (défaut 1.0e-4)
| best node – best integer | ( 1.0 + | best node | ) < r2
integrality=r3 (défaut 1.0e-5)
L’option integrality permet de considérer comme entières les variables qui ont moins de r d’écart d’une valeur entière. r doit être au moins 1e-9.
30
30
MTH 6414 - AMPL CPLEX
Relaxation de l’optimalité
lowercutoff=r1 (défaut –1.0e75)uppercutoff=r2 (défaut 1.0e75)
objdifference=r3 (défaut 0.0)relobjdiff=r4 (défaut 0.0)
Les option lowercuoff et uppercutoff permettent de couper un nœud dont l’objectif du sous-problème n’est pas entre ces deux valeurs.
L’option objdifference permet, lorsque supérieur à 0, de couper les nœud qui ne permettent pas une amélioration de la solution du sous-problème d’au moins r1.
L’option relobjdiff permet, lorsque r1=0, d’ajuster la fonction objectif durant l’optimisation. Lors de maximisation, r2 fois la valeur absolue de la fonction objectif est ajouté à la meilleure solution trouvée à ce moment. Une soustraction est faite lors de minimisation. Les nœuds subséquents sont ignorés si la solution n’est pas améliorée.
31
31
MTH 6414 - AMPL CPLEX
Arrêt et reprise de recherche
Arrêt de recherche :nodelim=i1 (défaut 2.1e9)solutionlim=i2 (défaut 2.1e9)timelimit=r1 (défaut 1.0e75)
Sauvegarde de l’arbre pour reprise ultérieure :endtree=f1
starttree=f2
L’option nodelim permet d’arrêter la recherche après la résolution de i1 sous problèmes linéaires.
L’option solutionlim permet d’arrêter la recherche après que i2 solutions réalisables qui satisfont les contraintes d’intégralité soient trouvées.
L’option timelimit permet d’arrêter la recherche après r1 secondes de recherche.
L’option endtree permet de sauver l’arbre de recherche dans le fichier f1.Ex: endtree=mulmip.tre
L’option starttree permet de récupérer l’arbre de recherche dans le fichier f2 afin de poursuivre la recherche.Ex: starttree=mulmip.tre
32
32
MTH 6414 - AMPL CPLEX
Contrôle de l’affichage des données
mipinterval=i1 (défaut 1)mipdisplay=i2 (défaut 0)
0: Affichage minimal1: Affichage pour chaque solution en nombres entiers
trouvée.2: Affichage pour chaque solution en nombres entiers
trouvée et à toutes les i1 itérations.3: 2 plus les coupes et prétraitement.4: 3 plus les «root node».5: 4 plus tous les sous-problèmes.