minlphix.gms : 슬롯 증류 시퀀스

설명

이것은 MINLPHI 모델의 직접적인 슬롯 공식입니다.

소형 슬롯 유형 :슬롯


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


메인 파일 : minlphix.gms

$title 열 통합 증류 시퀀스 - MINLP (MINLPHIX,SEQ=227)

$onText
이는 모델 MINLPHI의 직접적인 MINLP 공식입니다.

Morari, M 및 Grossmann, I E, Eds, 화학 공학
슬롯를 사용한 최적화 모델. 화학용 컴퓨터 보조 장치
엔지니어링 회사, 1991.

Floudas, CA 및 Paules IV, GE, A 혼합 정수 비선형
열 통합 합성을 위한 프로그래밍 공식
증류 순서. 컴퓨터 및 화학 공학 12,
6 (1988), 531-546.

이 공식은 최적의 열 통합을 제공합니다.
압력을 연속 변수로 사용하는 증류 순서
세 가지 성분 분리를 위해.

           구성성분: a == 헥산
                           b == 벤젠
                           c == 헵탄

상부구조로의 총 공급량 == 396 kgmol/hr

다성분 사료 조성: a = 0.80
                                 b = 0.10
                                 c = 0.10

형태의 상부구조 ...

                        _______ _______
                       _|_ |              _|_ |
                      /\( ) / \( )
                      |   |___|__ 에 |   |___|___ ㄴ
                      |   |                 |   |
            |---------| 1 |                 | 3 |
            |         |   |       ----------|   |
            |         |   |       |         |   |
            |         |   |_______|         |   |
            |         \___/ |  기원전 \___/_______ C
     F |           |   ( ) |     |
   -------->|           |____|                |----( )
   (ABC) |
            |           _______ _______
            |          _|_ |              _|_ |
            |         /\( ) / \( )
            |         |   |___| AB |   |___|___ 에이
            |         |   |   |______________|   |
            |---------| 2 |                 | 4 |
                      |   |                 |   |
                      |   |                 |   |
                      |   |______ C |   |_______ B
                      \___/ |              \___/ |
                        |   ( ) |    ( )
                        |____|                |_____|

다음을 나타내는 이진 변수와 함께 사용됩니다.
   a_ 시퀀스에 열이 존재합니다.
   b_ 열 통합을 위한 열 교환기 선택.
   c_ 냉온 유틸리티 선택.

관련 참조:

"에 대한 혼합 정수 비선형 계획법 공식
 열 통합 증류 시퀀스의 합성"

 C.A. 플루다스와 G.E. 파울레스 4세, 1988.
 컴퓨터 및 화학 공학 vol. 12 아니. 6면 531-546

키워드: 혼합 정수 비선형 계획법, 화학 공학, 증류
          시퀀스, 열 통합 증류
$offText

세트
   i '응축기-열' / c-1*c-4 /
   j '재가열기' / r-1*r-4 /
   hu '핫 유틸리티' / lp, ex /
   cu '콜드 유틸리티' / cw /
   n '인덱스' / a, b /
   m '중간체' / ab, bc /
   pm(i,m) '제품' / c-1.bc, c-2.ab /
   fm(i,m) '피드' / c-3.bc, c-4.ab /;

별칭 (ip,i), (jp,j);

*===================================================================
* 모델의 조건부 제어를 위한 "z" 세트의 정의
* 응축기와 리보일러 사이의 허용 가능한 일치를 매핑하는 데 사용됩니다.
* 및 상부 구조의 기둥 위치
*===================================================================
세트
   zlead(i) '상부 구조의 선행 열' / c-1, c-2 /
   zcrhx(i,j) '리보일러 허용 일치에 대한 콘덴서' / c-1.r-3, c-2.r-4, c-3.r-1, c-4.r-2 /
   zlim(i,j) '열 통합 방향'
   zcr(i,j) '재가열기-응축기 쌍';

zlim(i,j) = zcrhx(i,j) 및 (ord(i) < ord(j));
zcr(i,j) = ord(i) = ord(j);

매개변수
   spltfrc(i,m) '증류탑의 분할 분율'
                /c-1.bc 0.20
                  c-2.ab 0.90 /
   tcmin(i) '최소 응축기 온도'
                /c-1 341.92
                  c-2 343.01
                  c-3 353.54
                  c-4 341.92 /
   trmax(j) '최대 리보일러 온도';

trmax(j) = 1000;

*===================================================================
* 증류탑에 맞게 조정된 비용 계수
* 비선형 고정 비용 모델
* 비용 = fc*y + vc*흐름*온도
* 배율 인수 = 1000
*===================================================================
매개변수
   fc(i) '증류탑에 대한 고정 요금'
           /c-1 151.125
             c-2 180.003
             c-3 4.2286
             c-4 213.42 /
   vc(i) '증류탑에 대한 가변 충전'
           /c-1 0.003375
             c-2 0.000893
             c-3 0.004458
             c-4 0.003176 /
   목(hu) '뜨거운 유틸리티 온도'
           / 421.0 LP
             예 373.0 /;

