설명
이것은 책의 섹션 1.3.1에서 채택된 다중 제품 조립 모델입니다. 확률론적 프로그래밍 강의: Alexander Shapiro의 모델링 및 이론, 다린카 덴체바(Darinka Dentcheva)와 안제이 루슈친스키(Andrzej Ruszczynski). 제조업체는 m개의 부품을 주문하여 n개의 제품을 생산합니다. 공급업체. 첫 번째 단계에서 제조업체는 각 제품의 단위 수를 결정합니다. 부품을 주문하고 제품의 (무작위) 요구 사항을 관찰한 후 두 번째 단계에서는 각 제품의 단위 수를 결정하고 판매하다. 목표는 전체 이익을 극대화하는 것입니다. 이 모델에서 무작위 수요는 이산 무작위 변수로 모델링됩니다. 또는 포아송 분포. 이 모델은 Lindo 및 de와 같은 솔버를 사용하여 풀 수 있습니다. 기고자: Yanchao Liu, 2012년 1월.
소형 모델 유형 :SP
카테고리 : 피망 슬롯 EMP 라이브러리
메인 파일 : sku1sp.gms
$title 이산 및 포아송 수요 분포를 갖춘 다중 제품 조립 모델(SKU1SP,SEQ=92)
$onText
이는 이 책의 섹션 1.3.1에서 채택된 다중 제품 조립 모델입니다.
확률론적 프로그래밍 강의: Alexander Shapiro의 모델링 및 이론,
다린카 덴체바(Darinka Dentcheva)와 안제이 루슈친스키(Andrzej Ruszczynski).
제조업체는 m개의 부품을 주문하여 n개의 제품을 생산합니다.
공급업체. 첫 번째 단계에서 제조업체는 각 제품의 단위 수를 결정합니다.
부품을 주문하고 제품의 (무작위) 요구 사항을 관찰한 후
두 번째 단계에서는 각 제품의 단위 수를 결정하고
판매하다. 목표는 전체 이익을 극대화하는 것입니다.
이 모델에서 무작위 수요는 이산 무작위 변수로 모델링됩니다.
또는 포아송 분포.
이 모델은 Lindo 및 de와 같은 솔버를 사용하여 풀 수 있습니다.
기고자: Yanchao Liu, 2012년 1월.
$offText
$ifI가 %피망 슬롯emp%==lindo $set doDisc 1이 아닌 경우
$doDisc가 설정되지 않은 경우 $set doDisc 0
$if %doDisc%==1 $set NSCEN 9
$설정되지 않은 경우 NSCEN $set NSCEN 100
세트 i 제품 /i1*i2/
j 부분 /j1*j5/;
테이블 데이터(*,*)
j1 j2 j3 j4 j5 l q d
c 10 30 10 100 50
v 1 8 2 30 10
i1 10 5 5 1 1 500 1200 10
i2 8 5 0 2 1 600 3000 20;
매개변수
a(i,j) 제품 i 단위를 만드는 데 j 부분이 몇 개 필요합니까?
c(j) 파트 j의 한 단위를 조달하는 비용
v(j) j 부분의 잔존 가치
l(i) 제품 i 단위의 제조 비용
q(i) 제품 i 단위의 판매 가격
d(i) 제품 i의 수요;
a(i,j) = 데이터(i,j);
c(j) = 데이터('c',j);
v(j) = 데이터('v',j);
l(i) = 데이터(i,'l');
q(i) = 데이터(i,'q');
d(i) = 데이터(i,'d');
긍정적인 변수
x(j) 첫 번째 단계에서 주문할 부품 j의 단위 수
z(i) 시나리오 s에서 내가 만들고 판매할 제품 단위 수
y(j) 시나리오 s에서 남겨질 부품 j의 단위 수
가변 이익;
방정식
obj는 이익을 정의합니다(비용의 음수).
defy(j)는 남은 y 부분을 정의합니다.
ubz(i) 판매된 제품은 수요를 초과할 수 없습니다.
obj.. 이익 =e= -sum(j,c(j)*x(j)) - (sum(i,(l(i)-q(i))*z(i)) - sum(j,v(j)*y(j)));
defy(j).. y(j) =e= x(j) - sum(i, a(i,j)*z(i));
ubz(i)..z(i) =l= d(i);
모델 sku1 /all/;
*lp를 사용하여 sku1 최대 이익을 해결합니다.
파일 emp / '%emp.info%' /; 비우다;
if (%doDisc%,
$onPut
randvar d('i1') 이산 0.1 5 0.2 10 0.7 12
randvar d('i2') 이산 0.1 17 0.2 20 0.7 25
$offPut
그렇지 않으면
$onPut
randvar d('i1') 포아송 10
randvar d('i2') 포아송 20
$offPut
);
putclose '2단계 z y d ubz 무시';
s 시나리오 설정 / s1*s%NSCEN% /
매개변수
s_d(s,i) 확률변수 구현
s_y(s,j) 시나리오별 y 수준
시나리오별 s_z(s,i) z2
s_x(s,j) x 시나리오별(모든 시나리오에서 동일해야 함)
s_profit(s) 시나리오별 이익;
dict / s를 설정하십시오. 시나리오.''
디. 랜드바르. s_d
y. 수준. s_y
z. 수준. s_z
x. 수준. s_x
이익 수준. s_이익/;
$ifI가 %피망 슬롯emp%==lindo $goTo contsolve가 아님
$echo STOC_NSAMPLE_STAGE=%NSCEN% > lindo.opt
sku1.opt파일 = 1;
$label 해결
emp 시나리오 dict를 사용하여 sku1 최대 이익을 해결합니다.
s_d, s_y, s_z, s_x, x.l, s_profit,profit.l을 표시합니다.