Hi everyone, i’m begginner user in GAMS, and this group really helps
me in a number of ways.
I’m trying to make a simple CGE using a SAM from an official exercise
from IFPRI (so the SAM has to be right, at least seems to be).
But when i run my CGE model, i’m facing two kinds or error, depending
on what i’m trying to do :
- unbalanced SAM
- division by zero
Unbalanced Sam
I try to check if my SAM is balanced using “tdiff” but when i run my
GAMS code, the tdiff code detects an error and say :
— 25 rows 24 columns 64 non-zeroes
— 169 nl-code 24 nl-non-zeroes
So i’m thinking, i wrote the SAM wrong (inside the GAMS code), so i
included it using excel and gdxxrw.exe, but still the same error…
But my SAM has to be right, then i exclude the SAM checking “tdiff”
but…
division by zero
when i run it without the tdiff checking i get this :
— Error at line 181: division by zero (0) (=> line
181 is : theta(A,C) = (SAM(A,C)/P0(C))/QA0(A); )
— Error at line 190: division by zero (0) (=> line
190 is : shry(H,F) = SAM(H,F)/SAM(‘TOTAL’,F); )
So the trouble still seems to come from the SAM, but my SAM seems to
be right.
i think i made some mistakes in my spelling GAMS code.
I would be really grateful if you could help me with this, i’m stuck
on it since almost a week…
Thanks,
Melaine
SETS
AC Set Global
/AGR-A activités agricoles
NAGR-A activités non agricoles
AGR-C comm agri
NAGR-C comm non agri
LAB travail
CAP capital
U-HDD Menages Urbains
R-HDD Ménages ruraux
TOTAL Compte total dans la SAM/
;
SET
ACNT(AC) Tous les elements de AC sauf TOTAL ;
ALIAS(ACNT,ACNTP) ;
ACNT(AC)=YES;
ACNT(‘TOTAL’)=NO;
SETS
A(AC) activités /AGR-A, NAGR-A/
C(AC) commodités /AGR-C, NAGR-C/
F(AC) Facteurs /LAB,CAP/
H(AC) Menages /U-HDD,R-HDD/
;
alias(ac,acp); alias(c,cp); alias (f,fp); alias(h,hp) ;
PARAMETERS
ad(a) Parametre d’efficacité dans la fct de pro pour activité a
CPI Consumer Price index
cwts(c) poids de la commodité c dans le CPI
shry(h,f) part du ménage H dans les revenus du facteur F
qfs(f) Offre du facteur F
alpha(f,a) part de la valeur ajoutée du facteur F dans l’activité A
Beta(c,h) Part du ménage H dans la dépense de conso de la commodité C
Theta(a,c) Rendement de l’output C par unité d’activité A
;
-----------------------Matrice de comptabilité
sociale------------------------
$CALL GDXXRW.EXE SAM.xls par=SAM rng=A1:I9
Parameter SAM(AC,ACP);
$GDXIN sam.gdx
$LOAD SAM
$GDXIN
$ontext
Table SAM(AC,ACP)
AGR-A NAGR-A AGR-C NAGR-C LAB CAP U-HDD R-HDD
AGR-A 125
NAGR-A 150
AGR-
C
50 75
NAGR-
C
100 50
LAB 62 55
CAP 63 95
U-HDD
60 90
R-HDD
57 68
$offtext
;
*------------------------------------------------------------------------------
*
VARIABLES
YF(h,f) Revenus du ménage H tirés du facteur F
YH(h) Revenus du ménage H
P(c) Prix sur le marché de la commodité C
PA(a) Prix de l’activité A
Q(c) Niveau output pour la commodité C
QA(a) Niveau activité A
QF(f,a) Demande de activité A pour le facteur F
QH(c,h) Consommation du ménage H en commodité C
WF(f) Prix du facteur F
;
EQUATIONS
*------------------------------------------------------------------------
*
-
DECLARATION
EQUATIONS *
*------------------------------------------------------------------------
*
-------BLOC PRODUCTION ET ECHANGES----------------------
FnProd(a) Fonction de production de l’activité A
DdeFacteur(f,a) Demande de facteurs F
PxAct(a) Prix de l’activité A
QteOutput(c) Quantité d’output C
----------BLOC INSTITUTIONNEL---------------------------
RevFact(h,f) Revenus des facteurs
RevMnge(h) Revenus des ménages
DdeMnge(c,h) Demande des ménages
-------------BLOC SYSTEME DE CONTRAINTE------------------
EqMcheFact(f) Equilibre sur le marché des facteurs
EqMcheOutput(c) Equilibre marché outputs
NormaPx Equation de normalisation des prix
;
*------------------------------------------------------------------------
*
-
ECRITURE
EQUATIONS *
*------------------------------------------------------------------------
*
----------------------BLOC PRODUCTION ET
ECHANGES-----------------------
FnProd(a) … QA(a) =E= ad(a)*prod((f),
QF(f,a)*alpha(f,a)) ;
- Niv Act A = Param.eff.fct.Prod * Prod(demande de A pour F, % de VA
de F ds A*
Ddefacteur(f,a) … WF(f) =E= (alpha(f,a)*PA(a)*QA(a))/
QF(f,a) ;
- Prix du facteur F = (% VA(f) dans (a)*Px act(a)Niv.act(a))/Dde (A)
pour (F)
PxAct(a) … PA(a) =E= sum((c),
theta(a,c)*P(c)) ;
- Prix de act (a) = Rdt(C) par unité de (A)*Prix de la commodité
(C) *
QteOutput(c) … Q(c) =E= sum((a),
theta(a,c)*QA(a)) ;
- Qté de commodité (C) = Rdt (c) par unité de (A) * Niveau d’activité
(A) *
-----------------------------BLOC
INSTITUTIONS--------------------------
RevFact(h,f) … YF(h,f) =E= shry(h,f)*WF(f)*sum((a), QF(f,a)) ;
- Rev du mnge (H) tirés de (F) = Part mnge (H) ds Rev du fact (F)*px
de (F) * -
* sum((a), dde act(A) pour le
facteur (F)) *
RevMnge(h) … YH(h) =E= sum(f, YF(h,f)) ;
*Rev du mnge (H) = revenus tirés de l’ensemble des facteurs (F)
détenus
DdeMnge(c,h) … QH(c,h) =E= (beta(c,h)*YH(h))/P(c) ;
- Conso de (C) par (H) = (Part de (H) ds conso totale de (C)*Rev de
(H))/Px(C) *
-----------------------------BLOC
CONTRAINTES--------------------------
EqMcheFact(f) … sum(a, QF(f,a)) =E= qfs(f) ;
- Demande totale activités (A) pour facteurs (F) = Offre totale de
facteurs (F)*
EqMcheOutput(c) … Q(c) =E= sum(h, QH(c,h)) ;
- Quantité totale output (C) = Consommation totale d’output(C) par
menages (H) *
NormaPx … sum(c,cwts(c)*P(c)) =E= CPI ;
- Poids de l’ensemble des comm (C) dans CPI*Px des (C) = CPI
MODEL CGE1 Mon premier CGE /all/ ;
-----------------------------INTEGRATION
SAM----------------------------------
-----------------------Verification integrité de la
SAM-----------------------
$ontext
PARAMETER
tdiff(AC) column minus row total for account ac;
SAM(‘TOTAL’,ACNTP) = SUM(ACNT, SAM(ACNT,ACNTP));
SAM(ACNT,‘TOTAL’) = SUM(ACNTP, SAM(ACNT,ACNTP));
tdiff(ACNT) = SAM(‘TOTAL’,ACNT)- SAM(ACNT,‘TOTAL’);
DISPLAY SAM, tdiff;
$offtext
----------Declaration Parametres et variables par rapport à la
SAM------------
*Integration des variables et parametres qui vont servir au calcul de
la valeur
*initiale des parametres : alpha, beta, cwts, shry…
PARAMETERS
*The following parameters are used to define initial values of model
variables.
P0(C), PA0(A), Q0(C), QA0(A), QF0(F,A), QH0(C,H), WF0(F), YF0(H,F),
YH0(H) ;
*PRODUCTION AND COMMODITY BLOCK++++++++
P0(C) = 1;
PA0(A) = 1;
WF0(F) = 1;
Q0(C) = SAM(‘TOTAL’,C)/P0(C);
QA0(A) = SAM(‘TOTAL’,A)/PA0(A);
QF0(F,A) = SAM(F,A)/WF0(F);
alpha(F,A) = SAM(F,A)/SUM(FP,SAM(FP,A));
ad(A) = QA0(A)/PROD(F,QF0(F,A)**alpha(F,A));
theta(A,C) = (SAM(A,C)/P0(C))/QA0(A);
*INSTITUTION BLOCK+++++++++++++++++++++
QH0(C,H) = SAM(C,H)/P0(C);
YF0(H,F) = SAM(H,F);
YH0(H) = SAM(‘TOTAL’,H);
beta(C,H) = SAM(C,H)/SUM(CP, SAM(CP,H));
shry(H,F) = SAM(H,F)/SAM(‘TOTAL’,F);
*SYSTEM CONSTRAINT BLOCK+++++++++++++++
cwts(C) = SUM(H, SAM(C,H))/SUM((CP,H), SAM(CP,H));
cpi = SUM(C, cwts(C)*P0(C));
qfs(F) = SAM(F,‘TOTAL’)/WF0(F);
P.L(C) = P0(C);
PA.L(A) = PA0(A);
Q.L(C) = Q0(C);
QA.L(A) = QA0(A);
QF.L(F,A) = QF0(F,A);
QH.L(C,H) = QH0(C,H);
YF.L(H,F) = YF0(H,F);
WF.L(F) = WF0(F);
YH.L(H) = YH0(H);
SOLVE CGE1 using MCP ;
DISPLAY
ad, alpha, beta, cpi, cwts, qfs, shry, theta,
P.L, PA.L, Q.L, QA.L, QF.L, QH.L, WF.L, YF.L, YH.L;
\