
这是运行之后出现的,不知道是什么原因?以下是程序:
$TITLE SAMBAL
$STITLE SAM BALANCING PROGRAM
SETS I MATRIX ACOUNTS/PRO products
PACT production activity
LAB labor
CAP capital
RES resident
FIRM firms
SLGOV local government subsidy
SCGOV central government subsidy
EXTRA extra system
LGOV local government
CGOV central government
ROW the rest of the world
ROMC the rest of domestic country
FCAP fixed capital
STOCK stock change
TOT total/
INT(I) ALL acounts except total;
ALIAS(I,J);
ALIAS(INT,JNT);
INT(I)=YES;
INT("TOT")=NO;
PARAMETER SAM0(I,J);
TABLE SAM0(I,J)
PRO PACT LAB CAP RES FIRM
PRO 87442972 22886934
PACT 158150639
LAB 25717220
CAP 30369332
RES 25717220 106845.3 36921263.7
FIRM 30183904.3
SLGOV 5357254
SCGOV 263415.5
EXTRA 3703220.5
LGOV 1059445 203395 306357
CGOV 74755.4 4237780 765892.5
ROW 3825000 78582.4
ROMC 42203288.6
FCAP 44782000 19474000
STOCK
TOT 204253683 158150639 25717220 30369332 67872329 57467513.2
+ SLGOV SCGOV EXTRA LGOV CGOV ROW
PRO 2057016 10193190 5201195 9330000
PACT
LAB
CAP
RES 5127000
FIRM
SLGOV -5357254
SCGOV -263415.5
EXTRA
LGOV 8067885
CGOV 99566
ROW
ROMC
FCAP 1646204.5 1919000 -7827670.6 -5426417.6
STOCK
TOT 3703220.5 11981502 5177993.9 3903582.4
+ ROMC FCAP STOCK TOT
PRO 36773044 28778400 1590932 204253683
PACT 158150639
LAB 25717220
CAP 30369332
RES 67872329
FIRM 30183904.3
SLGOV
SCGOV
EXTRA 3703220.5
LGOV 9637082
CGOV 5177993.9
ROW 3903582.4
ROMC 42203288.6
FCAP 5430244.6 59997360.9
STOCK 1590932 1590932
TOT 42203288.6 30369332 1590932
;
PARAMETER TOTO Total of initial matrix;
TOTO =SUM((INT,JNT),SAM0(INT,JNT));
SAM0(INT,JNT) =SAM0(INT,JNT)/TOTO;
PARAMETER NEG(I,J) Matrix of negative values;
NEG(INT,JNT)$(SAM0(INT,JNT)LT 0)=1;
SAM0(INT,JNT)$(SAM0(JNT,INT)LT 0)=SAM0(INT,JNT)-SAM0(JNT,INT);
SAM0(JNT,INT)$(SAM0(JNT,INT)LT 0)=0;
SCALARS delta Non-zero log parameter;
delta=0.0000000000001;
VARIABLES
SAM(I,J) New SAM with transpend negative values
OPT Distance variable;
EQUATIONS
OPTIMIZE Optimization criterion
CONSTRAINT(I) Equality between matrix and row sums
CONSTRAINT1 proportion sum set to one;
OPTIMIZE..
OPT =E= SUM((INT,JNT)$(SAM0(INT,JNT)NE 0),(SAM(INT,JNT))
*(LOG(SAM(INT,JNT)+delta)-LOG(SAM0(INT,JNT)+delta)));
CONSTRAINT(INT)..
SUM(JNT,SAM(INT,JNT)) =E= SUM(JNT,SAM(JNT,INT));
CONSTRAINT1..
SUM((INT,JNT),SAM(INT,JNT)) =E= 1;
SAM.L(I,J) =SAM0(I,J);
SAM.LO(INT,JNT) = 0;
SAM.UP(INT,JNT) = + INF;
SAM.FX(INT,JNT)$(NOT SAM0(INT,JNT))= 0;
OPT.L = 0;
MODEL SAMBAL/ALL/;
OPTION NLP = MINOS;
SOLVE SAMBAL USING NLP MINIMIZING OPT;
PARAMETER NSAM(I,J) New (balanced) matrix;
NSAM(INT,JNT) = SAM.L(INT,JNT);
NSAM(INT,JNT)$(NEG(INT,JNT) =1) = -NSAM0(JNT,INT);
NSAM(JNT,INT)$(NEG(INT,JNT) =1) = 0;
NSAM(INT,JNT) = NSAM(INT,JNT)*TOTO;
NSAM("TOT",JNT) = SUM(INT,NSAM(INT,JNT));
NSAM(INT,"TOT") = SUM(JNT,NSAM(INT,JNT));
file samfile /nsam.csv/;
samfile.pc=5;
samfile.pw=255;
samfile.nj=1;
samfile.nw=15;
samfile.nd=9;
samfile.nz=0;
samfile.nr=0;
put samfile;
put '';loop(I,put I.tl);put /;
loop(I,
put I.tl,loop(J,put NSAM(I,J));put/;
);
DISPLAY NSAM;
为什么按照教材上写的程序,还是出不来平衡的SAM结果,精通GAMS的前辈麻烦帮忙解惑,十分感谢~~也可以邮箱交流,
zxf_0324@126com。