설명
이 모델은 T. Rutherford의 '상태 변수 타겟팅' 모델의 변형입니다.
NLP 프레임워크'.
https://www.mpsge.org/nlptarget/
이 프로그램은 재귀적 NLP 방법을 사용하는 방법을 보여줍니다.
최소한의 비용으로 무한 수평 최적화 모델을 해결하기 위해
터미널 효과.
토마스 F. 러더퍼드
2005년 12월 1일
이는 EMP의 내장된 상보성 시스템 프레임워크를 사용합니다.
기여자: Jan-H. Jagla, 2009년 1월
소형 모델 유형 :메가 슬롯
카테고리 : 메가 슬롯 테스트 라이브러리
메인 파일 : empecs02.gms
EMP 내장 상보성 시스템에 대한 $title 테스트(EMPECS02,SEQ=428)
$onText
이 모델은 T. Rutherford의 '상태 변수 타겟팅' 모델의 변형입니다.
NLP 프레임워크'.
https://www.mpsge.org/nlptarget/
* 이 프로그램은 재귀적 NLP 방법을 사용하는 방법을 보여줍니다.
* 최소한의 비용으로 무한 수평 최적화 모델을 해결하기 위해
* 터미널 효과.
* 토마스 F. 러더퍼드
* 2005년 12월 1일
이는 EMP의 내장된 상보성 시스템 프레임워크를 사용합니다.
기여자: Jan-H. 자글라, 2009년 1월
$offText
t 기간 설정 /2005*2010/
tlast(t) 마지막 기간 /2010/
tfirst(t) 첫 번째 기간 /2005/;
매개변수
kvs 자본가치배분 / 0.3 /
델타자본감가상각률 / 0.07 /
r 기준이자율 / 0.05 /
g 성장률 / 0.02 /
phi 생산 규모가 더욱 빨라짐
L(t) 노동공급
kinit 초기 자본금
kterm 터미널 자본금
dfactor 할인계수;
L(t) = 거듭제곱(1+g, ord(t)-1);
kinit = 0.5 * kvs / (r + 델타);
dfactor(t) = power(1/(1+r), ord(t)-1);
파이 = 1 / kinit**kvs;
변수
C(t) 소비 1조 달러,
K(t) 자본금 1조 달러,
I(t) 1조 달러 투자,
Y(t) 생산량 감소 및 피해 비용
유틸리티 막시만드;
양수 변수 Y, C, K, I;
방정식
UTIL 목적 함수
CC(t) 소비
YY(t) 출력
KK(t) 자본수지
TERMCAP 최종 자본스톡 매개변수를 사용한 최종 자본스톡 제약;
유틸리티.. 유틸리티 =E= SUM(t, 10 * dfactor(t) * L(t) * LOG(C(t)/L(t)));
CC(t).. C(t) =E= Y(t) - I(t);
YY(t).. Y(t) =E= phi * L(t)**(1-kvs) * K(t)**kvs;
KK(t).. K(t) =L= (1-델타)**10 * K(t-1) + 10 * I(t-1) + kinit$tfirst(t);
TERMCAP.. kterm =E= sum(tlast, (1-delta)**10 * K(tlast) + 10 * I(tlast));
매개변수 kterm /all/을 사용하여 Ramsey NLP 모델을 모델링합니다.
C.L(t) = 1; C.LO(t) = 0.01;
KL(t) = 1; K.LO(t) = 0.01;
I.L(t) = 1;
Y.L(t) = 1;
변수
KTERMV 터미널 자본금;
방정식
TERMCAPV 최종 자본스톡 변수가 있는 최종 자본스톡 제약조건
SSTERM 최종 자본금 변수에 대한 1차 조건;
*NLP의 제약 조건 TERMCAP을 TERMCAPV로 대체합니다.
*매개변수 kterm 대신 변수 KTERMV 사용
TERMCAPV.. KTERMV =E= sum(tlast, (1-delta)**10 * K(tlast) + 10 * I(tlast));
*최종자본스톡 변수의 1차 조건
SSTERM.. sum(tlast(t),I(t)/I(t-1) - Y(t)/Y(t-1)) =E= 0;
*EMP 모델 설정
새로운 모델 /UTIL,CC,YY,KK,TERMCAPV,SSTERM/;
$onEcho > "%emp.info%"
듀얼쿠 SSTERM KTERMV
$offEcho
emp를 사용하여 새로운 최대화 UTILITY를 해결합니다.
*참조 파일과 생성된 파일 비교
'sed "2d" "%메가 슬롯scrdir%emp.%메가 슬롯scrext%" > "%메가 슬롯scrdir%empmod.%메가 슬롯scrext%"'를 실행합니다.
'diff -I reslim -bw "%메가 슬롯scrdir%empmod.%메가 슬롯scrext%" "%메가 슬롯scrdir%ref.%메가 슬롯scrext%"'를 실행합니다.
abort$errorlevel 'empmod와 참조가 다릅니다';
$onEcho > "%메가 슬롯scrdir%ref.%메가 슬롯scrext%"
***********************************************
* 자세한 내용은 JAMS 옵션 "Dict"를 사용하세요.
***********************************************
변수 x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19
,x20,x21,x22,x23,x24,x26,u2,u3,u4,u5,u6,u7,u8,u9,u10,u11,u12,u13,u14
,u15,u16,u17,u18,u19,u20;
양수 변수 x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24;
양수 변수 u14,u15,u16,u17,u18,u19;
방정식 e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20
,e21,dL_dx1,dL_dx2,dL_dx3,dL_dx4,dL_dx5,dL_dx6,dL_dx7,dL_dx8,dL_dx9
,dL_dx10,dL_dx11,dL_dx12,dL_dx13,dL_dx14,dL_dx15,dL_dx16,dL_dx17
,dL_dx18,dL_dx19,dL_dx20,dL_dx21,dL_dx22,dL_dx23,dL_dx24;
e2..0 =E= x1 + x13 - x19;
e3..0 =E= x2 + x14 - x20;
e4..0 =E= x3 + x15 - x21;
e5..0 =E= x4 + x16 - x22;
e6..0 =E= x5 + x17 - x23;
e7..0 =E= x6 + x18 - x24;
e8..0 =E= -0.935248447822622*x7**0.3 + x19;
e9..0 =E= -0.948302982223762*x8**0.3 + x20;
e10..0 =E= -0.96153973651399*x9**0.3 + x21;
e11..0 =E= -0.974961254184091*x10**0.3 + x22;
e12..0 =E= -0.988570114227812*x11**0.3 + x23;
e13.. 0 =E= -1.00236893163742*x12**0.3 + x24;
e14..1.25 =G= x7;
e15.. 0 =G= - 0.483982307179293*x7 + x8 - 10*x13;
e16..0 =G= - 0.483982307179293*x8 + x9 - 10*x14;
e17..0 =G= - 0.483982307179293*x9 + x10 - 10*x15;
e18..0 =G= - 0.483982307179293*x10 + x11 - 10*x16;
e19.. 0 =G= - 0.483982307179293*x11 + x12 - 10*x17;
e20.. 0 =E= - 0.483982307179293*x12 - 10*x18 + x26;
e21.. x18/x17 - x24/x23 =E= 0;
dL_dx1.. -10/x1 + u2 =G= 0;
dL_dx2.. -9.71428571428571/x2 + u3 =G= 0;
dL_dx3.. -9.43673469387755/x3 + u4 =G= 0;
dL_dx4.. -9.1671137026239/x4 + u5 =G= 0;
dL_dx5.. -8.90519616826322/x5 + u6 =G= 0;
dL_dx6.. -8.65076199202713/x6 + u7 =G= 0;
dL_dx7.. + (-0.280574534346786*x7**(-0.7))*u8 + u14 - 0.483982307179293*u15
=G= 0;
dL_dx8.. + (-0.284490894667129*x8**(-0.7))*u9 + u15 - 0.483982307179293*u16
=G= 0;
dL_dx9.. + (-0.288461920954197*x9**(-0.7))*u10 + u16 - 0.483982307179293*u17
=G= 0;
dL_dx10.. + (-0.292488376255227*x10**(-0.7))*u11 + u17 - 0.483982307179293*u18
=G= 0;
dL_dx11.. + (-0.296571034268344*x11**(-0.7))*u12 + u18 - 0.483982307179293*u19
=G= 0;
dL_dx12.. + (-0.300710679491227*x12**(-0.7))*u13 + u19 - 0.483982307179293*u20
=G= 0;
dL_dx13.. u2 - 10*u15 + eps*x13 =G= 0;
dL_dx14.. u3 - 10*u16 + eps*x14 =G= 0;
dL_dx15.. u4 - 10*u17 + eps*x15 =G= 0;
dL_dx16.. u5 - 10*u18 + eps*x16 =G= 0;
dL_dx17.. u6 - 10*u19 + eps*x17 =G= 0;
dL_dx18.. u7 - 10*u20 + eps*x18 =G= 0;
dL_dx19.. - u2 + u8 + eps*x19 =G= 0;
dL_dx20.. - u3 + u9 + eps*x20 =G= 0;
dL_dx21.. - u4 + u10 + eps*x21 =G= 0;
dL_dx22.. - u5 + u11 + eps*x22 =G= 0;
dL_dx23.. - u6 + u12 + eps*x23 =G= 0;
dL_dx24.. - u7 + u13 + eps*x24 =G= 0;
* 기본이 아닌 경계를 설정
x1.lo = 0.01;
x2.lo = 0.01;
x3.lo = 0.01;
x4.lo = 0.01;
x5.lo = 0.01;
x6.lo = 0.01;
x7.lo = 0.01;
x8.lo = 0.01;
x9.lo = 0.01;
x10.lo = 0.01;
x11.lo = 0.01;
x12.lo = 0.01;
* 기본값이 아닌 수준 설정
x1.l = 1;
x2.l = 1;
x3.1 = 1;
x4.l = 1;
x5.1 = 1;
x6.l = 1;
x7.l = 1;
x8.l = 1;
x9.l = 1;
x10.l = 1;
x11.l = 1;
x12.l = 1;
x13.l = 1;
x14.l = 1;
x15.l = 1;
x16.l = 1;
x17.l = 1;
x18.l = 1;
x19.l = 1;
x20.l = 1;
x21.l = 1;
x22.l = 1;
x23.l = 1;
x24.l = 1;
모델 m / e2.u2,e3.u3,e4.u4,e5.u5,e6.u6,e7.u7,e8.u8,e9.u9,e10.u10,e11.u11
,e12.u12,e13.u13,e14.u14,e15.u15,e16.u16,e17.u17,e18.u18,e19.u19
,e20.u20,e21.x26,dL_dx1.x1,dL_dx2.x2,dL_dx3.x3,dL_dx4.x4,dL_dx5.x5
,dL_dx6.x6,dL_dx7.x7,dL_dx8.x8,dL_dx9.x9,dL_dx10.x10,dL_dx11.x11
,dL_dx12.x12,dL_dx13.x13,dL_dx14.x14,dL_dx15.x15,dL_dx16.x16
,dL_dx17.x17,dL_dx18.x18,dL_dx19.x19,dL_dx20.x20,dL_dx21.x21
,dL_dx22.x22,dL_dx23.x23,dL_dx24.x24 /;
m.limrow=0; m.limcol=0;
MCP를 사용하여 m을 해결합니다.
$offEcho