prodsp2.gms : 확률론적 프로그래밍 예제 - DECIS용으로 재구성됨

설명

문제는 가구점의 제품 혼합을 결정하는 것입니다.
작업장: 목공 및 마감. 노동 시간당 노동 가용성
두 역은 제한되어 있습니다. 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 표시;