설명
Ermoliev 등의 모델, On Convergence of SJM
모델은 명시적 수요 함수를 사용합니다.
솔루션에서 x2('2') = 0인 계산 문제
게임 exc2x2 --sol=mcp1
이는 표준 Arrow Debreu 모델을 설정하고 MCP를 사용하여 해결합니다.
게임 exc2x2 --sol=mcp2
이는 MCP를 사용하여 해결된 Ermoliev 집계 내장 모델을 설정합니다.
게임 ex2x2 --sol=neg
이는 Ermoliev 임베디드 모델에서 Negishi 반복을 수행합니다. 즉
NLP가 "예산"의 고정 지점에 도달하려고 시도하는 순서
제약.
기고자: Michael Ferris, 2010년 10월
소형 모델 유형 :EQUIL
카테고리 : 무료 슬롯 게임 EMP 라이브러리
메인 파일 : exc2x2emp-dem.gms
$title 순수 교환 모델(즉, 생산 없음) (EXC2X2EMP-DEM,SEQ=58)
$onText
Ermoliev 등의 모델, On Convergence of SJM
모델은 명시적 수요 함수를 사용합니다.
솔루션에서 x2('2') = 0인 계산 문제
게임 exc2x2 --sol=mcp1
이는 표준 Arrow Debreu 모델을 설정하고 MCP를 사용하여 해결합니다.
게임 exc2x2 --sol=mcp2
이는 MCP를 사용하여 해결된 Ermoliev 집계 내장 모델을 설정합니다.
게임 ex2x2 --sol=neg
이는 Ermoliev 임베디드 모델에서 Negishi 반복을 수행합니다. 즉
NLP가 "예산"의 고정 지점에 도달하려고 시도하는 순서
제약.
기고자: Michael Ferris, 2010년 10월
$offText
$설정하지 않은 경우 sol $set sol mcp1
i /1*2/로 설정;
별칭(i,j);
매개변수 w1(j) '플레이어 1의 기부금' /
1 1
2 1 /,
w2(j) '플레이어 2의 기부' /
1 1 /;
변수 obj1, obj2, obj3;
양의 변수 p(j), x1(j), x2(j);
방정식 defobj1, defobj2, defobj3, 예산1, 예산2, 표준;
defobj1..obj1 =e= x1('2');
예산1..
sum(j, p(j) * x1(j)) =l= sum(j, w1(j)*p(j));
defobj2..obj2 =e= sqrt(x2('1')*x2('2'));
예산2..
sum(j, p(j) * x2(j)) =l= sum(j, w2(j)*p(j));
* 시장 플레이어
defobj3.. obj3 =e= sum(j, p(j)*(x1(j) + x2(j) - w1(j) - w2(j)));
표준..
합(j, p(j)) =e= 1;
* 결합된 KKT는 상보성 시스템을 형성합니다.
* 해는 p = (0,1), x1 = (x11,1), x2 = (x21,0)입니다.
* 0 <= x11 + x21 <= 2
* 모형은 총대체성 가정을 만족하지 않습니다.
* 따라서 tatonment 프로세스가 실패합니다.
파일 myinfo /'%emp.info%'/;
myinfo를 '평형'으로 설정;
put / '최대 obj1 x1 defobj1 예산1';
put / '최대 obj2 x2 defobj2 예산2';
putclose / '최대 obj3 p defobj3 규범';
모델 nashemp /defobj1,defobj2,defobj3,budget1,budget2,norm/;
* 기능 평가 보호
* x1.lo(j) = 1e-6; x2.lo(j) = 1e-6;
x1.l(j) = 1; x2.l(j) = 1;
p.l(j) = 1;
예산1.m = 1; 예산2.m = 1; 규범.m = 1;
$if %sol% == mcp1 emp를 사용하여 nashemp를 해결합니다.
$onText
* 다음은 생성된 상보성 모델입니다.
방정식 d_x1(j), d_x2(j), d_p(j), Nbudget1, Nbudget2, Nnorm;
양의 변수 x1(j), x2(j), p(j), 람다1, 람다2;
자유변수 mu;
d_x1(j)..
-1$sameas(j,'2') + 람다1*p(j) =g= 0;
* "최대" 문제로 인해 예산을 음수로 다시 작성
N예산1..
sum(j, w1(j)*p(j)) =g= sum(j, p(j) * x1(j));
* x2(j)를 곱하여 이 제약 조건을 수정합니다.
d_x2(j)..
-0.5*sqrt(x2('1')*x2('2')) + 람다2*p(j)*x2(j) =g= 0;
* -0.5*sqrt(x2('1')*x2('2'))/x2(j) + 람다2*p(j) =g= 0;
N예산2..
sum(j, w2(j)*p(j)) =g= sum(j, p(j) * x2(j));
d_p(j)..
- x1(j) - x2(j) + w1(j) + w2(j) + mu =g= 0;
냠냠..
1 =e= 합(j, p(j));
모델 nashmcp /d_x1.x1,Nbudget1.lambda1,d_x2.x2,Nbudget2.lambda2,d_p.p,Nnorm.mu/;
lambda1.l = 예산1.m; lambda2.l = 예산2.m; mu.l = 규범.m;
nashmcp.iterlim = 0;
mcp를 사용하여 nashmcp를 해결합니다.
$offText
* 네기시 버전의 새로운 변수
변수 유틸리티, wVar(i) '내생적으로 계산된 네기시 가중치';
방정식
utilDef '네기시 버전의 유틸리티'
prodLimit(j)
예산(i) '소득 = 지출 설정';
utilDef .. 유틸리티 =e=
wVar('1') * log(x1('2'))
+ wVar('2') * 0.5 * sum(j, log(x2(j)));
예산(i) .. wVar(i) =e=
sum(j, (w1(j)$sameas(i,'1') + w2(j)$sameas(i,'2')) * p(j));
prodLimit(j) ..
x1(j) + x2(j) =l= w1(j) + w2(j);
모델 endogW / utilDef, prodLimit, 예산 /;
modelfixedW '기본 NLP 모델 - 고정 네기시 가중치' / utilDef, prodLimit /;
myinfo '* 네기시 모델'을 입력하세요.
넣다 / 'dualVar p prodLimit';
putclose / 'dualEqu 예산 wVar';
$%sol%이 아닌 경우 == mcp2 $goTo skimcp2
wVar.l(i) = 1;
* 가중치는 고유하므로 숫자를 추가하세요.
* 상대적인 의미로
wVar.fx('1') = 1;
emp를 사용하여 endogW 극대화 유틸리티를 해결합니다.
wVar.fx(i) = wVar.l(i);
nlp를 사용하여 fixW 최대화 유틸리티를 해결합니다.
$라벨 skimcp2
$if not %sol% == 부정 $goTo 건너뛰기
iters 설정 / iter1 * iter60 /;
스칼라
오류 / 1 /,
m '네기시 무게 조정 제어' / .95 /;
매개변수
wBarI(i,iters),
errI(iters);
wVar.fx(i) = 1/카드(i);
x1.lo(j) = 1e-6; x2.lo(j) = 1e-6;
루프 iters$[err > 1e-6],
wBarI(i,iters) = wVar.l(i);
nlp 최대화 유틸리티를 사용하여 fixW를 해결합니다.
wVar.fx(i) = (1-m)*wVar.l(i) +
m*(w1(i)$sameas(i,'1') + w2(i)$sameas(i,'2')) * prodlimit.m(i);
err = sum(i, abs(wVar.l(i) - wBarI(i,iters)));
errI(iters) = 오류;
;
* 보고 목적으로 가격 설정
p.l(j) = prodLimit.m(j);
wBarI, errI를 표시합니다.
$label 건너뛰기
x1.l, x2.l, p.l을 표시합니다.