설명
이 문제는 다음을 만족하는 최소 비용 솔루션을 계산합니다.
미리 주어진 제품 포트폴리오의 수요. 수를 결정합니다
반응기의 크기와 배치 방식에 대한 일정을 제공합니다.
각 제품은 각 반응기에서 실행됩니다. 두 가지 시나리오가 있습니다(s1 20
제품. s2 40개 제품), 슬롯 무료체험로 --scenario s2를 추가하세요.
두 번째 시나리오를 지정하는 매개변수입니다.
전역 최적 반응기 부피는 다음과 같습니다.
데이터 세트 s1
vr.fx('r1') = 132.5; vr.fx('r2') = 250;
데이터 세트 s2
vr.fx('r1') = 20; vr.fx('r2') = 100; vr.fx('r3') = 250;
두 가지 제형, 즉 소형 MINLP 제형이 제시됩니다.
특별 주문 세트를 사용한 선형화된 MIP 공식.
데이터 세트 s1의 문제 크기
민LP 밉
변수 102 548
방정식 28418
0이 아닌 190 1574
이산변수 40 186
대형 모델 유형 :MINLP
카테고리 : 슬롯 무료체험 모델 라이브러리
메인 파일 : 슬롯 무료체험gms
$title 제품 포트폴리오 최적화(KPORT,SEQ=270)
$onText
이 문제는 다음을 만족하는 최소 비용 솔루션을 계산합니다.
미리 주어진 제품 포트폴리오의 수요. 수를 결정합니다
반응기의 크기와 배치 방식에 대한 일정을 제공합니다.
각 제품은 각 반응기에서 실행됩니다. 두 가지 시나리오가 있습니다(s1 20
제품. s2 40개 제품), 슬롯 무료체험로 --scenario s2를 추가하세요.
두 번째 시나리오를 지정하는 매개변수입니다.
전역 최적 반응기 부피는 다음과 같습니다.
데이터 세트 s1
vr.fx('r1') = 132.5; vr.fx('r2') = 250;
데이터 세트 s2
vr.fx('r1') = 20; vr.fx('r2') = 100; vr.fx('r3') = 250;
두 가지 제형, 즉 소형 MINLP 제형이 제시됩니다.
특별 주문 세트를 사용한 선형화된 MIP 공식.
데이터 세트 s1의 문제 크기
민LP 밉
변수 102 548
방정식 28418
0이 아닌 190 1574
이산변수 40 186
Kallrath, J. 비볼록의 전역 최소값의 정확한 계산
포트폴리오 최적화 문제. 글로벌 최적화의 개척자.
Eds Floudas CA 및 Pardalos P M. Kluwer 학술 출판사,
도트레흐트, 2003.
키워드: 혼합 정수 비선형 계획법, 혼합 정수 선형 계획법,
포트폴리오 최적화, 특별 주문 세트, 글로벌 최적화,
오목 목적 함수, 화학 공학
$offText
$eolCom //
세트
s '시나리오' / s1,s2 /
rR '리액터' / R1*R3 /
pP '제품' / L1*L37 /
r(rR) '시나리오에서 고려되는 원자로'
p(pP) '시나리오에서 고려되는 제품';
테이블 RData(rR,s,*) '리액터 데이터'
s1.VMIN s1.VMAX s2.VMIN s2.VMAX
R1 102.14 250 20 50
R2 176.07 250 52.5 250
R3 151.25 250;
테이블 PData(pP,s,*) '제품 데이터'
s1.Dem s1.PTime s2.Dem s2.Ptime
L1 2600 6 2600 6
L2 2300 6 2300 6
L3 1700 6 450 6
L4 530 6 1200 6
L5 530 6 560 6
L6 280 6 530 6
L7 250 6 530 6
L8 230 6 140 6
L9 160 6 110 6
L10 90 6 110 6
L11 70 6 10 6
L12 390 6 110 6
L13 250 6 90 6
L14 160 6 90 6
L15 100 6 90 6
L16 70 6 70 6
L17 50 6 50 6
L18 50 6 30 6
L19 50 6 10 6
L20 10 6
L21 10 6
L22 190 6
L23 180 6
L24 70 6
L25 70 6
L26 40 6
L27 40 6
L28 40 6
L29 30 6
L30 20 6
L31 20 6
L32 20 6
L33 10 6
L34 10 6
L35 10 6
L36 10 6
L37 10 6;
매개변수
VMIN(rR) '주당 제품의 부피 흐름(m^3)'
VMAX(rR) '주당 m^3 단위의 제품 흐름'
DEMAND(pP) '주당 제품의 부피 흐름(m^3)'
PRODTIME(pP) '배치당 생산 시간(시간)';
스칼라
WHRS '일주일의 시간' / 168 /
CSTI 'm^3 원자로 및 주당 kEuro 감가상각' / 0.97 /
CSTF '주당 kEuro 및 원자로' / 2.45 /
ESF '규모의 경제' / 0.5 /;
$설정되지 않은 경우 시나리오 $set 시나리오 s1
VMIN(rR) = RDATA(rR,'%scenario%','VMIN');
VMAX(rR) = RDATA(rR,'%scenario%','VMAX');
DEMAND(pP) = PDATA(pP,'%scenario%','Dem');
PRODTIME(pP) = PDATA(pP,'%scenario%','PTime');
* 시나리오 세트 결정
r(rR) = VMAX(rR) > 0;
p(pP) = 수요(pP) > 0;
* 컴팩트 MINLP 모델의 정의
변수
cTotal '총 비용'
cInvest '투자 비용'
c'수정 비용'을 수정했습니다.
f(rR,pP) '이용률'
vR(rR) '반응기 부피(m^3)'
pS(pP) '과잉생산'
bvr(rR) 'r 원자로가 활성인지 여부를 나타냄'
nB(rR,pP) '반응기 r에 있는 생성물 p의 배치 수';
양의 변수 f, vR, pS;
정수 변수 nB;
바이너리 변수 bvr;
방정식
DEFcT '총 비용'
DEFcF '수정 비용'
DEFcI '투자 비용'
TR(rR) '원자로 r의 생산시간'
SPP(pP) '잉여생산량 p' 계산
RVUB(rR) '반응기 r의 최대 부피'
RVLB(rR) '최소 부피 반응기 r';
* 총 비용을 정의
DEFcT.. cTotal =e= cFixed + cInvest;
DEFcF.. cFixed =e= sum(r, CSTF*bvr(r));
DEFcI.. cInvest =e= sum(r, CSTI**ESF*vR(r)**ESF);
* 원자로 r의 총 생산 시간을 제한
TR(r).. sum(p, PRODTIME(p)*nB(r,p)) =l= WHRS*bvr(r);
* 잉여생산량을 계산한다
SPP(p).. pS(p) =e= sum(r, nB(r,p)*f(r,p)*vR(r))/DEMAND(p) - 1;
* 반응기 부피의 하한 및 상한
RVLB(r).. vR(r) =g= VMIN(r)*bvr(r);
RVUB(r).. vR(r) =l= VMAX(r)*bvr(r);
모델 포트폴리오MINLP / DEFcT, DEFcF, DEFcI, TR, SPP, RVLB, RVUB /;
f.lo(r,p) = 0.4; f.up(r,p) = 1; // 가동률의 한계
pS.lo(p) = 0; pS.up(p) = 1; // 잉여 생산의 한계
* 배치 수의 한계
nB.lo(r,p) = 0;
nB.up(r,p) = min(WHRS/PRODTIME(p),floor(2*DEMAND(p)/(VMIN(r)*f.lo(r,p))));
nB.up(r,p)$(2*DEMAND(p) < f.lo(r,p)*VMIN(r)) = 0;
vR.1(rR) = 99;
vR.lo(r) = VMIN(r);
cTotal을 최소화하는 minlp를 사용하여 포트폴리오MINLP를 해결합니다.
* MIP 공식을 정의하기 위한 추가 변수 및 방정식
* 먼저 제품 용어를 선형화해야 합니다.
세트
i 'dyadic 표현 세트' / 0*10 /
j 'SOS2의 이산화점' / 0*10 /
rpi(rR,pP,i) 'np를 표현하려면 i가 필요합니다.';
매개변수
vRj(rR,j) 'x SOS2 구성의 일부'
ESFvRj(rR,j) 'SOS2 구성의 y 부분';
양수 변수
pT(rR,pP) '배치 수 x 반응기 부피(m^3)'
pT2(rR,pP,i) '이쌍 표현에서도 동일'
ESFvR(rR) 'vR에 대한 규모의 경제';
바이너리 변수
nBx(rR,pP,i) 'nB의 이중 표현';
SOS2 변수
lambda(rR,j) '규모의 경제 함수 근사';
방정식
CNP(rR,pP) '비선형 곱 nB(rp)*f(rp)*vR(r)을 계산합니다.'
SPPx(pP) '잉여생산량 p'를 계산합니다.
CNP10(rR,pP) 'CNP의 선형화된 버전'
CNP11(rR,pP) 'CNP의 선형화된 버전'
CNP12(rR,pP,i) 'CNP의 선형화된 버전'
CNP13(rR,pP,i) 'CNP의 선형화된 버전'
CNP14(rR,pP,i) 'CNP의 선형화된 버전'
DEFSOSx(rR) 'SOS2 x 구성'
DEFSOSy(rR) 'SOS2 y 구성'
DEFSOSone(rR) 'SOS2 합계 구성'
DEFcIlp 'DEFcI의 선형화된 버전';
* 새로운 잉여생산 방정식
SPPx(p).. pS(p) =e= sum(r, pT(r,p))/DEMAND(p) - 1;
* 배치 x 볼륨을 계산합니다.
CNP(r,p).. pT(r,p) =e= nB(r,p)*f(r,p)*vR(r);
* CNP의 선형화된 버전
CNP10(r,p).. pT(r,p) =e= sum(rpi(r,p,i),2**(ord(i) - 1)*pT2(rpi));
CNP11(r,p)..nB(r,p) =e= sum(rpi(r,p,i),2**(ord(i) - 1)*nBx(rpi));
CNP12(rpi(r,p,i)).. pT2(rpi) =l= VMAX(r)*nBx(rpi);
CNP13(rpi(r,p,i)).. pT2(rpi) =l= vR(r);
CNP14(rpi(r,p,i)).. pT2(rpi) =g= f.lo(r,p)*(vR(r) - VMAX(r)*(1 - nbx(rpi)));
* 규모의 경제 기능의 SOS2 근사
DEFSOSx(r).. vR(r) =e= sum(j, vRj(r,j)*lambda(r,j));
DEFSOSy(r).. ESFvR(r) =e= sum(j, ESFvRj(r,j)*lambda(r,j));
DEFSOSone(r).. sum(j, 람다(r,j)) =e= 1;
DEFcIlp.. cInvest =e= sum(r, CSTI**ESF*ESFvR(r));
rpi(r,p,i) = ord(i) <= ceil(log(max(1,nB.up(r,p)))/log(2)) + 1$nB.up(r,p);
vRj(r,j) = (VMAX(r) - VMIN(r))*(ord(j) - 1)/(카드(j) - 1) + VMIN(r);
ESFvRj(r,j) = vRj(r,j)**ESF;
모델 포트폴리오MIP / TR, SPPx, RVLB, RVUB, DEFcF
DEFcIlp, DEFcT, CNPl0, CNPl1, CNPl2
CNP13, CNP14, DEFSOSx, DEFSOSy, DEFSOSone/;
포트폴리오MIP.optCr = .05;
cTotal을 최소화하는 밉을 사용하여 포트폴리오MIP를 해결합니다.