exmcp4.gms : Hansen/Koopmans: 외부 방정식 - 예제 MCP 4

설명

--------------------------------------------
이 모델은 MCPLIB의 hanskoop.gms 버전입니다.
외부 방정식을 예제 및 테스트 사례로 사용하도록 수정되었습니다.
이것이 생산 모델이라면 방정식을 정의하는 데이터
파일에서 읽을 수 있으며 슬롯 사이트 추천 모델에 적용되지 않습니다.
그리고 외부 방정식

참조:
경제이론논문집 Vol. 5 (1972) 487-523

Hansen과 Koopmans가 제시한 불변 자본스톡 문제

제안된 알파 매개변수는 참조에서 0.7, 0.8, 0.9였습니다.
---------------------------------------------------------

소형 모델 유형 :슬롯 사이트 추천


카테고리 : 슬롯 사이트 추천 테스트 라이브러리


메인 파일 : exmcp4.gms

$title Hansen/Koopmans: 외부 방정식 - MCP 4 예(EXMCP4,SEQ=576)

$onText
  ---------------------------------------------------------
  이 모델은 MCPLIB의 hanskoop.gms 버전입니다.
  외부 방정식을 예제 및 테스트 사례로 사용하도록 수정되었습니다.
  이것이 생산 모델이라면 방정식을 정의하는 데이터
  파일에서 읽을 수 있으며 슬롯 사이트 추천 모델에 적용되지 않습니다.
  그리고 외부 방정식

  참조:
  경제이론논문집 Vol. 5 (1972) 487-523

  Hansen과 Koopmans가 제시한 불변 자본스톡 문제

  제안된 알파 매개변수는 참조에서 0.7, 0.8, 0.9였습니다.
  ---------------------------------------------------------
$offText

세트
나는 '자본재 세트' / 1 * 2 /,
J '생산 공정' / 1 * 10 /,
CJ(J) '소비재를 생산하는 공정' / 1 * 6 /,
R '리소스 유형' / 1 * 2 /;

스칼라
p / 0.20 /,
알파 / 0.7 /
유틸리티 ;

옵션 유틸리티:6;

매개변수
A(I,J),
B(I,J),
C(R,J),
w(R) /
1 0.8
2 0.8
         /;

테이블 A(I,J)
        1 2 3 4 5 6 7 8 9 10
1 2 2 2 2 2 2 2 2 2 2
2 3 3 2 2 1 1 1 .5 1 .5 ;

테이블 B(I,J)
        1 2 3 4 5 6 7 8 9 10
1 1.5 1.5 1.5 1.5 1.5 1.5 4 3 1.5 1.5
2 2.7 2.7 1.8 1.8 .9 .9 .9 .4 2 1.5 ;

테이블 C(R,J)
        1 2 3 4 5 6 7 8 9 10
1 1 1 1 1 1 1 1 1 1 1
2 .5 1.5 1.5 .5 .5 1.5 1.5 .5 .5 1.5 ;

매개변수
xpt(J) /
1 .301
2 .302
3 .303
4 .304
5 .305
6 .306
7 .307
8 .308
9 .309
10 .310
/,
입트(I) /
1 .001
2 .002
/,
uipt(R) /
1 .001
2 .002
/;

긍정적인 변수
        x(J) '생산 공정의 활동 수준',
        y(I) '자본 입출력 제약에 대한 이중 변수',
        u(R) '자원 제약에 대한 이중 변수' ;

* v(x) = (x1 + 2.5x2)^p * (2.5x3 + x4)^p * (2x5 + 3x6)^p
방정식
        del(J) '라그랑지안의 파생물',
        del_ext(J) '라그랑지안의 파생물',
        capio(I) '자본 입출력 제약',
        Resource_ext(R) '자원 제약',
        리소스(R) '리소스 제약' ;
* f(x,u,y) = / -delv(x) \ / 0 A-알파B' C' \ / x \
* |    0 |  + | B-A 0 0 |*| 와이 |
* \ w / \ -C 0 0 / \ u /

