참조
카테고리 : 메가 슬롯 NOA 라이브러리
메인파일 : reservoir.gms
$onText
온스트림 및 오프스트림 최적의 저수지 관리.
다음에서 적응:
McKinney, D.C., Savitsky, A.G., 물과 물에 대한 기본 최적화 모델
에너지 관리. 1999년 6월(개정 6, 2003년 2월).
http://www.ce.utexas.edu/prof/mckynney/ce385d/papers/메가 슬롯-Tutorial.pdf
Andrei, N., 두 저수지 시스템의 최적 관리.
Revista Romana de Informatica si Automata, vol.16, no.1, 2006, pp.15-18.
$offText
n개의 저장소 /res1, res2/를 설정합니다.
t 시간을 설정합니다. /ian, feb, mar, apr, mai, jun, jul,
8월, 9월, 10월, 11월, 12월, 종료 /
tt(t) /ian/;
표 q(n,t) 첫 번째 저장소의 유입수 rez1 (mil.m3)
이안 2월 3월 4월 마이 6월 7월 8월 9월 10월 11월 12월 종료
해상도1 128 125 234 360 541 645 807 512 267 210 981 928 250;
표 r(n,t)에는 첫 번째 저수지에서 방출된 물이 필요합니다. rez1(mil.m3)
이안 2월 3월 4월 마이 6월 7월 8월 9월 10월 11월 12월 종료
해상도1 100 150 200 500 222 700 333 333 300 250 250 250 200;
변수 q2(t),
r2(티),
s(n,t),
obj;
방정식
bal1(n,t) 저수지 S1의 물 균형
bal2(n,t) 저장소 S2의 물 균형
dec(n,t) 저수지 채우기 결정
objf 목적 함수 ;
bal1(n,t)$(tt(t) 아님)..
s('res1',t)-s('res1',t-1) =E= Q('res1',t)+r2(t)-
q2(t)-r('res1',t);
bal2(n,t)$(tt(t) 아님)..
s('res2',t)-s('res2',t-1) =E= q2(t)-r2(t);
dec(n,t)$(tt(t)가 아님)..
(s('res2',t)-s('res1',t)) -
(s('res2',t)-s('res1',t)) * (1.0-q2(t)/(q2(t)+0.000001)) =E=
0.0;
objf.. obj =E= sum(t$(tt(t) 아님),r2(t));
* 경계
s.lo('res1',t)=1150;
s.up('res1',t)=4590;
s.fx('res1','ian')=1200;
s.lo('res2',t)=100;
s.up('res2',t)=4590;
s.fx('res2','ian')=1200;
r2.up(t)=1500;
r2.lo(t)=0.0;
q2.up(t)=1500;
q2.lo(t)=0.0;
q2.1(t)=0.00001;
*옵션 optcr =0.000001;
매개변수 a(t);
a(t)=(1-(q2.l(t)/(abs(q2.l(t))+0.00000001)));
모델 저수지 /all/;
obj를 최소화하는 nlp를 사용하여 저장소를 해결합니다.
* 솔루션 시각화
* ----------------
$ifThenI x%mode%==xbook
파일 res /rezerv.txt/
입술을 넣어;
"객관적 = ", obj.l:10:5; 놓다 /;
넣어 /"===================================================="/;
/" a q-res1 r-res1 q2(t) r2(t) s-res1 ds-res1 s-res2 ds-res2 "/;
루프(t $(ord(t) ne 카드(t))),
t.tl:7, a(t):5:2, q('res1',t):10:2, r('res1',t):10:2,
q2.l(t):7:1, r2.l(t):7:1,
s.l('res1',t):10:2, (s.l('res1',t)-s.l('res1',t-1)):10:2,
s.l('res2',t):10:2, (s.l('res2',t)-s.l('res2',t-1)):10:2 /; );
넣어 /"===================================================="/;
파일 stoc1 /s-res1.dat/;
스톡1을 넣어
루프(t, put s.l('res1',t):10:7, put/)
파일 stoc2 /s-res2.dat/;
stoc2를 넣어
루프(t, put s.l('res2',t):10:7, put/)
파일 흐름1 /q2.dat/;
flow1 넣어
루프(t, q2.l(t):10:7 넣기, 넣기/)
파일 흐름2 /r2.dat/;
flow2 넣어
루프(t, r2.l(t):10:7 넣기, 넣기/)
파일 흐름q /q.dat/;
흐름을 넣어
루프(t, q('res1',t):10:7, put/)
파일 흐름 /r.dat/;
꽃을 넣어
루프(t, put r('res1',t):10:7, put/)
$endIf
* 저수지 끝