슬롯 나라gms : 부품 공급 문제

설명

이 모델은 ps2_f_s.358 .. ps10_s_mn.396 모델을 기반으로 합니다.
하시모토 히데오, 하마다 고준, 호소에 노부히로.

다음 옵션을 사용하면 다음 모델을 실행할 수 있습니다.

ps2_f : 기본값
ps2_f_eff : --nsupplier=1
ps2_f_inf : --nsupplier=1 --alttheta=1
ps2_f_s : --useic=1
ps2_s : --useic=1
ps3_f : --nsupplier=3
ps3_s : --nsupplier=3 --uselicd=1
ps3_s_gic : --nsupplier=3 --useic=1
ps3_s_mn 첫 번째 해결: --nsupplier=3 --uselicd=1
          두 번째 해결 방법: --nsupplier=3 --uselicd=1 --altpi=1
          세 번째 해결 방법: --nsupplier=3 --uselicd=1 --alttheta=1
ps3_s_scp 첫 번째 해결: --nsupplier=3 --alttheta=2 --modweight=1 --useic=1
          두 번째 해결 방법: --nsupplier=3 --alttheta=2 --modweight=1 --uselicd=1 --uselicu=1
ps5_s_mn : --nsupplier=5 --uselicd=1 --nsamples=1000
ps10_s : --nsupplier=10 --uselicd=1
ps10_s_mn : --nsupplier=10 --uselicd=1 --nsamples=1000

또는 해당 원본 모델 파일을 다음에서 찾을 수 있습니다.
슬롯 나라 모델 라이브러리.

키워드: 비선형 계획법, 계약 이론, 본인-대리인 문제,
          역선택, 부품 수급 문제

소형 슬롯 나라 유형 :NLP


카테고리 : 슬롯 나라 모델 라이브러리


메인 파일 : 슬롯 나라gms

$title 부품 공급 문제(PARTSSUPPLY,SEQ=404)

$onText
이 모델은 ps2_f_s.358 .. ps10_s_mn.396 모델을 기반으로 합니다.
하시모토 히데오, 하마다 고준, 호소에 노부히로.

다음 옵션을 사용하면 다음 모델을 실행할 수 있습니다.

ps2_f : 기본값
ps2_f_eff : --nsupplier=1
ps2_f_inf : --nsupplier=1 --alttheta=1
ps2_f_s : --useic=1
ps2_s : --useic=1
ps3_f : --nsupplier=3
ps3_s : --nsupplier=3 --uselicd=1
ps3_s_gic : --nsupplier=3 --useic=1
ps3_s_mn 첫 번째 해결: --nsupplier=3 --uselicd=1
          두 번째 해결 방법: --nsupplier=3 --uselicd=1 --altpi=1
          세 번째 해결 방법: --nsupplier=3 --uselicd=1 --alttheta=1
ps3_s_scp 첫 번째 해결: --nsupplier=3 --alttheta=2 --modweight=1 --useic=1
          두 번째 해결 방법: --nsupplier=3 --alttheta=2 --modweight=1 --uselicd=1 --uselicu=1
ps5_s_mn : --nsupplier=5 --uselicd=1 --nsamples=1000
ps10_s : --nsupplier=10 --uselicd=1
ps10_s_mn : --nsupplier=10 --uselicd=1 --nsamples=1000

또는 해당 원본 모델 파일을 다음에서 찾을 수 있습니다.
슬롯 나라 모델 라이브러리.

키워드: 비선형 계획법, 계약 이론, 본인-대리인 문제,
          역선택, 부품 수급 문제
$offText

$nsupplier가 설정되지 않은 경우 $set nsupplier 2
$modweight를 설정하지 않은 경우 $set modweight 0
$useic을 설정하지 않은 경우 $set useic 0
$uselicd를 설정하지 않은 경우 $set uselicd 0
$uselicu를 설정하지 않은 경우 $set uselicu 0
$설정되지 않은 경우 usemn $set usemn 0
$설정되지 않은 경우 altpi $set altpi 0
$alttheta를 설정하지 않은 경우 $set alttheta 0
$설정되지 않은 경우 nsamples $set nsamples 1

세트
   i '공급업체 유형' / 1*%nsupplier% /
   t '몬테카를로 무승부' / 1*%nsamples% /;

별칭(i,j);

매개변수
   세타(i) '효율성'
   pt(i,t) '유형 확률'
   p(i) '현재 평가된 시나리오에 대한 유형의 확률'
   icweight(i) 'ic 제약 조건의 가중치';

스칼라 ru '예약 유틸리티' / 0 /;

* 데이터
$ifThen %nsupplier% == 1
$if %alttheta% == 0 매개변수 theta(i) / 1 0.2 /;
$if %alttheta% == 1 매개변수 theta(i) / 1 0.3 /;
매개변수 p(i) / 1 1 /;

$elseIf %nsupplier% == 2
매개변수
   세타(i) / 1 0.2, 2 0.3 /
   p(i) / 1 0.2, 2 0.8 /;

