Introduction au logiciel GAMS

Transcription

Introduction au logiciel GAMS
Introduction au logiciel GAMS
Nouakchott
2003
I. Introduction
Le logiciel GAMS (General Algebraic Modeling
System) a été à l’origine développé par un groupe
d’économistes de la Banque Mondiale avec pour
objectif de faciliter la résolution de grands modèles
complexes et souvent non-linéaires à partir d’un
ordinateur personnel. GAMS permet donc de résoudre
un système d’équation simultanées non-linéaires avec
ou sans fonction objectif à optimiser.
(i) Simplicité (dans l’implémentation)
(ii) Facilité des mises à jour technique (grâce à de
nouveaux alogorithmes régulièrement)
Î grands avantages du logiciel GAMS.
Dans le logiciel initial, le programme devait être crée en
format ASCII dans un éditeur de texte traditionnel et
tournait avec une commande dos.
Le développement récent de l’interface GAMS-IDE rend le
logiciel d’utilisation plus facile. GAMS-IDE possède son
propre éditeur de texte (compatible avec windows 95) avec
la possibilité de lancer et de suivre la compilation et
l’exécution du programme à l’écran.
Un sous-module GAMS a récemment été développé pour
faciliter les transferts avec Excel ou d’autres tableurs.
II. Architecture de la programmation
dans GAMS
1. Structure du code GAMS
Un MEGC programmé dans GAMS peut se décomposer en
3 modules :
– Entrée des données (Étape 1),
– Spécification du modèle (Étape 2)
– Procédure de résolution (Étape 3).
Le graphique suivant donne une illustration d’ensemble de la
structure du logiciel GAMS (les mots-clés sont indiqués en
gras).
Etape 3 : Résolution
¾Solve : résolution
¾présentation des résultats
Etape 2 : Modèle
¾Variables : déclaration des
variables
¾Equations : définition et
déclaration des équations
¾Model : definitiondu modèle
Etape 1 : données
¾set : déclaration et définitions
des ensembles
¾Parameter : declaration et
définition des paramètres
¾Assignation des données
¾ display : présente les
données intermédiares
Quelques règles générales doivent être respectées dans la
programmation GAMS :
z
Il faut toujours déclarer chaque élément avant de les
utiliser. Les ensembles et les paramètres doivent toujours
être déclarés au tout début du programme.
z
Même si ce n’est pas toujours nécessaire, une bonne
habitude est de toujours mettre un « ; » à la fin d’une
commande afin d’éviter des erreurs de compilation.
GAMS permets de mettre sur la même ligne plusieurs
commande ou de mettre une commande sur chaque
ligne. Cette procédure peut aider à réduire la longueur
du code ou faciliter l’impression.
GAMS ne distingue pas les lettres minuscules des lettres
capitales.
Les noms donnés à Set, Parameters, Variable, Equation
ou Model doivent commencer par une lettre et ne
doivent pas avoir plus de 9 caractères. Les mots-clésne
doivent pas être utilisés pour déclarer un élément..
Les principales fonctions mathématiques sont les suivantes :
Multiplication
*
Égalité dans
une opération
Soustraction
-
Sommation
Addition
+
Produit
PROD(set domain,
element)
Division
Puissance
/
**
Valeur absolue
Exponentielle
ABS(.)
EXP(.)
=
Logarithme
SUM(set domain, element) Maximum
Minimum
LOG(.)
MAX(.,.)
MIN(.,.)
2. Procédure de résolution et présentation des
résultats
Après avoir écrit le code GAMS, il sera sauvegarder avec
l’extention‘.gms’. Le nom du fichier doit respecter les
contraintes dos standards (8 caractères max sans
symbole).
La commande RUN dans le menu de GAMS-IDE (F9)
peut être utilisée.
Le fichier de résultat créé par cette procédure a le même
nom que le programme initial mais avec l’extention ‘.lst’.
Ce fichier contient soit le programme initial avec
l’identification des erreurs compilées s’il y en a, soit les
résultats par défaut décrits ci-après :
Output dans le fichier ‘nom.lst’
¾rappel du programme initial
¾liste des équations
¾la liste des colonnes
¾les statistiques du modèle
¾le résumé de la résolution
¾les résultats
III. Ecrire un programme GAMS
1.La calibration
La première étape du processus de
modélisation consiste à entrer les données,
définies comme de référence et évaluer les
paramètres cohérents avec les données. Il
s’agit du processus de calibration. Dans le cas
de la modélisation en EGC, les données de
référence sont généralement tirées de la MCS.
Les paramètres pouvant être calibrés seront
déterminés avec ces données.
i) Option Title
Sans être nécessaire, cette option permet d’obtenir des
résultats compréhensibles. Le texte à la suite de la
commande $TITLE apparaitra en t^te de page sur chaque
nouvelle page de l’output. Un sous-titre peut être également
ajouté avec la commande $STITLE.
$TITLE
Modèle théorique
$STITLE
Capital immobile entre les secteurs
*Modèle d’une économie fermée produisant 2 biens avec 2 facteurs
*Nouakchott - Janvier 2003
GAMS ne lit pas les lignes précédées d’une astérisque (*).
Une autre manière est de mettre le texte entre les commandes
suivantes : $ONTEXT et $OFFTEXT.
ii) Définition des ensembles
Ceci est très utile pour les variables multidimentionnelles.
Ceci correspond à l’indexe dans les représentations
mathématiques des modèles.
SET I secteurs
/BIEN
SER
agriculture et industrie
services/
LA commande SET définit l’ensemble des secteurs I, dont
les éléments sont BIEN et SER. Après chaque symbole (I,
GOOD and SER) il est possible de rajouter une légende.
iii) Définition des paramètres
Les paramètres sont les éléments du modèle qui ne changent
pas après simulation telles les élasticités, les taux de taxe, les
paramètres d’échelle,….
An plus de ces paramètres, les variables de référence sont
définis avec leur valeur à l’année de base et resteront
invariables après simulation. Une manière pratique de définir
ces variables est d’ajouter un "O" après le nom de la variable
pour ne pas la confondre avec la vraie variable.
La définition des paramètres et des variables de référence
commence avec le mot-clé PARAMETER et se termine par un
“;”.
PARAMETER
A(I)
alpha(I)
delta
sigma
Coefficient d’échelle (fonction de production Cobb-Dougla
parts (fonction de production Cobb-Douglas)
parts (fonction d’utilité CES)
Elasticité de substitution (fonction d’utilité CES)
*Prix
wo
ro(I)
PO(I)
Taux de salaire
Taux de rendement du capital dans le secteur I
Prix du bien I
*Production
XSO(I)
Production du secteur I
*Facteurs
KDO(I)
LSO
LDO(I)
demande de capital du Sector I
Offre totale de travail
Demande de travail du secteur I
*Demande
CO(I)
Consommation de bien I
*Revenu
YHO
;
Revenu du ménage
iv) Les données
A présent, il faut entrer les données. Ceci se fait avec la
commande TABLE command très utile pour les variables
multidimentionnelle. Le syntaxe est la suivante : TABLE
nom(ensemble
en
ligne,
ensemble
en
colonne) description.
description
Exemple:
TABLE DP(*,I) Données par secteur
XSO
LDO
KDO
CO
PO
ro
;
BIEN
26100.0
13320.0
12780.0
26100.0
1.0
1.25
SER
21260.0
15540.0
5720.0
21260.0
0.85
1.25
Les valeurs associées aux variables et paramètres avec ne
seule dimension peuvent être entrées avec la commande
SCALAR :
SCALAR
YHO
wo
sigma
;
/ 47360.0/
/
0.75/
/
0.8 /
Exemple de déclaration de matrice :
TABLE DID(I,J) Consommation intermédiaire par secteur
AGR
IND
SER
AGR
120.0
2526.9
275.5
IND
1544.0
21709.1
5815.5
SER
136.0
11264.0
3349.0
Lorsque les données sont entrées avec un tableau, il est
nécessaire de faire un lien entre le tableau et la variable.
Dans l’exemple ci-dessous, la valeur de XSO(I) sera
trouvée dans le tableau DP à l’intersection de la ligne ayant
le nom XSO et de la colonne I.
XSO(I)
LDO(I)
KDO(I)
CO(I)
PO(I)
ro(I)
=
=
=
=
=
=
DP("XSO",I);
DP("LDO",I);
DP("KDO",I);
DP("CO",I);
DP("PO",I);
DP("ro",I);
v) Calcul de variables et calibration
D’autres variables et paramètres peuvent être calculés ou
calibrés à partir d’autres variables ou paramètres entrés
précédemment. A la fin de chaque calcul, il faut mettre un
“;”. L’ordre dans lequel ces variables et paramètres sont
calculés est très important car GAMS utilisera la dernière
valeur assignée à cette variable ou ce paramètre.
*Calcul des Volumes
LDO(I)
= LDO(I)/wo;
KDO(I)
= KDO(I)/ro(I);
XSO(I)
= XSO(I)/PO(I);
LSO
= SUM(I,LDO(I));
CO(I)
= CO(I)/PO(I) ;
*Production (Cobb-Douglas)
alpha(I)
= wo*LDO(I)/(PO(I)*XSO(I));
A(I)
= XSO(I)/((LDO(I)**alpha(I))*(KDO(I)**(1-alpha(I))));
vi) Présentation des paramètres et variables
Dans la feuille de résultats, les valeurs des paramètres ne
sont pas automatiquement données. L’option DISPLAY va
permettre de présenter ces variables. Le nom des paramètres
et des variables de référence sera entré sans dimension.
DISPLAY
sigma,delta,alpha,A;
2. Le modèle
i) Déclaration des variables
Toutes les variables qui apparaitront dans les équations
doivent être déclarées au préalable. La commande
VARIABLES commence cette procédure qui se termine par un
“;”.
VARIABLES
*Prix
w
r(I)
P(I)
Taux de salaire
Taux de rendement du capital dans le secteur I
Prix du bien I
*Production
XS(I)
Production du secteur I
*Facteurs
KD(I)
LD(I)
LS
;
demande de capital du Secteur I
demande de travail du secteur I
Offre totale de travail
ii) Déclaration des équations
Cette étape commence avec la commande EQUATIONS
suivie nom et de la description (optionnelle). Quand toutes
les équations sont déclarées, un “;” indique la fin.
EQUATIONS
*Production
SUPPLY(I)
LDEM(I)
*Revenu
INCH
*Demande
DGOOD
DSERV
*Prix
RETK(I)
;
Fonction de production pour le secteur I
demande de travail pour le secteur I
Revenu du ménage
Demande de biens
Demande de services
remuneration du capital du secteur I
iii) Assignement des équations
La ligne commence par le nom et la dimension suivis par
“..”.
.. Ensuite l’équation est définie et se termine par un “;”
Le terme =E= entre les termes de gauche et de droite de
l’équation signifie “égal à” à l’opposé de =G= or =L=
SUPPLY(I)..
XS(I)
=E=
A(I)*LD(I)**alpha(I)*KD(I)**(1-alpha(I))
LDEM(I)..
LD(I)
=E=
P(I)*alpha(I)*XS(I)/w;
INCH..
YH
=E=
SUM(I,w*LD(I))+SUM(I,r(I)*KD(I));
DGOOD..
C("SER")=E=
YH/(P("SER")+P("GOOD")*(P("SER")/
P("GOOD")*delta/(1-delta))**sigma);
DSERV..
C("GOOD")=E=
YH/(P("GOOD")+P("SER")*(P("GOOD")/
P("SER")*(1-delta)/delta)**sigma);
RETK(I)..
;
r(I )
=E=
(P(I)*XS(I)-w*LD(I))/KD(I);
iv) Procédure d’initialisation
Pour toutes les variables déclarées précédemment, une valeur
doit etre assignée. Pour résoudre les équation GAMS
commence à partir des valeurs de référence. Pour les variables
endogènes (celles don’t la valeur changera après simulation) le
suffixe .L (pour level) est utilisé :
XS.L(I)
LD.L(I)
KD.L(I)
w.L
P.L(I)
r.L(I)
YH.L
C.L(I)
=
=
=
=
=
=
=
=
XSO(I);
LDO(I);
KDO(I);
wo;
PO(I);
ro(I);
YHO;
CO(I);
Pour les variables exogènes le suffixe .FX (pour fixed) est
utilisé :
*P(GOOD) est le numeraire, le capital est suppose
immobile entre les secteurs
* L’offre total de travail est exogène
P.FX("GOOD") = PO("GOOD");
LS.FX = LSO;
KD.FX("GOOD") =KDO("GOOD");
KD.FX("SER")=KDO("SER");
Dans les deux cas, la syntaxe est : le nom de la variable, le
suffixe, la dimension de la variable, le signe égal (=), la valeur
de référence définie dans le processus de calibration et le “:”.
Finalement deux lignes doivent être ajoutée pour la
résolution du système. La première pour définir le modèle
commençant par la commande MODEL suivie par un nom
(THEORY dans l’exemple), une brève description (MODELE
THEORIQUE), la liste des équations qui doivent être résolues
entre slashes et un “;”.
Quand toutes les équations déclarées sont à résoudre, le motclé est ALL à la place de le liste complète des équations.
MODEL THEORY MODELE THEORIQUE /ALL/;
SOLVE THEORY USING MCP;
IV. Lecture du fichier d’output GAMS
1. Echo print
S’il y a des erreurs dans le programme, seule cette partie sera
présentée.
Exemple : Il y a une parenthèse manquante à la fin du calcul
du paramètre alpha.
alpha Dans le echo print du programme
initial, GAMS mettra 4 astérisques (****)
**** sous la ligne ayant
l’erreur suivis d’un signe dollar ($) et d’un nombre
correspondant à une erreur spécifique.
95 alpha(I) = wo*LDO(I)/(PO(I)*XSO(I);
$8
****
96 A(I) = XSO(I)/((LDO(I)**alpha(I))*(KDO(I)**(1-alpha(I))));
A cause de cette erreur GAMS est incapable de résoudre le
modèle d’où la présence de l’erreur suivante dans les
dernières lignes du programme :
230
231
232
****
MODEL THEORY THEORITICAL MODEL /ALL/;
SOLVE THEORY USING MCP;
$257
A la fin de l’echo print une description des codes des
erreur est donnée dans l’ordre de manière à facilliter la
correction :
Error Messages
8 ')' expected
257 Solve statement not checked because of previous errors
2. Présentation des paramètres
Dans le procéssus de calibration, la commande DISPLAY
est utilisée pour présenter la valeur de certains paramètres
dans l’output. Les valeurs apparaissent à la fin de l’echo
print :
---105 PARAMETER SIGMA
function)
PARAMETER DELTA
----
105 PARAMETER ALPHA
Bien 0.510,
SER
0.731
=
0.800 Elasticité de Substitution (CES uti
=
0.554 Part (CES utility function)
Part (Cobb-Douglas production function)
3. Listes des équations
Cette section présente pour chaque équation sa forme
spécifique prenant en considération les valeurs des
paramètres et les ensembles. A la fin de chaque équation le
terme à gauche de l’équation est calculé et présenté par
LHS= " ". Lorsque la valeur a gauche diffère de celle à
droite, GAMS ajoute 3 astérisques (***).
***
---- SUPPLY
=E=
Production function for sector I
SUPPLY(GOOD)..
XS(GOOD) - (1.25)*KD(GOOD) - (0.75)*LD(GOOD) =E= 0 ; (LHS = 0)
SUPPLY(SER)..
XS(SER) - (1.4706)*KD(SER) - (0.8824)*LD(SER) =E= 0 ; (LHS = 0)
4. Liste des colonnes
GAMS imprime pour chaque variable, les bornes inférieures
et supérieures (lower) and (upper), le niveau calculé par le
solveur et la valeur du coefficient affectant la variable
actuelledans chaque équation. Si le coefficient est nonlinéaire, il est mis entre parenthèses. Ainsi dans l’exemple, la
variable apparait dans 5 équations LDEM(I), INCH and
RETK(I) et est non-linéaire et donc la valeur du coefficient
affectant w est mise entre parenthèses.
Column Listing
---- W
W
SOLVE THEORY USING MCP FROM LINE 231
Taux de salaire
(.LO, .L, .UP = -INF, 0.75, +INF)
(23680)
LDEM(BIENS)
(27626.6667) LDEM(SER)
(-38480)
INCH
(1.7371) RETK(BIENS)
(4.528) RETK(SER)
5. Modèle Statistiques
Cette section donne de l’information sur la taille et la non-linéarité du modèle.
BLOCK donne le nombre d’équations et de variables dans le modèle.
SINGLE donne le nombre de lignes et de colonnes générées par le solveurs.
NON-ZERO ELEMENTS fait référence au nombre de coefficients non nuls.
NON LINEAR N-Z indique le nombre de matrices non-linéaires dans le modèle.
CODE LENGH et CONSTANT POOL donnent le niveau de la complexité sur la nonlinéarité.
GENERATION TIME indique le temps mis pour générer la solution du modèle.
MODEL STATISTICS
BLOCKS OF EQUATIONS
BLOCKS OF VARIABLES
NON ZERO ELEMENTS
DERIVATIVE POOL
CODE LENGTH
GENERATION TIME
=
9
10
50
10
530
SINGLE EQUATIONS
SINGLE VARIABLES
NON LINEAR N-Z
CONSTANT POOL
0.000 SECONDS
1.4 Mb
WIN-18-100
12
16
33
17
6. Résumé du « solve »
S O L V E
MODEL
TYPE
SOLVER
S U M M A R Y
THEORY
MCP
MILES
**** SOLVER STATUS
**** MODEL STATUS
FROM LINE
231
1 NORMAL COMPLETION
1 OPTIMAL
RESOURCE USAGE, LIMIT
ITERATION COUNT, LIMIT
EVALUATION ERRORS
0.000
0
0
1000.000
10000
0
7. Solution
Dans cette section, GAMS donne la solution trouvée par le solveur ligne par
ligne et colonne par colonne. Pour chaque équation et chque variable,
GAMS nous donne les bornes (lower et upper),
upper) le niveau (level)
level et la
marge (marginal).
marginal Le point "." signifie 0.
---- EQU SUPPLY
Production function for sector I
LOWER
LEVEL
UPPER
MARGINAL
.
.
.
.
.
.
.
.
GOOD
SER
And here is an example of the variable listing:
LOWER
---- VAR W
W
-INF
Wage rate
LEVEL
0.750
UPPER
MARGINAL
+INF
.
8. Résumé du rapport
Cette section indique le nobre de lignes ou colonnes que GAMS a
considéré ainsi que le nombre d’erreurs :
**** REPORT SUMMARY :
0
NONOPT
0 INFEASIBLE
0 UNBOUNDED
0 REDEFINED
0
ERRORS
9. Résumé du fichier
Cette dernière section indique le nom des fichiers input et output. Dans
notre exemple : le fichier d’input est 0KIMM.GMS et celui d’output
0KIMM.LST avec leur localisation.
**** FILE SUMMARY
INPUT
OUTPUT
C:\MY DOCUMENTS\MIMAP\FORMATION Dakar\0KIMM.GMS
C:\WINDOWS\GAMSDIR\0KIMM.LST
http://www.gams.com

Documents pareils