Vous êtes sur la page 1sur 37

Introduction au logiciel GAMS

Nouakchott

2003

I. Introduction
Le logiciel GAMS (General Algebraic Modeling
System) a t lorigine dvelopp par un groupe
dconomistes de la Banque Mondiale avec pour
objectif de faciliter la rsolution de grands modles
complexes et souvent non-linaires partir dun
ordinateur personnel. GAMS permet donc de rsoudre
un systme dquation simultanes non-linaires avec
ou sans fonction objectif optimiser.

(i) Simplicit (dans limplmentation)

(ii) Facilit des mises jour technique (grce de


nouveaux alogorithmes rgulirement)
grands avantages du logiciel GAMS.

Dans le logiciel initial, le programme devait tre cre en


format ASCII dans un diteur de texte traditionnel et
tournait avec une commande dos.
Le dveloppement rcent de linterface GAMS-IDE rend le
logiciel dutilisation plus facile. GAMS-IDE possde son
propre diteur de texte (compatible avec windows 95) avec
la possibilit de lancer et de suivre la compilation et
lexcution du programme lcran.
Un sous-module GAMS a rcemment t dvelopp pour
faciliter les transferts avec Excel ou dautres tableurs.

II. Architecture de la programmation


dans GAMS
1. Structure du code GAMS
Un MEGC programm dans GAMS peut se dcomposer en
3 modules :
Entre des donnes (tape 1),
Spcification du modle (tape 2)
Procdure de rsolution (tape 3).

Le graphique suivant donne une illustration densemble de la


structure du logiciel GAMS (les mots-cls sont indiqus en
gras).

Etape 3 : Rsolution
Solve : rsolution
prsentation des rsultats
Etape 2 : Modle
Variables : dclaration des
variables
Equations : dfinition et
dclaration des quations
Model : definitiondu modle

Etape 1 : donnes
set : dclaration et dfinitions
des ensembles
Parameter : declaration et
dfinition des paramtres
Assignation des donnes
display : prsente les
donnes intermdiares

Quelques rgles gnrales doivent tre respectes dans la


programmation GAMS :
z

Il faut toujours dclarer chaque lment avant de les


utiliser. Les ensembles et les paramtres doivent toujours
tre dclars au tout dbut du programme.

Mme si ce nest pas toujours ncessaire, une bonne


habitude est de toujours mettre un ; la fin dune
commande afin dviter des erreurs de compilation.

GAMS permets de mettre sur la mme ligne plusieurs


commande ou de mettre une commande sur chaque
ligne. Cette procdure peut aider rduire la longueur
du code ou faciliter limpression.
GAMS ne distingue pas les lettres minuscules des lettres
capitales.
Les noms donns Set, Parameters, Variable, Equation
ou Model doivent commencer par une lettre et ne
doivent pas avoir plus de 9 caractres. Les mots-clsne
doivent pas tre utiliss pour dclarer un lment..

Les principales fonctions mathmatiques sont les suivantes :

Multiplication

galit dans
une opration

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. Procdure de rsolution et prsentation des


rsultats
Aprs avoir crit le code GAMS, il sera sauvegarder avec
lextention.gms. Le nom du fichier doit respecter les
contraintes dos standards (8 caractres max sans
symbole).
La commande RUN dans le menu de GAMS-IDE (F9)
peut tre utilise.

Le fichier de rsultat cr par cette procdure a le mme


nom que le programme initial mais avec lextention .lst.
Ce fichier contient soit le programme initial avec
lidentification des erreurs compiles sil y en a, soit les
rsultats par dfaut dcrits ci-aprs :
Output dans le fichier nom.lst
rappel du programme initial
liste des quations
la liste des colonnes
les statistiques du modle
le rsum de la rsolution
les rsultats

III. Ecrire un programme GAMS


1.La calibration
La premire tape du processus de
modlisation consiste entrer les donnes,
dfinies comme de rfrence et valuer les
paramtres cohrents avec les donnes. Il
sagit du processus de calibration. Dans le cas
de la modlisation en EGC, les donnes de
rfrence sont gnralement tires de la MCS.
Les paramtres pouvant tre calibrs seront
dtermins avec ces donnes.

