scarfemp-primal.gms : Scarf의 활동 분석 예

설명

스카프의 활동 분석 예

Scarf, H 및 Hansen, T, 경제 균형 계산.
예일 대학 출판부, 1973.

GAMSLIB 모델 Scarpmcp에서와 같이 MCP를 명시적으로 구성하는 대신,
대신 이중 형식 최적화 문제의 KKT를 사용합니다.
   max_x,y 합계 (h, i(h) * log(u_h(x)))
   s.t Ay + sum_h endow(h) >= sum_h x(c,h), x,y >= 0

소득보완관계와 결합된다.

이에 대해서는 Rutherford의 1992년 논문 "Sequential Joint Maximization"에 자세히 설명되어 있습니다.

기고자: Michael Ferris, 2010년 10월

소형 모델 유형 :EQUIL


카테고리 : 무료 슬롯 사이트 EMP 라이브러리


메인 파일 : scarfemp-primal.gms

$title Scarf의 활동 분석 예(SCARFEMP-PRIMAL,SEQ=53)

$onText

Scarf의 활동 분석 예

Scarf, H 및 Hansen, T, 경제 균형 계산.
예일 대학 출판부, 1973.

GAMSLIB 모델 Scarpmcp에서와 같이 MCP를 명시적으로 구성하는 대신,
대신 이중 형식 최적화 문제의 KKT를 사용합니다.
   max_x,y 합계 (h, i(h) * log(u_h(x)))
   s.t Ay + sum_h endow(h) >= sum_h x(c,h), x,y >= 0

소득보완관계와 결합된다.

이에 대해서는 Rutherford의 1992년 논문 "Sequential Joint Maximization"에 자세히 설명되어 있습니다.

기고자: Michael Ferris, 2010년 10월
$offText

$call gamslib -q 스카프mcp
$include 스카프데이터.inc

긍정적인
변수

        p(c) 상품 가격,
        y(s) 생산,
        i(h) 소득;

방정식
        mkt(c) 상품 시장,
        이익 제로 이익,
        소득(h) 소득지수;

* CES 수요함수와 Cobb-Douglas 수요함수 구별:

mkt(c).. 합계(s, a(c,s) * y(s)) + 합계(h, e(c,h)) =g=

                합계(h$(esub(h) ne 1),
                (i(h)/sum(cc, alpha(cc,h) * p(cc)**(1-esub(h)))) *
                알파(c,h) * (1/p(c))**esub(h)) +

                합계(h$(esub(h) eq 1),
                i(h) * 알파(c,h) / p(c));

이익(들).. -sum(c, a(c,s) * p(c)) =g= 0;

소득(h).. i(h) =g= sum(c, p(c) * (e(c,h)+eps));

모델 스카프 / mkt.p,profit.y,income.i/;

p.l(c) = 1;
y.l(s) = 1;
i.l(h) = sum(c, p.l(c) * e(c,h));

p.lo(c) = 0.00001$(smax(h, alpha(c,h)) gt eps);

* 숫자 상품의 가격을 수정합니다.

i.fx(h)$(ord(h) eq 1) = i.l(h);

* 콥 더글라스의 경우
* esub(h) = 1;

mcp를 사용하여 스카프를 해결합니다.

* 나중에 테스트하기 위해 값을 저장합니다.
매개변수 xLev(c,h) 주어진 가격과 소득에 대한 폐쇄형 소비 값;
매개변수 yLev(s);
yLev(s) = y.l(s);

* 이제 emp를 사용하여 동등한 모델을 설정합니다.

변수 z;
양의 변수 x(c,h) 마샬 수요;
방정식 objdef, mktcons(c);

* 다음은 Cobb Douglas 함수(esub(h) = 1) 및 CES에 대한 작업입니다.

objdef..
  z =e=
  sum(h$(esub(h) ne 1), i(h)*(1/rho(h))*log(sum(c$alpha(c,h),lambda(c,h)*x(c,h)**rho(h))))

  +sum(h$(esub(h) eq 1), i(h)*sum(c$alpha(c,h), alpha(c,h)*log(x(c,h))));

mktcons(c).. sum(s, a(c,s) * y(s)) + sum(h, e(c,h)) =g= sum(h$alpha(c,h), x(c,h));

모델 스카프emp /objdef, mktcons, 수입/;

* 생산량(y) 및 기타 변수에 대한 초기값 설정
x.l(c,h) = 1;
y.l(s) = 1;
x.lo(c,h) = 0.00001$alpha(c,h);
x.fx(c,h)$(알파(c,h) 아님) = 0;
p.l(c) = 1;
mktcons.m(c) = p.l(c);
i.l(h) = sum(c, p.l(c) * e(c,h));

파일 myinfo / '%emp.info%' /;
myinfo를 '평형'으로 설정;
put / 'max z x y objdef -mktcons';
put / 'dualVar p - mktcons';
putclose / 'vi 수입 i';

* x에 대한 적절한 시작 값 찾기
i.fx(h) = i.l(h);
x.l(c,h) = 1$alpha(c,h);

emp를 사용하여 Scarfemp를 해결합니다.

xLev(c,h) = ((i.l(h)/sum(cc, alpha(cc,h) * p.l(cc)**(1-esub(h)))) *
                alpha(c,h) * (1/p.l(c))**esub(h))$(esub(h) ne 1) +

                (i.l(h) * alpha(c,h) / p.l(c))$(esub(h) eq 1);

abort$[smax(c,h), abs(x.l(c,h) - xLev(c,h)) > 1e-5] 'x 레벨이 동일하지 않음'
       xl, xLev;

* 이제 진짜로 풀어보세요
i.lo(h) = 0; i.up(h) = inf;
i.fx(h)$(ord(h) eq 1) = i.l(h);

emp를 사용하여 Scarfemp를 해결합니다.
abort$[smaxs, abs(yLev(s)-y.l(s)) > 1e-5] '나쁜 y 수준(평형)',
  y.l, yLev;

* 이제 단일 opt 및 DualEqu로 재현 가능
* 생산량(y) 및 기타 변수에 대한 초기값 설정
x.l(c,h) = 1;
y.l(s) = 1;
x.lo(c,h) = 0.00001$alpha(c,h);
x.fx(c,h)$(알파(c,h) 아님) = 0;
p.l(c) = 1;
mktcons.m(c) = p.l(c);
i.l(h) = sum(c, p.l(c) * e(c,h));

putclose myinfo 'dualEqu 수입 i'
              / 'dualVar p -mktcons';

* x에 대한 적절한 시작 값 찾기
i.fx(h) = i.l(h);
x.l(c,h) = 1$alpha(c,h);

emp max z를 사용하여 Scarfemp를 해결합니다.

xLev(c,h) = ((i.l(h)/sum(cc, alpha(cc,h) * p.l(cc)**(1-esub(h)))) *
                alpha(c,h) * (1/p.l(c))**esub(h))$(esub(h) ne 1) +

                (i.l(h) * alpha(c,h) / p.l(c))$(esub(h) eq 1);

abort$[smax(c,h), abs(x.l(c,h) - xLev(c,h)) > 1e-5] 'x 레벨이 동일하지 않음'
       xl, xLev;

* 이제 진짜로 풀어보세요
i.lo(h) = 0; i.up(h) = inf;
i.fx(h)$(ord(h) eq 1) = i.l(h);

emp max z를 사용하여 Scarfemp를 해결합니다.
abort$[smaxs, abs(yLev(s)-y.l(s)) > 1e-5] '잘못된 y 레벨(dualEqu)',
  y.l, yLev;