landssp.gms : 최적의 투자

설명

다음 2단계 문제는 최적의 값을 결정하는 것으로 구성됩니다.
이를 충족시키기 위해 다양한 유형의 발전소에 용량 투자
다음 기간에는 전기가 필요합니다. 4개의 발전소가 고려됩니다.
세 가지 모드로 작동할 수 있습니다. 차기수요
세 가지 모드가 각각 충족되어야 합니다. 예산이 있다
제약 조건 및 최소 총 용량에 대한 제약 조건도 있습니다.

소형 모델 유형 :SP


카테고리 : 피망 슬롯 EMP 라이브러리


메인 파일 : landssp.gms

$title 최적의 투자 (LANDSSP,SEQ=75)

$onText

다음 2단계 문제는 최적을 결정하는 것으로 구성됩니다.
이를 충족시키기 위해 다양한 유형의 발전소에 용량 투자
다음 기간에는 전기가 필요합니다. 4개의 발전소가 고려됩니다.
세 가지 모드로 작동할 수 있습니다. 차기수요
세 가지 모드가 각각 충족되어야 합니다. 예산이 있다
제약 조건과 최소 총 용량에 대한 제약 조건도 있습니다.

Louveaux, F V 및 Smeers, Y, 전기에 대한 최적의 투자
생성: 확률론적 모델과 테스트 문제. 에서
Ermoliev, Y 및 Wets, RJ, Eds, 수치 기법
확률적 최적화 문제. 스프링거 출판사, 1988,
445-452쪽.

$offText

i 발전소 유형 설정 / plant-1*plant-4 /
     j 작동 모드 / 모드-1*모드-3 /

매개변수 c(i) 투자비용 / 공장-1 10, 공장-2 7, 공장-3 16, 공장-4 6 /
          d(j) 에너지 수요 / 모드-1 5, 모드-2 3, 모드-3 2 /

표 f(i,j) 운영 비용
         모드-1 모드-2 모드-3
공장-1 40 24 4
2공장 45 27 4.5
3공장 32 19.2 3.2
공장-4 55 33 5.5

스칼라 m 최소 설치 용량 / 12 /
       b 예산 한도 /120 /;

변수 x(i) 설치 용량
          y(i,j) 운영 수준
          비용 총비용
양수 변수 x,y;

총 비용의 방정식 defcost 정의
          mincap 최소 설치 용량
          BBA 예산 제약
          powbal(i) 파워 밸런스
          dembal(j) 수요 잔고;

defcost.. 비용 =e= sum(i, c(i)*x(i)) + sum((i,j), f(i,j)*y(i,j));

mincap..sum(i, x(i)) =g= m;

bbal..sum(i, c(i)*x(I)) =l= b;

powbal(i)..sum(j, y(i,j)) =l= x(i);

dembal(j)..sum(i, y(i,j)) =g= d(j);

모델 capinvest / 모두 /;

모드-1 수요에 대한 구현 설정 / o1*o3 /
매개변수 dvar(o) / o1 3, o2 5, o3 7 /
          prob(o) / o1 .3, o2 .4, o3 .3 /

파일 emp / '%emp.info%' /; put emp '* 문제 %피망 슬롯i%';
put / "randvar d('mode-1') 이산";
loop(o, put prob(o):4:1 dvar(o):2:0);
putclose / "2단계 d('mode-1') y powbal dembal";

s 시나리오 설정 / s1*s3 /;
매개변수
    srep(s,*) 시나리오 확률 / #s.prob 0/
    s_d(s,j) 시나리오별 항복률 구현
    s_x(s,i), s_y(s,i,j), s_cost(s);

dict/s .scenario를 설정하세요.''
           '' .opt . srep
           d.randvar . s_d
           x.레벨 . s_x
           y .레벨 . s_y
           비용 .레벨 . s_비용 /;

emp 시나리오 dict를 사용하여 capinvest 최소 비용을 해결합니다.

* y가 예상 솔루션으로 보고되는지 테스트
매개변수 y_ES(i,j) / #i.#j 0 /;
loop(s, y_ES(i,j) = y_ES(i,j) + s_y(s,i,j)*srep(s,'prob'));
* 시나리오 확률의 합이 1이 되지 않으면 정규화합니다.
y_ES(i,j) = y_ES(i,j)/sum(s,srep(s,'prob'));

abort$(sum((i,j), abs(y.l(i,j)-y_ES(i,j)))>1e-6) 'y.l은 예상되는 솔루션이 아닙니다.';

$설정되지 않은 경우 TOL $set TOL 1e-6
abort$(abs(cost.l-381.853333)>capinvest.objval) '잘못된 목표';

루프(들,
  x.fx(i) = s_x(s,i);
  y.fx(i,j) = s_y(s,i,j);
  d('모드-1') = s_d(s, '모드-1');
  lp를 사용하여 capinvest 최소 비용을 해결합니다.
  abort$(capinvest.modelstat<>%modelStat.optimal%) '시나리오가 최적이 아님';
  abort$(abs(cost.l-s_cost(s))>%TOL%) '잘못된 시나리오 목표';
);