설명
문제는 가구점의 제품 혼합을 결정하는 것입니다. 작업장: 목공 및 마감. 노동 시간당 노동 가용성 두 역은 제한되어 있습니다. 4가지 제품 클래스가 있으며, 각 클래스는 두 역의 특정 노동 시간. 각 제품은 특정 수익을 얻습니다. 이익을 얻고 상점은 외부에서 노동력을 구매할 수 있는 옵션을 갖습니다. 목표 이익을 극대화하는 것입니다. 문제는 300개의 시나리오에서 해결됩니다. PRODSP도 참조하세요.
대형 모델 유형 :DECIS lp
카테고리 : 피망 슬롯 모델 라이브러리
메인 파일 : prodsp2.gms
$title 확률론적 프로그래밍 예제, 피망 슬롯/DECIS용으로 재구성됨(PRODSP2,SEQ=200)
$onText
문제는 두 가지 가구를 갖춘 가구점의 제품 혼합을 결정하는 것으로 구성됩니다.
작업장: 목공 및 마감. 노동 시간당 노동 가용성
두 역은 제한되어 있습니다. 4가지 제품 클래스가 있으며, 각 클래스는
두 역의 특정 노동 시간. 각 제품은 특정 수익을 얻습니다.
이익을 얻고 상점은 외부에서 노동력을 구매할 수 있는 옵션을 갖습니다. 목표
이익을 극대화하는 것입니다.
문제는 300개의 시나리오에서 해결됩니다.
PRODSP도 참조하십시오.
King, A J, 확률론적 프로그래밍 문제: 예제
문학. Ermoliev, Y 및 Wets, RJ, Eds, Numerical
확률적 최적화 문제에 대한 기술. 스프링거 출판사,
1988, pp. 543-567.
키워드: 선형 계획법, 확률론적 계획법, 생산 계획
$offText
$decisalg가 설정되지 않은 경우 $set decisalg decism
세트
i '제품 클래스' / class-1*class-4 /
j '워크스테이션' / 작업-1*작업-2 /
s '노드' / s1*s300 /;
매개변수
c(i) '이익' / 클래스-1 12, 클래스-2 20, 클래스-3 18, 클래스-4 40 /
q(j) '비용' / 일-1 5, 일-2 10 /
h(j,s) '가용 노동력'
t(j,i,s) '필요한 노동력';
테이블 trand(j,*,i) '최소값 및 최대값'
1급 2급 3급 4급
일-1.분 3.5 8 6 9
일-1.최대 4.5 10 8 11
일-2.분 .8 .8 2.5 36
작업-2.max 1.2 1.2 3.5 44;
t(j,i,s) = 균일(trand(j,'min',i),trand(j,'max',i));
h('작업-1',s) = 일반(6000,100);
h('작업-2',s) = 일반(4000, 50);
*--------------------------------------------------
* 먼저 원래의 결정론적 등가물
* 이것은 스트레이트 LP입니다
*--------------------------------------------------
변수
EProfit '기대이익'
x(i) '판매된 제품'
v(j,s) '구매한 노동력';
양의 변수 x, v;
방정식
obj '예상 비용 정의'
lbal(j,s) '노동수지';
obj.. EProfit =e= sum(i, c(i)*x(i)) - 1/카드(들)*sum((j,s), q(j)*v(j,s));
lbal(j,s)..sum(i, t(j,i,s)*x(i)) =l= h(j,s) + v(j,s);
모델 믹스 '유니버스 모델' / obj, lbal /;
mix.solPrint$(카드 > 10) = %solPrint.quiet%;
이익을 극대화하는 lp를 사용하여 혼합을 해결합니다.
eprofit.l, xl을 표시합니다.
매개변수 stage1(*,i) '1단계 결과 유지';
stage1('결정적',i) = x.l(i);
*--------------------------------------------------
* 이제 DECIS 공식화
*--------------------------------------------------
방정식
obj2 '비용 함수'
lbal2(j) '노동수지'
extra '무한한 완화된 마스터 문제 방지';
변수
이익은 '극대화될 것'
v2(j) '구매한 노동력';
양수 변수 v2;
매개변수 t2(j,i) '평균값';
t2(j,i) = (trand(j,'min',i) + trand(j,'max',i))/2;
매개변수 h2(j) '평균값' / 작업-1 6000, 작업-2 4000 /;
obj2.. 이익 =e= sum(i, c(i)*x(i)) - sum(j, q(j)*v2(j));
lbal2(j)..sum(i, t2(j,i)*x(i)) =l= h2(j) + v2(j);
extra.. sum(i, c(i)*x(i)) =l= 1000000;
모델 mix2 'decis 모델' / obj2, lbal2, extra /;
* 시나리오를 활용한 확률론적 파일 출력
* 위에서 계산했습니다. 이로 인해 큰 확률론적 파일이 생성됩니다.
파일 stg / MODEL.STG /;
stg를 넣어;
'블록 분리'/를 입력합니다.
루프(들,
'BL BLOCK1 PERIOD2'를 넣습니다.(1/카드):8:6/;
loop((i,j), put 'x ',i.tl,' lbal2 ',j.tl,' ',t(j,i,s):12:6/;);
loop(j, put 'RHS lbal2 ',j.tl,' ',h(j,s):12:6/;);
);
넣어닫다;
* MINOS 옵션 파일 출력
파일 정리 / MINOS.SPC /;
걸레를 씌우다;
"시작"을 입력하세요/;
"1000행"을 입력하세요/;
"열 1000"을 입력하세요/;
"요소 100000"을 넣습니다/;
"끝"을 입력하세요/;
넣어닫다;
* 단계 할당
x.stage(i) = 1;
v2.stage(j) = 2;
lbal2.stage(j) = 2;
extra.stage = 1;
옵션 lp = %decisalg%;
이익을 최대화하는 lp를 사용하여 mix2를 해결합니다.
stage1('시나리오를 사용한 결정',i) = x.l(i);
*--------------------------------------------------
* DECIS가 모델을 정확하게 해결하도록 하세요.
* 확률론적 우주 옵션: 4 "ISTRAT"
*--------------------------------------------------
파일 decept / %decisalg%.opt /;
디셉트를 넣어;
'4 "ISTRAT"'를 입력하세요/;
넣어닫다;
mix2.opt파일 = 1;
이익을 최대화하는 lp를 사용하여 mix2를 해결합니다.
stage1('정확한 시나리오를 사용한 결정',i) = x.l(i);
*--------------------------------------------------
* 확률론적 파일의 더 나은 사용: 독립적인 분포
*--------------------------------------------------
스칼라 p;
p = 1/카드;
stg를 넣어;
'독립적 분리'/를 넣습니다.
loop((i,j,s), put 'x ',i.tl,' lbal2 ',j.tl,' ',t(j,i,s):12:6,' PERIOD2 ',p:8:6/;);
loop((j,s), put 'RHS lbal2 ',j.tl,' ',h(j,s):12:6,' PERIOD2 ',p:8:6/;);
넣어닫다;
* 이 문제는 너무 커서 정확하게 풀 수 없으므로
* 옵션 전략 4.
mix2.opt파일 = 0;
이익을 최대화하는 lp를 사용하여 mix2를 해결합니다.
stage1('decis indep.dist.',i) = x.l(i);
stage1 표시;