$elseIf %nsupplier% == 3
$if %alttheta% == 0 매개변수 theta(i) / 1 0.1, 2 0.2, 3 0.3 /;
$if %alttheta% == 1 매개변수 theta(i) / 1 0.1, 2 0.3, 3 0.31 /;
$if %alttheta% == 2 매개변수 theta(i) / 1 0.1, 2 0.4, 3 0.9 /;
$if %altpi% == 0 매개변수 p(i) / 1 0.2, 2 0.5, 3 0.3 /;
$if %altpi% == 1 매개변수 p(i) / 1 0.3, 2 0.1, 3 0.6 /;

$else
세타(i) = ord(i)/카드(i);
p(i) = 1/카드(i);
$endIf

loop(t, pt(i,t) = 균일(0,1));
pt(i,t) = pt(i,t)/sum(j, pt(j,t));
$if %nsamples% == 1pt(i,t) = p(i);

양수 변수
   x(i) "품질"
   b(i) "메이커 수익"
   w(i) "가격";

Variable Util "메이커의 유틸리티";

방정식
   obj "메이커의 유틸리티 기능"
   rev(i) "메이커의 수익 기능"
   pc(i) "참여 제약"
   ic(i,j) "인센티브 호환성 제약"
   licd(i) "인센티브 호환성 제약"
   licu(i) "인센티브 호환성 제약"
   mn(i) "단조성 제약";

obj.. Util =e= sum(i, p(i)*(b(i) - w(i)));

rev(i)..b(i) =e= sqrt(x(i));

PC(나)..
$if %modweight% == 0 w(i) - 세타(i) *x(i) =g= ru;
$if %modweight% == 1 w(i) - icweight(i)*x(i) =g= ru + theta(i);

ic(i,j).. w(i) - icweight(i)*x(i) =g= w(j) - icweight(i)*x(j);

licd(i)$(ord(i) < 카드(i))..
   w(i) - icweight(i)*x(i) =g= w(i+1) - icweight(i)*x(i+1);

licu(i)$(ord(i) > 1)..
   w(i) - icweight(i)*x(i) =g= w(i-1) - icweight(i)*x(i-1);

mn(i)$(ord(i) < 카드(i)).. x(i) =g= x(i+1);

* 0으로 나누는 것을 피하기 위해 변수에 하한값 설정
x.lo(i) = 0.0001;

Model m '단조성이 없는 부품 공급 모델'
/ 모두 - 백만
$if %useic% == 0 -ic
$if %uselicd% == 0 -licd
$if %uselicu% == 0 -licu
/;

모델 m_mn '단조성이 있는 부품 공급 모델' / m + mn /;

* 일부 솔루션 값을 저장하는 매개변수
매개변수
   Util_lic(t) 'MN 없이 해결된 유틸리티'
   Util_lic2(t) 'MN으로 해결된 유틸리티'
   x_lic(i,t) 'x는 MN 없이 해결됨'
   x_lic2(i,t) 'x는 MN으로 풀었습니다';

* 모델 해결
옵션 limRow = 0, limCol = 0;

루프(t,
   p(i) = pt(i,t);
   icweight(i) = theta(i)$(%modweight% 아님) + (1 - theta(i) + sqr(theta(i)))$(%modweight%);
   nlp를 사용하여 Util을 최대화하는 m을 해결합니다.

   Util_lic(t) = util.l;
   x_lic(i,t) = x.l(i);
   nlp를 사용하여 Util을 최대화하는 m_mn을 해결합니다.

   Util_lic2(t) = util.l;
   x_lic2(i,t) = x.l(i);
   옵션 solPrint = 끄기;
);

$if %nsamples% == 1 $exit

* ps5_s_mn과 같은 평가 및 표시 결과
매개변수
   MN_lic(t) 'MN 없이 풀린 x의 단조성'
   MN_lic2(t) 'MN으로 풀린 x의 단조성'
   Util_gap(t) 'Util_lic과 Util_lic2 사이의 간격'
   F(i,t) '누적 확률(Itho p. 42)'
   noMHRC0(i,t) 'i와 i-1 사이에 MHRC 조합이 없습니다(MHRC: 단조 위험률 조건)'
   noMHRC(t) '>=1: MHRC 사례 없음'
   p_noMHRC 'MHRC 사례 없음 [%]'
   p_noMN_lic 'MN 사례 없음 [%]'
   p_Util_gap '유틸리티 동일 사례 없음 [%]';

MN_lic(t) = sum(i, 1$(round(x_lic (i,t),10) < round(x_lic (i+1,t),10)));
MN_lic2(t) = sum(i, 1$(round(x_lic2(i,t),10) < round(x_lic2(i+1,t),10)));
Util_gap(t) = 1$(round(Util_lic(t),10) <> round(Util_Lic2(t),10));
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;

* MHRC와 MN이 갖고 있는 확률을 계산합니다.
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)/;
);
놓다 /;