설명
이 예는 NL 코드 생성의 버그를 해결합니다. 23.5.2 시스템(23.5 시리즈의 마지막)은 괜찮았습니다. 문제는 23.6.0 알파, 23.6.5 및 아마도 23.6 모두에 존재합니다. 기고자: Kent Zhao, 2011년 6월
소형 모델 유형 :무료 슬롯
카테고리 : 무료 슬롯 테스트 라이브러리
메인 파일 : nlcode5.gms
$title Dist 23.6의 NL 코드 버그에 대한 테스트(NLCODE5,SEQ=532)
$onText
이 예는 NL 코드 생성의 버그를 해결합니다.
23.5.2 시스템(23.5 시리즈의 마지막)은 괜찮았습니다.
문제는 23.6.0 알파, 23.6.5 및 아마도 23.6 모두에 존재합니다.
기고자: Kent Zhao, 2011년 6월
$offText
SETS t 기간 / 1*5 /
처음(t)
마지막(t)
t2(t);
tfirst(t) = ord(t)=1;
tlast(t) = ord(t)=카드(t);
t2(t) = ord(t) <= 카드(t)-2;
tfirst,tlast,t2를 표시합니다.
매개변수
알파 /0.33/
세타 /0.7/
감마_n(t)
Nbar /0.7921/
오전(t)
앤(티)
베타 /0.95/
델타 /0.04/
감마_m /0.04/
K0 /1/
gamma_n(t);
gamma_n(t) = -0.000321469;
* 실제 거듭제곱 대신 정수 거듭제곱을 사용합니다. ord(t)-1 > t.off
Am(t) = 1*power(1+gamma_m,t.off);
An(t) = 1*power(1+gamma_n(t),t.off);
변수
h(t) 총 사용 가능 시간
K(t) 자본스톡
;
방정식
EQ_h(t)h(t)
EQ_K(t) K(t)
EQ_KT
;
EQ_h(t)..h(t) =E= 1 - (Nbar/An(t))**(1/세타);
EQ_K(t2(t)).. K(t+2) =E=
(Am(t+1)*(K(t+1)/h(t+1))**알파)*h(t+1)
+ (1-델타)*K(t+1)
- 베타*(1-델타 + 알파*Am(t+1)*((K(t+1)/h(t+1))**(알파-1)))
*(Am(t)*((K(t)/h(t))**알파)*h(t) + (1-델타)*K(t) -K(t+1));
EQ_KT(tlast(t)).. (K(t )-(1-델타)*K(t-1))
/(K(t-1)-(1-델타)*K(t-2))
- (Am(t-1)*((K(t-1)/h(t-1))**알파)*h(t-1))
/(Am(t-2)*((K(t-2)/h(t-2))**알파)*h(t-2)) =E= 0;
모델 m /EQ_h, EQ_K, EQ_KT/;
K.lo(t) = 0.1;
h.lo(t) = 0.01;
h.up(t) = 1;
K.fx(tfirst) = K0;
$onText
h.l(t) = 0.8;
K.1(t) = K0;
$offText
Execute_loadpoint 'nlcode5';
옵션 cns = conopt;
CNS를 사용하여 m을 해결합니다.
abort$(m.solvestat <> %solveStat.normalCompletion%) 'solvestat 정상 완료가 예상됩니다.';
abort$(m.modelstat <> %modelStat.solved%) '예상된 modelstat 해결됨';
abort$(m.iterusd > 3) '솔루션에서 시작할 것으로 예상됩니다.', m.iterusd;
$onText
비교 및 다시 시작을 위해 솔루션 저장
Execute_unload 'badnl.gdx', h, k;
$offText