* 핫 유틸리티 비용 계수 - 연간 수천 달러의 비용 제공
* ucost = q(10e+6 kj/hr)*costhu(hu)

매개변수 costhu(hu) '핫 유틸리티 비용 계수' / lp 24.908, ex 9.139 /;

테이블 kf(i,n) '계수. 열부하 온도에 적합'
            a b
   c-1 32.4 0.0225
   c-2 25.0 0.0130
   c-3 3.76 0.0043
   c-4 35.1 0.0156;

테이블 af(i,n) '계수. 컬럼 온도에 맞는 경우'
            a b
   c-1 9.541 1.028
   c-2 12.24 1.050
   c-3 8.756 1.029
   c-4 9.181 1.005;

스칼라
   totflow '상부구조로의 총 흐름' / 396 /
   fchx '열교환기용 고정 충전량 조정' / 3.392 /
   vchx '열교환기의 가변 충전량 조정' / 0.0893 /
   htc '전체 열전달 계수' / 0.0028 /
   dtmin '최저 온도 접근' / 10.0 /
   tcin '냉수 입구 온도' / 305.0 /
   tcout '냉수의 출구 온도' / 325.0 /
   costcw '냉각수 비용 계수' / 4.65 /
   베타 '소득세 정정계수' / 0.52 /
   alpha '1년 초과 지급 시간 요소' / 0.40 /
   u '논리적 제약 조건에 대한 큰 숫자' / 1500 /
   uint '논리 정수의 상한' / 20 /;

변수 zoau '목적 함수 값';

양수 변수
   f(i) '열로의 유량'
   qr(j) '리보일러 j가 있는 컬럼에 대한 리보일러 관세'
   qc(i) '열 i에 대한 응축기 관세'
   qcr(i,j) '열 통합 열 전달'
   qhu(hu,j) '뜨거운 유틸리티 열 전달'
   qcu(i,cu) '저온 유틸리티 열전달'
   tc(i) ' cond가 있는 컬럼의 응축기 온도. 나'
   tr(j) ' reb가 있는 컬럼의 리보일러 온도. j'
   lmtd(i) '냉각수 교환을 위한 lmtd'
   sl1(i) 'lmtd 평등을 위한 인공 여유 변수'
   sl2(i) 'lmtd 평등을 위한 인공 여유 변수'
   s1(i) 'reb-con 평등을 위한 인공 여유 변수'
   s2(i) 'reb-con 평등을 위한 인공 여유 변수'
   s3(i) '관세 균등을 위한 인위적 여유 변수'
   s4(i) '관세 균등을 위한 인위적 여유 변수';

바이너리 변수
   yhx(i,j) '열 통합은 응축기 i 리보일러 j와 일치합니다'
   yhu(hu,j) '핫 유틸리티는 핫 유틸리티 hu 리보일러 j와 일치합니다'
   ycu(i,cu) 'cold 유틸리티는 콘덴서 i cold util cu와 일치합니다.'
   ycol(i) '상부구조의 기둥';

방정식
   nlpobj 'nlp 하위 문제 목표'
   tctrlo(i,j) '목적에서 0으로 나누는 것을 방지합니다'
   lmtdlo(i) '목적에서 0으로 나누는 것을 방지합니다'
   lmtdsn(i) 'lmtd 정의의 비선형 형식'
   tempset(i) '비활성 열의 온도를 0(milp)으로 설정'
   artrex1(i) '인위적인 여유 변수(nlp)를 완화합니다.'
   artrex2(i) '인위적인 여유 변수(nlp)를 완화합니다.'
   Material(m) '각 중간제품의 물질수지'
   '상부 구조에 공급'을 공급합니다.
   matlog(i) '물질수지 논리적 제약'
   Duty(i) '응축기 i의 열부하 정의'
   rebcon(i,j) '응축기 및 리보일러 의무와 동일합니다.'
   conheat(i) '응축기 열 균형'
   rebheat(j) '리보일러 열 균형'
   dtminlp(j) '저압 증기에 대한 최소 온도 접근'
   dtminc(i) '각 콘덴서에 허용되는 최소 온도'
   trtcdef(i,j) '컬럼의 리보일러 및 응축기 온도 관련'
   dtmincr(i,j) '열 통합을 위한 최소 온도 접근법'
   dtminex(j) '배기 증기에 대한 최소 온도 접근'
   hxclog(i,j) '열 균형에 대한 논리적 제약'
   hxhulog(hu,j) '열 균형에 대한 논리적 제약'
   hxculog(i,cu) '열 균형에 대한 논리적 제약'
   qcqrlog(i) 'con-reb 임무에 대한 논리적 제약'

* 이것은 minlp의 순수 이진 제약 조건입니다.
   sequen(m) '상부 구조를 단일 시퀀스로 제한합니다'
   리드 '시퀀스 제어'
   limutil(j) '단일 핫 유틸리티를 갖도록 열을 제한합니다.'
   hidirect(i,j) '단일 방향의 열 통합이 필요합니다.'
   heat(i) '논리적 정수 제약조건';

