introduction au logiciel gams (general algebraic modeling
TRANSCRIPT
Introduction au Logiciel GAMS (General Algebraic Modeling System)
J.-M. Reneaume
i
SOMMAIRE
A. INTRODUCTION ................................................................................................................... 1 B. DESCRIPTION DU MODELE ............................................................................................... 3
1. Structure gĂ©nĂ©rale du modĂšle .................................................................................................. 3 a) Structure du fichier dâentrĂ©e ................................................................................................ 3 b) RĂšgles gĂ©nĂ©rales .................................................................................................................. 3
2. SETS ........................................................................................................................................ 4 3. DATA ...................................................................................................................................... 5
a) PARAMETERS ................................................................................................................... 5 b) TABLES .............................................................................................................................. 6 c) SCALAR ............................................................................................................................. 6 d) Affectation directe ............................................................................................................... 6
4. VARIABLES........................................................................................................................... 7 5. EQUATIONS .......................................................................................................................... 8
a) Déclaration .......................................................................................................................... 8 b) Définition............................................................................................................................. 8 c) Opérateurs ........................................................................................................................... 8 d) Syntaxe pour les sommes .................................................................................................... 9 e) Fonctions intrinsÚques ......................................................................................................... 9
6. MODEL ................................................................................................................................. 10 7. SOLVE .................................................................................................................................. 10 8. Bornes, valeurs et sensibilités (.LO .UP .L .M) .................................................................... 10 9. DISPLAY .............................................................................................................................. 11
C. SORTIES ............................................................................................................................... 12 1. Messages dâerreur.................................................................................................................. 12 2. Sorties sans erreurs de syntaxe .............................................................................................. 13
a) Rappel du fichier dâentrĂ©e ................................................................................................. 13 b) Explicitation des contraintes.............................................................................................. 13 c) Statistiques du modĂšle ....................................................................................................... 13 d) RĂ©sumĂ© de la rĂ©solution..................................................................................................... 14 e) Valeurs des contraintes Ă la solution ................................................................................. 16 f) Valeurs des variables Ă la solution .................................................................................... 16 g) DISPLAY .......................................................................................................................... 17
D. INSTRUCTIONS COMPLEMENTAIRES .......................................................................... 18 1. ALIAS ................................................................................................................................... 18 2. Instruction $ - Expressions logiques...................................................................................... 18 3. OPTION ................................................................................................................................ 19
ii
1
A. INTRODUCTION Notre objectif est de donner un rapide (mais complet !) aperçu de GAMS et de ses capacitĂ©s. Face au dĂ©veloppement des capacitĂ©s de calcul et des algorithmes dâoptimisation, ce logiciel a Ă©tĂ© crĂ©Ă© afin de rĂ©pondre Ă un certain nombre de besoins : âą Fournir un langage structurĂ© pour la description synthĂ©tique de modĂšles complexes de grande
taille, âą Permettre la modification du modĂšle de façon simple et sĂ©curisĂ©e, âą Permettre la dĂ©finition univoque de relations algĂ©briques, âą Permettre la dĂ©finition du modĂšle de façon indĂ©pendante des algorithmes de rĂ©solution utilisĂ©s. Deux grands principes ont guidĂ© les concepteurs de ce logiciel : âą Tous les algorithmes doivent ĂȘtre utilisables sans aucune modification du modĂšle (en particulier,
lâintroduction dâun nouvel algorithme nâaffecte pas le modĂšle), âą La formulation du modĂšle doit ĂȘtre indĂ©pendante des donnĂ©es utilisĂ©es par ce dernier (en
particulier, lâaugmentation de la taille du modĂšle, nâaffecte pas la complexitĂ© de la reprĂ©sentation de ce dernier).
Lâenvironnement de modĂ©lisation et la bibliothĂšque dâalgorithmes dâoptimisation ont Ă©tĂ© conçus indĂ©pendamment.
2
Nous illustrerons notre propos avec lâexemple de lâatelier vu en cours : deux machines (A et B) peuvent fabriquer deux produits (1 et 2). Lâobjectif est de maximiser le chiffre dâaffaire annuel de lâatelier en recherchant le temps passer par chaque machine Ă fabriquer lâun ou lâautre des produits. La production maximum en 2 est de 200 tonnes par an. Lâatelier fonctionne 8330 hr/an. Le tableau 1 rĂ©sume les donnĂ©es du problĂšme en terme de : âą quantitĂ©s produites par machine et par produit, âą Prix de vente des produits (les qualitĂ©s, donc les prix de vente, des produits varient en fonction de
la machine utilisée).
Quantité [Kg/hr] Prix de vente [FF/Kg]
Machine 1 2 1 2
A 12.1 11.3 2.1 4.5
B 14.2 15.2 1.2 5.6
Tableau 1 : DonnĂ©es pour lâexemple de lâatelier
Donnons immédiatement la représentation de ce problÚme en « langage GAMS » :
3
B. DESCRIPTION DU MODELE
1. Structure générale du modÚle
a) Structure du fichier dâentrĂ©e Le modĂšle comporte les paragraphes suivants : âą SETS
DĂ©claration Affectation
âą DATA (PARAMETERS, TABLES, SCALAR)
DĂ©claration Affectation
âą VARIABLES DĂ©claration Affectation du type
âą [ Affectation des bornes et des valeurs initiales des variables ] âą EQUATIONS
DĂ©claration DĂ©finition
âą Instruction MODEL et SOLVE âą [ Instruction DISPLAY ] Les instructions entre [ ] sont facultatives.
b) RĂšgles gĂ©nĂ©rales Le modĂšle doit ĂȘtre dĂ©crit en utilisant lâenvironnement (Ă©diteur) de GAMS. Ce dernier crĂ©era un fichier ayant le suffixe .gms. Par exemple : atelier.gms Les rĂšgles gĂ©nĂ©rales suivantes doivent ĂȘtre respectĂ©es : 1. Un Ă©lĂ©ment (indice, paramĂštre, Ă©quation âŠ) ne peut ĂȘtre rĂ©fĂ©rencĂ© (affectĂ© ou utilisĂ©) avant
dâavoir Ă©tĂ© dĂ©clarĂ©. 2. Une instruction doit ĂȘtre suivie dâun point virgule ( ;) 3. Une ligne commençant par une * est un commentaire (ligne non interprĂ©tĂ©e par le compilateur) 4. Le nom dâun Ă©lĂ©ment comporte au maximum 9 caractĂšres alphanumĂ©riques. Le premier est
toujours alphabĂ©tique. 5. Il existe un certain nombre de mots rĂ©servĂ©s. Ils ne doivent pas ĂȘtre utilisĂ©s en dehors du contexte
prĂ©vu par le GAMS. Par exemple le mot sets, est un mot rĂ©servĂ© Ă la dĂ©claration des indices (Cf. paragraphe suivant). Il ne doit donc pas ĂȘtre utilisĂ© comme identificateur dâune variable. Les mots rĂ©servĂ©s sont repĂ©rĂ©s en gras et en bleu par lâĂ©diteur de texte.
4
2. SETS Ce paragraphe permet de dĂ©crire les ensembles dâindices qui seront utilisĂ©s dans le modĂšle.
Remarques: âą Ecriture Ă©quivalente:
âą Ici, la dĂ©claration et lâaffectation sont simultanĂ©es. âą Tous les Ă©lĂ©ments sont traitĂ©s comme des caractĂšres et non des nombres.
5
3. DATA Les donnĂ©es (DATA) peuvent ĂȘtre de trois types : âą PARAMETERS âą TABLES âą SCALAR
a) PARAMETERS Les donnĂ©es sont ici entrĂ©es par une liste. Le modĂšle de lâexemple de lâatelier ne comporte pas une telle liste. Prenons lâexemple suivant : Un vecteur « vect » comporte trois Ă©lĂ©ments. Il existe donc trois valeurs de lâindice de ce vecteur, par exemple A, B et C. Lâinstruction suivante permet de dĂ©clarer et dâaffecter les indices :
Set i indices du vecteur /A, B, C/ ;
Le vecteur sera déclaré et affecté de la façon suivante :
parameters vect(i) description du vecteur /A Paris B Lyon
C Marseille / ;
Nom de l âĂ©lĂ©mentDĂ©finition de son domaine (indices)
CommentairesValeurs pour les différents indices
Remarques : âą Les paires (indice, valeur) sont sĂ©parĂ©es par des virgules ou donnĂ©es sur des lignes diffĂ©rentes. âą Le compilateur dĂ©tectera une erreur si la valeur dâun indice nâest pas compatible avec la
déclaration du domaine. Par exemple :
Parameters vect(i) description du vecteur /A Paris, X Lyon, C Marseille/ ;
Cette instruction nâest pas correcte car la valeur X nâest pas dĂ©finie pour lâindice i. âą ZĂ©ro est la valeur par dĂ©faut. Seule lâaffectation des valeurs non nulles est requise.
6
b) TABLES Cette instruction permet de dĂ©clarer et dâaffecter des tableaux.
c) SCALAR Il sâagit du cas particulier dâune liste comportant un unique Ă©lĂ©ment.
d) Affectation directe Il est toujours possible de dĂ©coupler la dĂ©claration et lâaffectation. Par exemple, lâinstruction
Parameters vect(i) description du vecteur /A Paris, B Lyon, C Marseille/ ; Est Ă©quivalente aux instructions : Parameters vect(i) description du vecteur ; Vect(âAâ) = Paris ; Vect(âBâ) = Lyon ; Vect(âCâ) = Marseille ; Remarques : âą Il sâagit dâinstructions diffĂ©rentes. Elles sont donc toutes suivies dâun point virgule. âą Il est aussi possible de rencontrer, par exemple, la syntaxe suivante :
Set i indices du vecteur /A, B, C/ ; Parameters vect1(i) description du vecteur /A 2, B 4, C 6/ ; Parameters vect2(i) description du vecteur ;
vect2(i) = vect1(i)+7 ; Ici on utilise le domaine (i) et non une valeur particuliĂšre dâindice, qui est alors placĂ©e entre â â.
7
4. VARIABLES Il sâagit maintenant de dĂ©clarer les variables dâoptimisation.
Remarques : âą La variables t est une matrice, deux domaines sont dĂ©finis : i et j. âą La variable z est un scalaire. Il nây a donc pas de domaine. âą La derniĂšre ligne permet de dĂ©clarer le type. DiffĂ©rents types sont possibles :
âą Le type par dĂ©faut est « Free ». âą La dĂ©finition du domaine nâest pas rĂ©pĂ©tĂ©e dans la dĂ©claration du type.
8
5. EQUATIONS Les équations sont déclarées puis définies.
a) DĂ©claration
Remarques : âą Il sâagit dâune unique instruction. Elle est terminĂ©e par un point virgule. âą Le domaine doit ĂȘtre dĂ©fini si nĂ©cessaire.
b) DĂ©finition
Remarques : âą Le domaine est encore dĂ©fini si nĂ©cessaire. âą Chaque instruction est terminĂ©e par un point virgule. âą Les valeurs particuliĂšres dâindices sont entre â â. âą Les diffĂ©rents opĂ©rateurs sont : =e= pour les Ă©galitĂ©s, =l= pour les inĂ©galitĂ©s (â€), =g= pour les
inĂ©galitĂ©s (â„). Il ne faut pas confondre le signe = (utilisĂ© pour les affectations) et =e= (opĂ©rateur de relation lors de la dĂ©finition des Ă©quations).
c) Opérateurs Les opérateurs classiques sont utilisés :
+ : addition - : soustraction * : multiplication / : division ** : puissance
Les rÚgles de priorité sont respectées.
9
d) Syntaxe pour les sommes La syntaxe générale pour une sommation est la suivante : Sum (indexe, opérandes) Par exemple :
âi
jix , sâĂ©crit sum (i, x(i,j))
ââj
jijii
xc ,, . sâĂ©crit sum ( (i,j) , c(i,j)*x(i,j) )
Pour les produits, la syntaxe est la mĂȘme. On utilise alors prod.
e) Fonctions intrinsĂšques Les fonctions intrinsĂšques suivantes sont disponibles :
10
Deux fonctions intĂ©ressantes : ord : donne la position relative dâun Ă©lĂ©ment dans un ensemble (set) Exemple :
set i indice /101*150/ ; parameter a(i) ; a(i) = ord(i) ;
Ainsi on aura, par exemple, a(101) Ă©gal Ă 1, a(140) Ă©gal Ă 40 ⊠card : donne le nombre dâĂ©lĂ©ments dâun ensemble (set) Exemple :
set i indice /101*150/ ; scalar s; v = card(i);
La valeur 50 est affectée au scalaire v.
6. MODEL Cette instruction permet de dĂ©finir un modĂšle en utilisant toutes les Ă©quations ou seulement une partie dâentre elles.
Remarques : ⹠Dans ce cas toutes les équations sont utilisées. ⹠Si on ne souhaite pas utiliser toutes les équations, on donne alors la liste des équations entre / /.
Les noms des équations sont séparés par des virgules. ⹠Il est possible de définir plusieurs modÚles.
7. SOLVE Cette instruction permet dâappeler le solveur.
Cette instruction signifie : rĂ©soudre le modĂšle « atelier » en utilisant un algorithme de Programmation LinĂ©aire et en maximisant la variable « z » (cette variable est dĂ©finie par lâĂ©quation « cost » du modĂšle « atelier »). Les diffĂ©rents types dâalgorithmes sont : LP, NLP, MIP, MINLP. Il est possible de maximiser (maximizing) ou de minimiser (minimizing).
8. Bornes, valeurs et sensibilitĂ©s (.LO .UP .L .M) GAMS permet de gĂ©rer un certain nombre dâinformations concernant les variables et les Ă©quations :
.lo : borne inférieure
.up : borne supérieure
11
.l : valeur
.m : shadow price (analyse de sensibilitĂ©) x.lo dĂ©signe par exemple la borne infĂ©rieure de la variable x. Les bornes infĂ©rieures (.lo) et supĂ©rieures ( .up) sont gĂ©rĂ©es par lâutilisateur. Les valeurs des variables (.l) et des sensibilitĂ©s (.m) peuvent ĂȘtre initialisĂ©es par lâutilisateur mais elles seront dĂ©terminĂ©es par le solveur.
9. DISPLAY Il est possible de spĂ©cifier un certain nombre dâaffichages.
Cette instruction indique que lâutilisateur souhaite faire afficher la valeur de la variable « t » (t.l) ainsi que sa sensibilitĂ© (t.m).
12
C. SORTIES
1. Messages dâerreur Si une erreur de syntaxe est dĂ©tectĂ©e par le compilateur, GAMS affiche Ă lâĂ©cran un message du type suivant :
La premiÚre erreur est repérée par le code 170 : un élément est en dehors de son domaine. Il faut se reporter alors au fichier de résultats (suffixe .lst, ici atelier.lst).
13
Les erreurs sont toujours repĂ©rĂ©es par ****. Donc ici, la valeur 42 pour lâindice de colonne du tableau « m » nâest pas valable. En effet lâindice « j » a Ă©tĂ© dĂ©fini pour 1 ou 2. Une erreur peut amener le compilateur Ă mal interprĂ©ter le reste du fichier et donc Ă signaler dâautres erreurs de syntaxes. Ici cette seule erreur gĂ©nĂšre trois messages.
2. Sorties sans erreurs de syntaxe Une fois quâil nây a plus de messages dâerreur relatifs Ă la syntaxe, le fichier de rĂ©sultats (ici, atelier.lst) contient les principales information suivantes :
a) Rappel du fichier dâentrĂ©e Le fichier de donnĂ©es est rĂ©Ă©crit avec la numĂ©rotation des lignes
b) Explicitation des contraintes Le fichier de donnĂ©es contenait lâinstruction suivante :
temps(i).. sum(j,t(i,j))=e=f; Ceci sera explicité par :
Il est alors possible de vĂ©rifier quâil nây a pas dâerreurs dans lâĂ©criture du modĂšle.
c) Statistiques du modĂšle
14
d) Résumé de la résolution
Les différentes valeurs du « SOLVER STATUS » sont :
La valeur recherchée est « 1 NORMAL COMPLETION ».
15
Les différentes valeurs du « MODEL STATUS » sont :
16
e) Valeurs des contraintes Ă la solution
f) Valeurs des variables Ă la solution
17
g) DISPLAY Lâinstruction
produit la sortie :
18
D. INSTRUCTIONS COMPLEMENTAIRES
1. ALIAS Lâinstruction Alias permet de donner des noms diffĂ©rents Ă un mĂȘme indice. Par exemple :
Set i indices du vecteur /A, B, C/ ;
Alias (i, i1, i2);
Set i indices du vecteur /A, B, C/ ;
Alias (i, i1, i2); Lâordre des identificateurs entre les parenthĂšses est indiffĂ©rent.
2. Expressions logiques - Instruction $ Les expressions logiques sont des expressions qui peuvent avoir deux valeurs : VRAI ou FAUX. Ces expressions utilisent des opérateurs logiques qui sont différents des opérateurs utilisés lors de la définition des équations ou lors des affectations. Le tableau suivant présente les différents opérateurs logiques :
Opérateur Signification
ge Supérieur ou égal gt Strictement supérieur le Inférieur ou égal lt Strictement inférieur ne Différent eq Egal
not Non and Et (conjonction) or Ou (disjonction) xor Ou exclusif
Exemple :
(sqr(x) gt x) Cette expression est fausse si x est compris entre -1 et 1. Sinon, elle est vraie. Lâinstruction $ permet de conditionner une « opĂ©ration » Ă la vĂ©racitĂ© dâune condition logique. Ainsi, la syntaxe :
$(condition) est équivalente à : « si la condition est satisfaite ».
a) Affectation conditionnelle La syntaxe suivante :
a$(b gt 1.5) = 2;
est équivalente à : si (b est strictement supérieur à 15) alors (a prend la valeur 2).
Noter la diffĂ©rence entre lâopĂ©rateur dâaffectation = et lâopĂ©rateur logique gt.
19
b) Filtrage des indices dâune expression La syntaxe suivante:
Sum ( i $(ord(i) le 4), x(i) ) indique que lâon souhaite effectuer la somme des Ă©lĂ©ments du vecteur x(i), pour les valeurs de lâindice i infĂ©rieures ou Ă©gales Ă 4.
c) Filtrage des indices dâune Ă©quation La syntaxe suivante :
Equation (k) $(ord(k) gt 2) .. Sum (i,x(i,k)) =j= y(k)+z(k); indique que lâĂ©quation est dĂ©finie pour les indices k strictement supĂ©rieurs Ă 2.
3. OPTION Il est possible de choisir le solveur que l'on souhaite utiliser. Le tableau suivant donne, pour chaque type de problĂšme, les principaux solveurs disponibles ainsi que la mĂ©thode mise en Ćuvre.
Solveur Nature du problĂšme MĂ©thode
LP NLP MILP MINLP BDMLP X X Simplex - BB CPLEX X X Simplex - BB
CONOPT X X GRG MINOS5 X X GRG DICOPT X AP/OA/ER
Pour choisir le solveur, lâinstruction suivante doit ĂȘtre placĂ©e avant lâinstruction solve :
Option nlp=minos5 ;