i) Option Title
Sans tre ncessaire, cette option permet dobtenir des
rsultats comprhensibles. Le texte la suite de la
commande $TITLE apparaitra en t^te de page sur chaque
nouvelle page de loutput. Un sous-titre peut tre galement
ajout avec la commande $STITLE.
$TITLE
Modle thorique
$STITLE
Capital immobile entre les secteurs
*Modle dune conomie ferme produisant 2 biens avec 2 facteurs
*Nouakchott - Janvier 2003

GAMS ne lit pas les lignes prcdes dune astrisque (*).


Une autre manire est de mettre le texte entre les commandes
suivantes : $ONTEXT et $OFFTEXT.

ii) Dfinition des ensembles


Ceci est trs utile pour les variables multidimentionnelles.
Ceci correspond lindexe dans les reprsentations
mathmatiques des modles.
SET I secteurs

/BIEN
SER

agriculture et industrie
services/

LA commande SET dfinit lensemble des secteurs I, dont


les lments sont BIEN et SER. Aprs chaque symbole (I,
GOOD and SER) il est possible de rajouter une lgende.

iii) Dfinition des paramtres


Les paramtres sont les lments du modle qui ne changent
pas aprs simulation telles les lasticits, les taux de taxe, les
paramtres dchelle,.
An plus de ces paramtres, les variables de rfrence sont
dfinis avec leur valeur lanne de base et resteront
invariables aprs simulation. Une manire pratique de dfinir
ces variables est dajouter un "O" aprs le nom de la variable
pour ne pas la confondre avec la vraie variable.
La dfinition des paramtres et des variables de rfrence
commence avec le mot-cl PARAMETER et se termine par un
;.

PARAMETER
A(I)
alpha(I)
delta
sigma

Coefficient dchelle (fonction de production Cobb-Dougla


parts (fonction de production Cobb-Douglas)
parts (fonction dutilit CES)
Elasticit de substitution (fonction dutilit 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 mnage

iv) Les donnes


A prsent, il faut entrer les donnes. Ceci se fait avec la
commande TABLE command trs utile pour les variables
multidimentionnelle. Le syntaxe est la suivante : TABLE
nom(ensemble
en
ligne,
ensemble
en
colonne) description.
description
Exemple:
TABLE DP(*,I) Donnes 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 associes aux variables et paramtres avec ne


seule dimension peuvent tre entres avec la commande
SCALAR :
SCALAR
YHO
wo
sigma
;

/ 47360.0/
/
0.75/
/
0.8 /

Exemple de dclaration de matrice :


TABLE DID(I,J) Consommation intermdiaire 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 donnes sont entres avec un tableau, il est


ncessaire de faire un lien entre le tableau et la variable.
Dans lexemple ci-dessous, la valeur de XSO(I) sera
trouve dans le tableau DP lintersection 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


Dautres variables et paramtres peuvent tre calculs ou
calibrs partir dautres variables ou paramtres entrs
prcdemment. A la fin de chaque calcul, il faut mettre un
;. Lordre dans lequel ces variables et paramtres sont
calculs est trs important car GAMS utilisera la dernire
valeur assigne cette variable ou ce paramtre.
*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) Prsentation des paramtres et variables


Dans la feuille de rsultats, les valeurs des paramtres ne
sont pas automatiquement donnes. Loption DISPLAY va
permettre de prsenter ces variables. Le nom des paramtres
et des variables de rfrence sera entr sans dimension.
DISPLAY

sigma,delta,alpha,A;

2. Le modle
i) Dclaration des variables
Toutes les variables qui apparaitront dans les quations
doivent tre dclares au pralable. La commande
VARIABLES commence cette procdure 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) Dclaration des quations


Cette tape commence avec la commande EQUATIONS
suivie nom et de la description (optionnelle). Quand toutes
les quations sont dclares, 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 mnage
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 lquation est dfinie et se termine par un ;
Le terme =E= entre les termes de gauche et de droite de
lquation signifie gal loppos 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) Procdure dinitialisation


