설명
스카프의 활동 분석 예 Scarf, H 및 Hansen, T, 경제 균형 계산. 예일 대학 출판부, 1973. GAMSLIB 모델 Scarpmcp에서와 같이 MCP를 명시적으로 구성하는 대신, 대신 이중 형식 최적화 문제의 KKT를 사용합니다. max_p sum (h, i(h) * log(expend_h(p))) - p'*sum(h, endow(.,h)) s.t A'p <= 0, p >= 0 소득보완관계와 결합된다. 여기서 expend_h는 다음과 같이 정의되는 지출 함수입니다. expend_h(p) = min_c p'*c s.t. u_h(c) >= 1 이에 대해서는 Rutherford의 1992년 논문 "Sequential Joint Maximization"에 자세히 설명되어 있습니다. 기고자: Michael Ferris, 2010년 10월
소형 모델 유형 :EQUIL
카테고리 : 슬롯 커뮤니티 EMP 라이브러리
메인 파일 : scarfemp-dual.gms
$title Scarf의 활동 분석 예(SCARFEMP-DUAL,SEQ=54)
$onText
Scarf의 활동 분석 예
Scarf, H 및 Hansen, T, 경제 균형 계산.
예일 대학 출판부, 1973.
GAMSLIB 모델 Scarpmcp에서와 같이 MCP를 명시적으로 구성하는 대신,
대신 이중 형식 최적화 문제의 KKT를 사용합니다.
max_p sum (h, i(h) * log(expend_h(p))) - p'*sum(h, endow(.,h))
s.t A'p <= 0, p >= 0
소득보완관계와 결합된다.
여기서 expend_h는 다음과 같이 정의되는 지출 함수입니다.
expend_h(p) = min_c p'*c s.t. u_h(c) >= 1
이에 대해서는 Rutherford의 1992년 논문 "Sequential Joint Maximization"에 자세히 설명되어 있습니다.
기고자: Michael Ferris, 2010년 10월
$offText
$call gamslib -q 스카프mcp
$include 스카프데이터.inc
옵션 limrow=0, limcol=0;
긍정적인
변수
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));
모델 스카프 / 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를 사용하여 스카프를 해결합니다.
* 나중에 테스트하기 위해 값을 저장합니다.
매개변수 yLev(s);
yLev(s) = y.l(s);
* 이제 emp를 사용하여 동등한 모델을 설정합니다.
변수 z;
방정식 objdef;
* 다음은 Cobb Douglas 함수(esub(h) = 1) 및 CES에 대한 작업입니다.
objdef..
z =e=
sum(h$(esub(h) ne 1), (i(h)/(1-esub(h)))*log(sum(c, alpha(c,h)*p(c)**(1-esub(h)))))
+sum(h$(esub(h) eq 1), i(h)*sum(c, alpha(c,h)*log(p(c))))
- sum(c, sum(h, e(c,h))*p(c));
모델 스카프emp /objdef, 이익, 수입/;
* 생산량(y) 및 기타 변수에 대한 초기값 설정
이익.m(s) = 1;
p.l(c) = 1;
i.l(h) = sum(c, p.l(c) * e(c,h));
파일 myinfo / '%emp.info%' /;
myinfo를 '평형'으로 설정;
put / 'max z p objdef 이익';
putclose / 'vi 수입 i';
emp를 사용하여 Scarfemp를 해결합니다.
y.l(s) = -profit.m(s);
abort$[smaxs, abs(yLev(s)-y.l(s)) > 1e-5] '나쁜 y 수준(평형)',
y.l, yLev;
* 이제 단일 opt 및 DualEqu로 재현 가능
* 생산량(y) 및 기타 변수에 대한 초기값 설정
이익.m(s) = 1;
p.l(c) = 1;
i.l(h) = sum(c, p.l(c) * e(c,h));
putclose myinfo 'dualEqu 소득 i';
emp max z를 사용하여 Scarfemp를 해결합니다.
y.l(s) = -profit.m(s);
abort$[smaxs, abs(yLev(s)-y.l(s)) > 1e-5] '잘못된 y 레벨(dualEqu)',
y.l, yLev;