moo02.gms : 다목적 발전 모델 풀기

설명

이 예는 다중 목표 발전 모델을 해결하는 방법을 보여줍니다.
모델 라이브러리의 EPSCM을 기반으로 합니다.

키워드: 다중 목표 최적화, 발전

카테고리 : 피망 슬롯 데이터 유틸리티 라이브러리


메인 파일 : moo02.gms 포함: moo02.gms

$title 다목적 발전 모델 풀기 (moo02,SEQ=152)

$onText
이 예에서는 다목적 발전 모델을 해결하는 방법을 보여줍니다.
모델 라이브러리의 EPSCM을 기반으로 합니다.

키워드: 다목적 최적화, 발전
$offText

$inlineCom [ ]

$설정되지 않은 경우 NBOBJ $set NBOBJ 2
$설정되지 않은 경우 METHOD $set METHOD 샌드위치

세트
   p '발전 장치' / 갈탄, 석유, 가스, RES /
   i '부하 영역' / 베이스, 중간, 피크 /
   pi(p,i) '하중 유형에 대한 단위 가용성' / 갈탄.(기본,중간)
                                                   Oil.(중간,피크), Gas.set.i
                                                   RES.(기본, 피크) /
   es(p) '내인성 배출원' / 갈탄, RES /
   k '목적함수' / 비용, CO2 배출, 내생적 /
   포인트 '파레토 포인트' / point1*point1000 /;

$세트 최소 -1
$set 최대 +1

매개변수 dir(k) '최대값의 경우 목적 함수 1, 최소값의 경우 -1의 방향'
                 / 비용 %min%, CO2배출량 %min%, 내생적 %max% /
          pareto_obj(points,k) '파레토 포인트의 객관적인 값';

pheader/용량, 비용, CO2배출량/을 설정합니다.

테이블 pdata(pheader,p)
                         갈탄 석유 가스 RES
   용량 [GWh] 61000 25000 42000 20000
   비용 [$/MWh] 30 75 60 90
   CO2배출량 [t/MWh] 1.44 0.72 0.45 0;

매개변수
   광고 '연간 수요(GWh)' / 64000 /
   df(i) '부하 유형에 대한 수요 비율' / 기본 0.6, 중간 0.3, 피크 0.1 /
   수요(i) '부하 유형에 대한 수요(GWh)';

수요(i) = ad*df(i);

변수
   z(k) '목적 함수 변수';

양수 변수
   x(p,i) '부하 면적 단위의 생산 수준(GWh)';

방정식
   objcost '비용을 K$로 최소화하는 목표'
   objco2 'Kt의 CO2 배출 최소화 목표'
   목표 'GWh의 내생적 자원을 극대화하기 위한 목표'
   defcap(p) '용량 제약'
   defdem(i) '요구 만족';

objcost.. sum(pi(p,i), pdata('cost',p)*x(pi)) =e= z('cost');

objco2.. sum(pi(p,i), pdata('CO2emission',p)*x(pi)) =e= z('CO2emission');

객체.. sum(pi(es,i), x(pi)) =e= z('내생적');

defcap(p).. sum(pi(p,i), x(pi)) =l= pdata('용량',p);

defdem(i).. sum(pi(p,i), x(pi)) =g= 수요(i);

모델 예 / 모두 /;

kk(k) '활성 목적 함수'를 설정합니다.
kk(k) = 그렇습니다;
$if %NBOBJ%==2 kk('내생적') = 아니요;

$onEcho > cplex.opt
스레드 1
$offEcho

$libInclude moo %METHOD% 예 LP kk dir z 포인트 pareto_obj -iterations=20 -gridpoints=5 -savepoint=1 -savepoint_filename= -savepoint_dir=savepoints -solver=cplex -optfile_init=1 -optfile_main=1
'gdxmerge savepoints%system.DirSep%*.gdx > %system.NullFile%'을 실행합니다.

pareto_obj 표시;