설명
Subrahmanyam, Pekny 및 Reklaitis가 배치 설계에 대해 설명합니다. 우리가 알지 못하는 제품을 생산하는 유형의 화학 공장 미래 피망 슬롯. 여기서는 문제의 절반만을 제시합니다. 우리는 얼마나 많은지 결정해야합니다 건설할 플랜트, 유형, 건설 시기 및 운영 방법 그들.
소형 모델 유형 :SP
카테고리 : 피망 슬롯 EMP 라이브러리
메인 파일 : batchsp.gms
$title 확률론적 수요와 가격을 고려한 배치 화학 플랜트 설계(BATCHSP,SEQ=89)
$onText
Subrahmanyam, Pekny 및 Reklaitis가 배치 설계를 설명합니다.
우리가 알지 못하는 제품을 생산하는 유형의 화학 공장
미래 수요.
여기서는 문제의 절반만을 제시합니다. 우리는 얼마나 많은지 결정해야합니다
건설할 플랜트, 유형, 건설 시기 및 운영 방법
그들.
S. Subrahmanyam, J. F. Pekny 및 G. V. Reklaitis. 배치 설계
시장 불확실성에 시달리는 화학공장. 인디애나 화학. 결의안, 33,
2688-2701, 1994.
Ariyawansa, KA 및 Felt, AJ, 새로운 확률론적 컬렉션에 대해
선형 프로그래밍 테스트 문제, INFORMS Journal on Computing 16(3),
291-299, 2004.
$offText
세트
나는 작업 / i1*i4 /
j 장비 유형 / j1*j3 /
t 기간 / t1*t2 /
s 리소스 / s1*s7 /
구매를 위한 sb 리소스 / s1,s2 /
판매용 ss 리소스 / s4,s7 /
ijmap(i,j) 장비 유형 j별로 수행할 수 있는 작업;
별칭(t,tt);
매개변수
h(t) 기간 t(일) / t1 80, t2 80 /
p(i,j) 장비 유형 j를 사용한 작업 i의 처리 시간
m(i,j) 작업 i를 수행하기 위한 장비 유형 j의 용량(배치당 반응 단위로 측정)
q_s(ss,t) 기간 t의 자원 s에 대한 수요
q_b(sb,t) 기간 t에서 자원 s의 최대 구매
vs(ss,t) 기간 t에서 판매된 자원 ss의 가격
vb(sb,t) 기간 t에서 구매한 리소스 sb의 가격
예산(t) 기간 t / #t 100 /
cc(i,j,t) 기간 t / #i.#j.#t 0 /에서 작업 i에 대해 장비 유형 j를 사용하는 데 드는 운영 비용;
테이블 ijData(i,j,*)
procTime 용량
i1.j1 4 100
i1.j2 4 200
i2.j3 4 150
i3.j3 4 150
i4.j1 4 100
i4.j2 4 200;
p(i,j) = ijData(i,j,'procTime');
m(i,j) = ijData(i,j,'용량');
ijmap(i,j)$p(i,j) = 예;
테이블 ssData(ss,t,*)
(t1*t2).수요 t1.가격 t2.가격
s4 150 58 59
7 200 80 81;
q_s(ss,t) = ssData(ss,t,'수요');
vs(ss,t) = ssData(ss,t,'가격');
테이블 sbData(sb,t,*)
(t1*t2).구매 t1.가격 t2.가격
s1 200 23 24
2편 250 25 26;
q_b(sb,t) = sbData(sb,t,'구매');
vb(sb,t) = sbData(sb,t,'가격');
표 c(j,t) 단계 t에서 장비 유형 j에 대한 자본 투자 비용
t1 t2
j1 2500 2600
j2 3000 3100
j3 2800 2900;
표 f(s,i) 입출력 계수
i1 i2 i3 i4
s1 -1
s2 1 -1
s3 1 -1
s4 1
s5 1 -1
s6 1-1
s7 1;
변수
N(j,t) j 유형의 새로운 단위
TOTALN(j,t) j 유형의 누적 단위 수
Y(i,j,t) 기간 t 동안 장비 유형 j가 작업 i를 수행한 횟수
A(s,t) 기간 t가 끝날 때 재고에 있는 자원 s의 질량
B(i,j,t) 기간 t 동안 유형 j에 대해 i가 수행한 작업의 양(반응 단위로 측정)
QS(s,t) 기간 t에 판매된 자원 s의 질량
QS0(s,t) 수요보다 낮은 기간 t에 판매된 자원 s의 질량
QSPLUS(s,t) 수요보다 높은 기간 t에 판매된 자원 s의 질량
QB(s,t) 기간 t에 구입한 자원 s의 양
Z 목적 함수 값
;
양수 변수 A,QB,QS,QS0,QSPLUS,B;
정수 변수 n,totalN,y;
방정식
객체 목적 함수
procTime(j,t) 처리 시간
opExp(t) 운영 비용
cumulUnits(j,t) 누적 단위 수
matBal(s,t) 물질 수지
tasklim(i,j,t) 작업 제한
매출(ss,t) 매출
salesLim(ss,t) 판매 한도;
obj.. Z =e= 합계((t,ss), vs(ss,t)*QS0(ss,t))
- 합계((t,sb), vb(sb,t)*QB(sb,t))
- 합((j,t), N(j,t)*c(j,t))
- 합계((i,j,t), cc(i,j,t)*Y(i,j,t));
procTime(j,t).. sum(ijmap(i,j), p(i,j)*Y(i,j,t)) =l= h(t)*TOTALN(j,t) ;
opExp(t).. sum(ijmap(i,j), cc(i,j,t)*Y(i,j,t)) =l= 예산(t)*sum(j,TOTALN(j,t)) ;
cumulUnits(j,t).. TOTALN(j,t) =e= sum(tt$(ord(tt)<=ord(t)), N(j,tt)) ;
matBal(s,t).. A(s,t) =e= A(s,t-1) + sum(ijmap(i,j), f(s,i)*B(i,j,t)) - QS(s,t)$ss(s) + QB(s,t)$sb(s) ;
taskLim(ijmap(i,j),t).. B(i,j,t) =l= m(i,j)*Y(i,j,t) ;
매출액(ss,t).. QS(ss,t) =e= QS0(ss,t) + QSPLUS(ss,t) ;
salesLim(ss,t).. QS0(ss,t) =l= q_s(ss,t) ;
모델 화학 /all/;
A.up(s,t) = 400;
QB.up(sb,t) = q_b(sb,t);
Z를 최대화하는 mip를 사용하여 화학을 해결합니다.
파일 emp / '%emp.info%' /; put emp '* 문제 %피망 슬롯i%'/;
$onPut
jrandvar q_s('s4','t1') q_s('s7','t1') vs('s4','t1') vs('s7','t1')
0.4 0 0 51 70
0.6 150 200 58 80
jrandvar q_s('s4','t2') q_s('s7','t2') vs('s4','t2') vs('s7','t2')
0.4 0 0 50 71
0.6 150 200 59 81
2단계 q_s('s4','t1') q_s('s7','t1') vs('s4','t1') vs('s7','t1')
3단계 q_s('s4','t2') q_s('s7','t2') vs('s4','t2') vs('s7','t2')
$offPut
루프(t,
넣다 / '단계' (ord(t)+1):0:0;
if (ord(t)<card(t), loop(j, put N(j,t+1), TOTALN(j,t+1), cumulUnits(j,t+1)));
loop(sb, put QB(sb,t));
loop(ss, put QS(ss,t), QS0(ss,t), QSPLUS(ss,t) sales(ss,t) salesLim(ss,t));
loop(s, put A(s,t) matBal(s,t));
loop(ijmap(i,j), put Y(i,j,t) B(i,j,t) taskLim(i,j,t) );
loop(j, put procTime(j,t) );
opexp(t)를 넣어라;
);
putclose emp;
장면 시나리오 설정 / sc1*sc4 /;
매개변수
sc_q_s(scen,ss,t) 시나리오별 수요
sc_vs(scen,ss,t) 시나리오별 판매 가능한 자원 가격
sc_Y(scen,i,j,t) 시나리오에 따라 기간 t 동안 장비 유형 j가 작업 i를 수행한 횟수
sc_N(scen,j,t) 시나리오별 j 유형의 새 단위
sc_QS0(scen,s,t) 시나리오별 수요보다 낮은 기간 t에 판매된 자원의 질량
sc_QSPLUS(scen,s,t) 시나리오별 수요보다 낮은 기간 t에 판매된 자원의 질량;
dict/scen .scenario를 설정하세요.''
q_s.randvar. sc_q_s
대 .randvar. sc_vs
Y.레벨. sc_Y
N.레벨. sc_N
QS0.레벨. sc_QS0
QSPLUS .level. sc_QSPLUS /;
chem max Z를 해결하려면 emp 시나리오 dict를 사용하세요.
sc_q_s, sc_vs, sc_Y, sc_N, sc_QS0, sc_QSPLUS 표시;