Pour toutes les variables dclares prcdemment, une valeur
doit etre assigne. Pour rsoudre les quation GAMS
commence partir des valeurs de rfrence. Pour les variables
endognes (celles dont la valeur changera aprs 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 exognes le suffixe .FX (pour fixed) est


utilis :
*P(GOOD) est le numeraire, le capital est suppose
immobile entre les secteurs
* Loffre total de travail est exogne
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 rfrence dfinie dans le processus de calibration et le :.

Finalement deux lignes doivent tre ajoute pour la


rsolution du systme. La premire pour dfinir le modle
commenant par la commande MODEL suivie par un nom
(THEORY dans lexemple), une brve description (MODELE
THEORIQUE), la liste des quations qui doivent tre rsolues
entre slashes et un ;.
Quand toutes les quations dclares sont rsoudre, le motcl est ALL la place de le liste complte des quations.
MODEL THEORY MODELE THEORIQUE /ALL/;
SOLVE THEORY USING MCP;

IV. Lecture du fichier doutput GAMS


1. Echo print
Sil y a des erreurs dans le programme, seule cette partie sera
prsente.
Exemple : Il y a une parenthse manquante la fin du calcul
du paramtre alpha.
alpha Dans le echo print du programme
initial, GAMS mettra 4 astrisques (****)
**** sous la ligne ayant
lerreur suivis dun signe dollar ($) et dun nombre
correspondant une erreur spcifique.

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 rsoudre le


modle do la prsence de lerreur suivante dans les
dernires lignes du programme :
230
231
232
****

MODEL THEORY THEORITICAL MODEL /ALL/;


SOLVE THEORY USING MCP;

$257

A la fin de lecho print une description des codes des


erreur est donne dans lordre de manire facilliter la
correction :
Error Messages
8 ')' expected
257 Solve statement not checked because of previous errors

2. Prsentation des paramtres


Dans le procssus de calibration, la commande DISPLAY
est utilise pour prsenter la valeur de certains paramtres
dans loutput. Les valeurs apparaissent la fin de lecho
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 prsente pour chaque quation sa forme
spcifique prenant en considration les valeurs des
paramtres et les ensembles. A la fin de chaque quation le
terme gauche de lquation est calcul et prsent par
LHS= " ". Lorsque la valeur a gauche diffre de celle
droite, GAMS ajoute 3 astrisques (***).
***
---- 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 infrieures
et suprieures (lower) and (upper), le niveau calcul par le
solveur et la valeur du coefficient affectant la variable
actuelledans chaque quation. Si le coefficient est nonlinaire, il est mis entre parenthses. Ainsi dans lexemple, la
variable apparait dans 5 quations LDEM(I), INCH and
RETK(I) et est non-linaire et donc la valeur du coefficient
affectant w est mise entre parenthses.
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. Modle Statistiques
Cette section donne de linformation sur la taille et la non-linarit du modle.
BLOCK donne le nombre dquations et de variables dans le modle.
SINGLE donne le nombre de lignes et de colonnes gnres par le solveurs.
NON-ZERO ELEMENTS fait rfrence au nombre de coefficients non nuls.
NON LINEAR N-Z indique le nombre de matrices non-linaires dans le modle.
CODE LENGH et CONSTANT POOL donnent le niveau de la complexit sur la nonlinarit.
GENERATION TIME indique le temps mis pour gnrer la solution du modle.
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. Rsum 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 trouve 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. Rsum du rapport
Cette section indique le nobre de lignes ou colonnes que GAMS a
considr ainsi que le nombre derreurs :
**** REPORT SUMMARY :

0
NONOPT
0 INFEASIBLE
0 UNBOUNDED
0 REDEFINED
0
ERRORS

9. Rsum du fichier
Cette dernire section indique le nom des fichiers input et output. Dans
notre exemple : le fichier dinput est 0KIMM.GMS et celui doutput
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