kport.gms : 슬롯 무료체험 포트폴리오 최적화

설명

이 문제는 다음을 만족하는 최소 비용 솔루션을 계산합니다.
미리 주어진 제품 포트폴리오의 수요. 수를 결정합니다
반응기의 크기와 배치 방식에 대한 일정을 제공합니다.
각 제품은 각 반응기에서 실행됩니다. 두 가지 시나리오가 있습니다(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를 해결합니다.