설명
가스 파이프라인은 고정된 양의 가스를 수송하도록 설계되었습니다. 한 점에서 다른 두 점으로. 가스의 초기 및 최종 단계 모두 알려져 있습니다. 우리는 다음을 결정해야 합니다: 압축기 스테이션 수 파이프라인 세그먼트의 길이 파이프라인 세그먼트의 직경 각 스테이션의 흡입 및 토출 압력
소형 모델 유형 :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);
디스플레이 준비, 크립;