waterx.gms : 배수망 설계(MINLP)

설명

이 예는 비선형 혼합 정수의 사용을 보여줍니다.
프로그래밍. 이 문제는 메가 슬롯 라이브러리 모델의 변형입니다.
물(서열=68). 이 예에서는 비선형의 사용을 보여줍니다.
배수 시스템 설계 프로그래밍. 모델
도시에 대한 실제 적용의 주요 특징을 포착합니다.
인도네시아.

소형 모델 유형 :MINLP


카테고리 : 메가 슬롯 모델 라이브러리


메인 파일 : waterx.gms

$title 배수망 설계 (WATERX,SEQ=125)

$onText
이 예에서는 비선형 혼합 정수의 사용을 보여줍니다.
프로그래밍. 이 문제는 메가 슬롯 라이브러리 모델의 변형입니다.
물(서열=68). 이 예에서는 비선형의 사용을 보여줍니다.
배수 시스템 설계 프로그래밍. 모델
도시에 대한 실제 적용의 주요 특징을 포착합니다.
인도네시아.

Brooke, A, Drud, A S 및 Meeraus, A, 모델링 시스템 및 비선형
연구 환경에서의 프로그래밍. Ragavan, R 및 Rohde, S M,
Eds, 컴퓨터 공학, Vol. III. ACME, 1985.

Drud, A S 및 Rosenborg, A, 물 분배 네트워크 치수 측정.
석사 논문, 수리통계 및 운영 연구소
1973년 덴마크 기술대학교 연구. (덴마크어)

키워드: 혼합 정수 비선형 계획법, 네트워크 문제, 물
          유통, 엔지니어링
$offText

세트
   n '노드' / nw '북서 저수지'
                    e '동쪽 저수지'
                    cc '센트럴 시티'
                    와 '서쪽'
                    sw '남서쪽'
                    s '남쪽'
                    이름: '남동쪽'
                    n '북쪽' /
   a(n,n) '호(임의로 지정됨)'
          / nw.(w,cc,n), e.(n,cc,s,se), cc.(w,sw,s,n), s.se, s.sw, sw.w /
   rn(n) '저수지' / nw, e /
   dn(n) '수요 노드';

dn(n) = 예;
dn(rn) = 아니오;
디스플레이 DN;

별칭(n,np);

테이블 node(n,*) '노드 데이터'
        수요 높이 x y 공급 wcost pcost
* m**3/sec m 베이스 m m m**3/sec rp/m**3 rp/m**4
   뉴 6.50 1200 3600 2.500 0.20 1.02
   전자 3.25 4000 2200 6.000 0.17 1.02
   CC 1.212 3.02 2000 2300
   w 0.452 5.16 750 2400
   남서 0.245 4.20 900 1200
   초 0.652 1.50 2000 1000
   자체 0.252 0.00 4000 900
   n 0.456 6.30 3700 3500;

매개변수 dist(n,n) '노드 간 거리(m)';
dist(a(n,np)) = sqrt(sqr(노드(n,"x") - 노드(np,"x")) + sqr(노드(n,"y") - 노드(np,"y")));
디스플레이 거리;

스칼라
   dpow '압력 손실 방정식의 직경에 대한 전력' / 5.33 /
   qpow '압력 손실 방정식의 흐름에 대한 전력' / 2.00 /
   dmin '파이프의 최소 직경' / 0.15 /
   dmax '파이프의 최대 직경' / 2.00 /
   hloss '압력 손실 방정식의 상수' / 1.03e-3 /
   dprc '투자 비용 방정식의 척도 인자' / 6.90e-2 /
   cpow '비용 방정식에서 직경의 힘' / 1.29 /
   r '이자율' / 0.10 /
   maxq 'qp 및 qn에 바인딩됨' / 2.00 /
   davg '평균 직경(기하 평균)'
   rr '공급에 대한 수요의 비율';

davg = sqrt(dmin*dmax);
rr = sum(dn,node(dn,"수요"))/sum(rn,node(rn,"공급"));