del(J) .. - (p*(x("1") + 2.5*x("2"))**(p-1) *
                (2.5*x("3") + x("4"))**p *
                (2*x("5") + 3*x("6"))**p) $(ord(J) eq 1)

                - (p*2.5*(x("1") + 2.5*x("2"))**(p-1) *
                (2.5*x("3") + x("4"))**p *
                (2*x("5") + 3*x("6"))**p) $(ord(J) eq 2)

                - ((x("1") + 2.5*x("2"))**p *
                p*2.5*(2.5*x("3") + x("4"))**(p-1) *
                (2*x("5") + 3*x("6"))**p) $(ord(J) eq 3)

                - ((x("1") + 2.5*x("2"))**p *
                p*(2.5*x("3") + x("4"))**(p-1) *
                (2*x("5") + 3*x("6"))**p) $(ord(J) eq 4)

                - ((x("1") + 2.5*x("2"))**p *
                (2.5*x("3") + x("4"))**p *
                p*2*(2*x("5") + 3*x("6"))**(p-1)) $(ord(J) eq 5)

                - ((x("1") + 2.5*x("2"))**p *
                (2.5*x("3") + x("4"))**p *
                p*3*(2*x("5") + 3*x("6"))**(p-1)) $(ord(J) eq 6)

                + 합계(I, y(I)*(A(I,J)-알파*B(I,J)))
                + 합(R, u(R)*C(R,J)) =g= 0;

del_ext(J).. sum CJ, ord(CJ)*x(CJ)$CJ(J)
                + 합 I, (카드(J)+ord(I)) * y(I)
                + 합 R, (카드(J)+카드(I)+ord(R)) * u(R)
                =x= ord(J);

capio(I) .. sum(J, (B(I,J)-A(I,J))*x(J)) =g= 0;

자원(R) .. w(R) - 합계(J, C(R,J)*x(J)) =g= 0;

resources_ext(R).. sum J, ord(J)*x(J)
                =x= 카드(J)+ord(R);

$ 미리 설정
$ifI %system.filesys%==unix $set pre 'lib'
$ 세트 '64'

$set N exmcp4
$set c_cbN %pre%%N%c%suf%
$set f_cbN %pre%%N%f%suf%

모델 %N% '슬롯 사이트 추천 구현' / del.x, capio.y, Resource.u /;
model %c_cbN% 'C의 외부 방정식' / del_ext.x, capio.y, resources_ext.u /;
model %f_cbN% 'F77의 외부 방정식' / del_ext.x, capio.y, resources_ext.u /;

스칼라 totdist / 0 /;
매개변수 솔루션_x(J,*), 솔루션_y(I,*), 솔루션_u(R,*);

$onEchoV > runme.gms
x.l(J) = xipt(J);
y.l(I) = yipt(I);
u.l(R) = upt(R);
x.lo(CJ) = 2.0e-05;
mcp를 사용하여 %1을(를) 해결하세요.
x.lo(CJ) = 0;
mcp를 사용하여 %1을(를) 해결하세요.
Solution_x(J,'%1') = x.l(J);
Solution_y(I,'%1') = y.l(I);
Solution_u(R,'%1') = u.l(R);
totdist = totdist + sum J, abs(x.l(J)-solution_x(J,'exmcp4'));
totdist = totdist + sum I, abs(y.l(I)-solution_y(I,'exmcp4'));
totdist = totdist + sum R, abs(u.l(R)-solution_u(R,'exmcp4'));
유틸리티 = (x.l("1") + 2.5*x.l("2"))**p *
        (2.5*x.l("3") + x.l("4"))**p *
        (2*x.l("5") + 3*x.l("6"))**p;
"유틸리티 v(x) = "를 표시합니다. 유틸리티;
$offEcho

$ 확장 '.dll' 설정
$ifI %system.filesys%==unix $set ext '.so'
$ifI %system.platform%==dex $set ext '.dylib'
$ifI %system.platform%==dax $set ext '.dylib'

$ 세트 eq
$ifI %system.filesys%==unix $set eq "'"

$if set runall $set runC_cb '1' set runF_cb '1'

$ifThen nocomp를 설정하지 않음
$ ifI set runC_cb $call 슬롯 사이트 추천 complink lo=%슬롯 사이트 추천lo% --lang=c --files=exmcp4c_cb.c --libname=%c_cbN%%ext%
$ 오류 수준 1인 경우 $abort C 라이브러리 컴파일 오류
$ ifI set runF_cb $call 슬롯 사이트 추천 complink lo=%슬롯 사이트 추천lo% --lang=fortran90 --files=%eq%"gehelper.f90 msg2_f.f90 exmcp4f_cb.f90"%eq% --libname=%f_cbN%%ext%
$ 오류 수준 1인 경우 $abort Fortran90 라이브러리 컴파일 오류
$endIf

$ batInclude runme %N%
$if set runC_cb $batInclude runme %c_cbN%
$if set runF_cb $batInclude runme %f_cbN%

솔루션_x, 솔루션_y, 솔루션_u를 표시합니다.

(totdist < 1.0E-6)인 경우,
  "@@@@ #테스트에 통과했습니다."를 표시합니다.
그렇지 않으면
  abort totdist, "@@@@ #테스트가 통과되지 않았습니다. 자세한 내용은 exmcp4.lst를 검사하세요.";
;