nlpobj..
   zoau =e= 알파*(합(i, fc(i)*ycol(i) + vc(i)*(tc(i) - tcmin(i))*f(i))
                 + 합계(zcrhx(i,j), fchx*yhx(i,j) + (vchx/htc)*(qcr(i,j)/(tc(i) - tr(j) + 1 - ycol(i))))
                 + 합계((i,cu), fchx*ycu(i,cu) + (vchx/htc)*(qcu(i,cu)/(lmtd(i) + 1 - ycol(i))))
                 + 합계((hu,j), fchx*yhu(hu,j) + (vchx/htc)*(qhu(hu,j)/(thu(hu) - tr(j)))))
         + 베타 *(합계((i,cu), 비용cw*qcu(i,cu))
                 + sum((hu,j), costhu(hu)*qhu(hu,j)));

* 목표의 두 번째 줄에 있는 분모를 0에서 멀어지게 제한합니다.
tctrlo(zcrhx(i,j)).. tc(i) - tr(j) + 1 - ycol(i) =g= 1;

* lmtd와 ycol은 분할을 방지하기 위해 동시에 0과 1이 되는 것을 방지합니다.
* 목표에서 0으로
lmtdlo(i)..lmtd(i) =g= 2*ycol(i);

lmtdsn(i).. lmtd(i) =e= (2/3)*sqrt((tc(i) - tcin)*(tc(i) - tcout))
                      + (1/6)*((tc(i) - tcin) + (tc(i) - tcout)) + sl1(i) - sl2(i);

artrex1(i).. s1(i) + s2(i) + sl1(i) =l= u*(1 - ycol(i));

artrex2(i).. s3(i) + s4(i) + sl2(i) =l= u*(1 - ycol(i));

재료(m).. sum(pm(i,m), spltfrc(i,m)*f(i)) =e= sum(fm(i,m), f(i));

피드.. sum(zlead(i), f(i)) =e= totflow;

의무(i).. qc(i) =e= (kf(i,"a") + kf(i,"b")*(tc(i)-tcmin(i))) + s3(i) - s4(i);

rebcon(zcr(i,j)).. qr(j) =e= qc(i);

conheat(i).. qc(i) =e= sum(zcrhx(i,j), qcr(i,j)) + sum(cu, qcu(i,cu));

rebheat(j).. qr(j) =e= sum(zcrhx(i,j), qcr(i,j)) + sum(hu, qhu(hu,j));

trtcdef(zcr(i,j)).. tr(j) =e= (af(i,"a") + af(i,"b")*(tc(i) - tcmin(i))) + s1(i) - s2(i);

dtminlp(j).. dtmin - (thu("lp") - tr(j)) =l= 0;

dtminex(j).. dtmin - (thu("ex") - tr(j)) - u*(1 - yhu("ex",j)) =l= 0;

tempset(i).. tc(i) + lmtd(i) + sum(zcr(i,j), tr(j)) =l= u*ycol(i);

matlog(i).. f(i) =l= u*ycol(i);

dtminc(i).. tcmin(i) - tc(i) =l= u*(1 - ycol(i));

dtmincr(zcrhx(i,j)).. tr(j) - tc(i) - u*(1 - yhx(i,j)) + dtmin =l= 0;

hxclog(zcrhx(i,j)).. qcr(i,j) =l= u*yhx(i,j);

hxhulog(hu,j).. qhu(hu,j) =l= u*yhu(hu,j);

hxculog(i,cu).. qcu(i,cu) =l= u*ycu(i,cu);

qcqrlog(i).. qc(i) + sum(j$zcr(i,j), qr(j)) =l= u*ycol(i);

sequen(m)..sum(pm(i,m), ycol(i)) =e= sum(fm(i,m), ycol(i));

납.. sum(zlead(i), ycol(i)) =e= 1;

limutil(j)..sum(hu, yhu(hu,j)) =l= 1;

* 상호 열 통합 바이너리 중 하나만 1이 될 수 있습니다.
hidirect(zlim(i,j))..
   yhx(i,j) + sum((ip,jp)$(ord(ip) = ord(j) 및 ord(jp) = ord(i)), yhx(ip,jp)) =l= 1;

* 열이 존재하지 않으면 모든 이진 변수가 연결됩니다.
* 또한 0으로 설정해야 합니다.
열(i).. 합계(zcrhx(i,j), yhx(i,j)
       + sum((ip,jp)$((ord(ip) = ord(j)) 및 (ord(jp) = ord(i))), yhx(ip,jp)))
       + 합계((hu,zcr(i,j)), yhu(hu,j))
       + 합계(cu, ycu(i,cu))
      =l= 단위*ycol(i);

tc.lo("c-1") = tcout + 1;
tc.up("c-2") = tcin - 1;
tc.lo("c-3") = tcout + 1;
tc.up("c-4") = tcin - 1;
tr.up(j) = trmax(j);

모델 건너뛰기 / 모두 /;

옵션 domLim = 100;

zoau를 최소화하는 minlp를 사용하여 건너뛰기를 해결합니다.