설명
하시모토 히데오, 하마다 고준, 호소에 노부히로, "수치적 접근"
계약 이론: 역선택의 사례", GRIPS 토론
논문 11-27, 국립 정책 연구 대학원, 일본 도쿄,
2012년 3월.
키워드: 비선형 계획법, 계약 이론, 주인-대리인 문제,
역선택, 부품 수급 문제
소형 모델 유형 :NLP
카테고리 : 무료 슬롯 사이트 모델 라이브러리
메인 파일 : ps5_s_mn.gms
$title 부품 공급 문제(5개 유형, 무작위 p(i) 포함) (PS5_S_MN,SEQ=377)
$onText
하시모토 히데오, 하마다 고준, 호소에 노부히로, "수치적 접근"
계약 이론: 역선택의 사례", GRIPS 토론
논문 11-27, 국립 정책 연구 대학원, 일본 도쿄,
2012년 3월.
키워드: 비선형 계획법, 계약 이론, 본인-대리인 문제,
역선택, 부품 수급 문제
$offText
옵션 limCol = 0, limRow = 0, solPrint = off;
세트
i '공급업체 유형' / 0*4 /
아니요. 몬테카를로 무승부' / 1*1000 /;
별칭(i,j);
매개변수
세타(i) '효율성'
pt(i,t) '유형 확률'
p(i) '유형의 확률';
세타(i) = ord(i)/카드(i);
* 확률 생성
loop(t,pt(i,t) = 균일(0,1););
pt(i,t) = pt(i,t)/sum(j, pt(j,t));
* pt(i,"1") = 1/카드(i);
매개변수
F(i,t) '누적 확률(Itho p. 42)'
noMHRC0(i,t) 'i와 i-1 사이에 MHRC 조합이 없습니다.'
* (MHRC: 단조 위험률 조건)
noMHRC(t) '>=1: MHRC 사례 없음';
F(i,t) = sum(j$(ord(j) <= ord(i)), pt(j,t));
noMHRC0(i,t)$(ord(i) < 카드(i)) = 1$(F(i,t)/pt(i+1,t) < F(i-1,t)/pt(i,t));
noMHRC(t)$(sum(i, noMHRC0(i,t)) >= 1) = 1;
스칼라 ru '예약 유틸리티' / 0 /;
* 원/이중 변수의 정의
양수 변수
x(i) "품질"
b(i) "메이커 수익"
w(i) "가격";
Variable Util "메이커의 유틸리티";
방정식
obj "메이커의 유틸리티 기능"
rev(i) "메이커의 수익 기능"
pc(i) "참여 제약"
licd(i) "인센티브 호환성 제약"
licu(i) "인센티브 호환성 제약"
ic(i,j) "전역 인센티브 호환성 제약 조건"
mn(i) "단조성 제약";
obj.. Util =e= sum(i, p(i)*(b(i) - w(i)));
rev(i)..b(i) =e= x(i)**(0.5);
pc(i).. w(i) - 세타(i)*x(i) =g= ru;
licd(i).. w(i) - 세타(i)*x(i) =g= w(i+1) - 세타(i)*x(i+1);
licu(i).. w(i) - 세타(i)*x(i) =g= w(i-1) - 세타(i)*x(i-1);
ic(i,j).. w(i) - 세타(i)*x(i) =g= w(j) - 세타(i)*x(j);
mn(i).. x(i) =g= x(i+1);
* 0으로 나누는 것을 피하기 위해 변수에 하한값 설정
x.lo(i) = 0.0001;
모델
SB_lic / obj, rev, pc, licd /
SB_lic2 / obj, rev, pc, licd, mn /;
* 모델을 빠르게 해결하는 옵션
SB_lic.solveLink = 5;
SB_lic2.solveLink = 5;
매개변수
Util_lic(t) 'MN 없이 해결된 유틸리티'
Util_lic2(t) 'MN으로 해결된 유틸리티'
Util_gap(t) '이 두 util 사이의 간격'
x_lic(i,t) 'x는 MN 없이 풀었습니다.'
x_lic2(i,t) 'x는 MN으로 풀었습니다.'
MN_lic(t) 'MN 없이 풀린 x의 단조성'
MN_lic2(t) 'MN으로 풀린 x의 단조성';
루프(t,
p(i) = pt(i,t);
* MN 없이 모델 풀기
nlp를 사용하여 Util을 최대화하는 SB_lic을 해결합니다.
Util_lic(t) = util.l;
x_lic(i,t) = x.l(i);
MN_lic(t) = sum(i, 1$(round(x.l(i),10) < round(x.l(i+1),10)));
* MN을 사용하여 모델 해결
nlp를 사용하여 Util을 최대화하는 SB_lic2를 해결합니다.
Util_lic2(t) = util.l;
x_lic2(i,t) = x.l(i);
MN_lic2(t) = sum(i, 1$(round(x.l(i),10) < round(x.l(i+1),10)));
);
Util_gap(t) = 1$(round(Util_lic(t),10) <> round(Util_Lic2(t),10));
* MHRC와 MN이 갖고 있는 확률을 계산합니다.
매개변수
p_noMHRC 'MHRC 사례 없음 [%]'
p_noMN_lic 'MN 사례 없음 [%]'
p_Util_gap '유틸리티 동일 사례 없음 [%]';
p_noMHRC = sum(t$(noMHRC(t) > 0), 1)/카드(t)*100;
p_noMN_lic = sum(t$(MN_lic(t) > 0), 1)/카드(t)*100;
p_Util_gap = sum(t$(Util_gap(t) > 0), 1)/card(t)*100;
p_noMHRC, p_noMN_LIC, p_Util_gap을 표시합니다.
* 요약용 CSV 파일 생성
파일 sol /solution_lic.csv/;
솔을 넣어;
sol.pc = 5;
sol.pw = 32767;
놓다 "";
loop(i, put "pt(i,t)";);
놓다 "" "" "" "";
loop(i, "x: MN 없이" 넣기;);
loop(i, "x: w/ MN"을 넣습니다;);
놓다 /;
놓다 "";
loop(i, put i.tl;);
put ">=1: MHRC 없음" "Util: MN 없음" "Util: MN 포함" "Util_gap: =1: 같지 않음";
loop(i, put i.tl;);
loop(i, put i.tl;);
"MN_lic: >=1: MN 없음" "MN_lic2: >=1: MN 없음"/;
루프(t,
t.tl을 넣어;
loop(i, put pt(i,t):10:5;);
MHRC(t)를 넣지 마십시오. Util_lic(t):20:10 Util_Lic2(t):20:10 Util_gap(t);
loop(i, put X_lic(i,t););
loop(i, put X_lic2(i,t););
MN_lic(t)를 넣습니다. MN_lic2(t)/;
);
놓다 /;