gasnet.gms : 가스 전송 네트워크의 최적 설계

설명

가스 파이프라인은 고정된 양의 가스를 수송하도록 설계되었습니다.
한 점에서 다른 두 점으로. 가스의 초기 및 최종 단계 모두
알려져 있습니다. 우리는 다음을 결정해야 합니다:

  압축기 스테이션 수
  파이프라인 세그먼트의 길이
  파이프라인 세그먼트의 직경
  각 스테이션의 흡입 및 토출 압력

소형 모델 유형 :MINLP


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


메인 파일 : gasnet.gms

$title 가스 전송 네트워크의 최적 설계(GASNET,SEQ=223)

$onText
가스 파이프라인은 고정된 양의 가스를 수송하도록 설계됩니다.
한 점에서 다른 두 점으로. 가스의 초기 및 최종 단계 모두
알려져 있습니다. 우리는 다음을 결정해야 합니다:

  압축기 스테이션 수
  파이프라인 세그먼트의 길이
  파이프라인 세그먼트의 직경
  각 스테이션의 흡입 및 토출 압력

Edgar, TF, Himmelblau, DM 및 Lasdon, LS, 최적화
화학 공정. 맥그로 힐, 보스턴, 2001.

키워드: 혼합 정수 비선형 프로그래밍, 파이프라인 설계, 엔지니어링
$offText

$eolCom //

세트
   ii '모든 파이프 세그먼트' / s0*s11 /
   i(ii) '파이프 세그먼트' / s1*s11 /
   i1(i) '세그먼트 1' / s1*s3 /
   i2(i) '세그먼트 2' / s4*s7 /
   i3(i) '세그먼트 3개' / s8*s11 /
   j '압축기' / c1*c10 /
   jii(j,ii,i) '연결'
               / c1.s0.s1, c2.s1.s2, c3.s2.s3, c4.s3.(s4,s8), c5.s4.s5
                 c6.s5.s6, c7.s6.s7, c8.s8.s9, c9.s9.s10, c10.s10.s11 /
   qi(ii,i) '파이프라인 흐름 매핑'
   cj(j,ii) '압축기 유입 매핑'
   ji(j,ii) '압축기 파이프라인 흐름 매핑'
   (ii) '모든 세그먼트에서 터미널 세그먼트를 뺀 것';

cj(j,ii) = sum(i, jii(j,ii,i));
qi(ii,i) = sum(j, jii(j,ii,i));
ji(j,i) = 합계(ii, jii(j,ii,i));
is(ii) = sum(j, cj (j,ii));

매개변수
   k '흡입 조건' / 1.26 /
   z '압축성 계수' / 0.88 /
   t '흡입 온도' / 520 /
   cvar '압축기 연간 자본 가변 비용(hp당 $)' / 70 /
   cfix '압축기 연간 고정 비용($)' / 1e4 /
   pcost '파이프 자본 비용(마일당 인치당 $)' / 870 /
   ocost '운영 비용(hp당 $)' / 8 /;

변수
   l(i) '파이프 길이'
   Pd(i) '토출압력(psi)'
   Ps(ii) '흡입압력(psi)'
   D(i) '직경(인치)'
   Q(ii) '흐름(MMCFD)'
   CR(j) '압축비'
   W(j) '일(hp)'
   b(j) '압축기 결정'
   cl '파이프 자본 비용'
   cc '압축기 자본 비용'
   oc '운영 비용'
   비용;

이진변수 b;
양수 변수 w;

방정식
   pdrop(i) '라인의 압력 강하'
   ltwo '줄 길이 2'
   l3 '줄 길이 3'
   qdef(i) '흐름 정의'
   qbal(ii) '흐름 균형 및 가스 소비'
   wdef(j,i) '작업 정의'
   crdef(j,ii,i) '압축 정의'
   cdef(j)
   cldef '파이프 비용'
   ccdef '압축기 비용'
   ocdef '운영 비용'
   obj '총 비용';

pdrop(i).. pd(i) =g= ps(i);

ltwo.. sum(i1, l(i1)) + sum(i2, l(i2)) =e= 175;

l세.. 합계(i1, l(i1)) + 합계(i3, l(i3)) =e= 200;

qdef(i).. l(i) =e= sqr(871*1e-6)*d(i)**(16/3)*(sqr(pd(i)) - sqr(ps(i)))/sqr(q(i));

crdef(jii(j,ii,i)).. cr(j)*ps(ii) =e= pd(i);

cdef(j).. cr(j) =l= 1 + (cr.up(j) - 1)*b(j);

qbal(is).. q(is) =e= sum(qi(is,i), q(i)) + sum(cj(j,is), 0.005*q(is)*b(j));

wdef(ji(j,i)).. w(j) =e= 0.08531*q(i)*k/(k - 1)*t*(cr(j)**(z*(k - 1)/k) - 1);

cldef.. cl =e= sum(i, pcost*l(i)*d(i));

ccdef.. cc =e= sum(j, cvar*w(j) + cfix*b(j));

ocdef..oc =e= sum(j, ocost*w(j));

obj.. 비용 =e= cl + cc + oc;

모델 가스네트 / 모두 /;

* 간단한 경계
pd.lo(i) = 200;
pd.up(i) = 1000;
ps.lo(i) = 200;
ps.up(i) = 1000;
L.lo(i) = 2;
L.up(i) = 200;
D.lo(i) = 4;
D.up(i1) = 36;
D.up(i2) = 18;
D.up(i3) = 18;
cr.lo(j) = 1;
cr.up(j) = 2;
q.lo(i) = 200;
q.up(i) = 600;

ps.fx('s0') = 500;  // 첫 번째 라인의 시작 압력을 고정합니다.
ps.fx('s7') = 600;  // 라인 2의 끝 압력을 고정합니다.
ps.fx('s11') = 300;  // 라인 3의 끝 압력을 고정합니다.
q.fx('s0') = 600;  // 라인 1의 유입을 수정합니다.

1.1(i) = 20;
d.l(i) = 18;

minlp를 사용하여 가스넷 최소화 비용을 해결합니다.

매개변수
   '파이프 보고서' 준비
   crep '압축기 보고서';

prep(i,'방전') = pd.l(i);
prep(i,'Suction') = ps.l(i);
prep(i,'직경') = d.l(i);
prep(i,'길이') = l.l(i);
prep(i,'Flow') = q.l(i);

crep(j,'비율')$b.l(j) = cr.l(j);
crep(j,'일')$b.l(j) = w.l(j);

디스플레이 준비, 크립;