변수
   qp(n,n) '각 호의 흐름 - 양수(초당 m**3)'
   qn(n,n) '각 호의 흐름 - 음수(초당 m**3)'
   d(n,n) '각 호의 파이프 직경(m)'
   h(n) '각 노드의 압력(m)'
   s(n) '저수지 노드에서의 공급(초당 m**3)'
   pcost '연간 반복 펌프 비용(밀 rp)'
   dcost '파이프에 대한 투자 비용(밀 rp)'
   wcost '연간 반복되는 물 비용(밀 rp)'
   비용 '총 할인 비용(밀 rp)'
   펜 '객관적 처벌';

양수 변수 qp, qn(n,np);
이진변수 qb(n,np);

방정식
   cont(n) '각 노드에서의 흐름 보존 방정식'
   loss(n,n) '각 호의 압력 손실'
   peq '펌프 비용 방정식'
   deq '투자 비용 방정식'
   weq '물 비용 방정식'
   obj '목적 함수'
   dpen '벌칙 정의'
   qpup(n,np) '양수 범위'
   qnup(n,np) '음수 범위';

연속(n).. 합계(a(np,n), qp(a) - qn(a))
         - 합계(a(n,np), qp(a) - qn(a)) + s(n)$rn(n)
        =e= node(n,"수요");

손실(a(n,np)).. h(n) - h(np) =e= [hloss*dist(a)*(qp(a) + qn(a))**(qpow - 1)
                                  * (qp(a) - qn(a))/d(a)**dpow]$(qpow <> 2)
                                  + [hloss*dist(a)*(qp(a) + qn(a))
                                  * (qp(a) - qn(a))/d(a)**dpow]$(qpow = 2);

qpup(a).. qp(a) =l= maxq*qb(a);

qnup(a).. qn(a) =l= maxq*(1 - qb(a));

peq.. pcost =e= sum(rn , s(rn)*node(rn,"pcost")*(h(rn) - node(rn,"높이")));

deq.. dcost =e= dprc*sum((n,np)$a(n,np), dist(n,np)*d(n,np)**cpow);

weq.. wcost =e= sum(rn, s(rn)*node(rn,"wcost"));

dpen.. pen =e= sum(a, qp(a) + qn(a));

obj..cost =e= (pcost + wcost)/r + dcost + pen;

* 경계
d.lo(n,np)$a(n,np) = dmin;
d.up(n,np)$a(n,np) = dmax;
h.lo(rn) = node(rn,"높이");
h.lo(dn) = node(dn,"높이") + 7.5 + 5.0*node(dn,"수요");
s.lo(rn) = 0;
s.up(rn) = node(rn,"공급");

* 초기값
d.l(n,np)$a(n,np) = davg;
h.l(n) = h.lo(n) + 5.0;
s.l(rn) = node(rn,"공급")*rr;

모델 네트워크 / 모두 /;

network.domLim = 1000;

$onText
* DICOPT는 일부 문제를 극복하기 위해 다양한 비선형 최적화 프로그램이 필요합니다.
* 볼록하지 않은 부분의 어려움. 이 문제는 크게
* 로컬 솔루션의 수가 많으며 '좋은' 솔루션을 찾는 것이 중요합니다
* 첫 번째 NLP 솔루션. Minos는 첫 번째 nlp와 Conopt를 찾는 데 사용됩니다.
*는 후속 문제를 해결하는 데 사용됩니다. Minos나 Conopt만으로는
* 좋은 해결책을 찾을 수 없습니다.

파일 dopt / dicopt.opt /;
도트를 넣어;
putClose 'nlpsolver minos conopt'
        / 'nlpoptfile 0 1 ';

파일 콥트 / conopt.opt /;
콥트를 넣어;
putClose 'rtmaxj 1.0e12 설정';

네트워크.opt파일 = 1;

비용을 최소화하는 rminlp를 사용하여 네트워크를 해결합니다.
$offText

비용을 최소화하는 minlp를 사용하여 네트워크를 해결합니다.