Separation2 : Nonsharp Separation of Propane, Isobutane, n-Butane and Isopentane in Three Column Distillation

Reference

  • Neculai Andrei, Nonlinear Optimization Applications Using the GAMS Technology,Springer Optimization and Its Applications, Model Separation2 (7.17) in chapter Applications in Chemical Engineering , 2013

Category : GAMS NOA library


Mainfile : separation2.gms

$Ontext
Nonsharp separation of propane, isobutane, n-butane and isopentane in
three column distillation.

Aggarwal, A., Floudas, C.A., Synthesis of general distillation sequences -
nonsharp separations. Comput. Chem. Eng., 14, 1990, pp.631-653.

Floudas, C.A., Pardalos, P.M., et al. Handbook of Test Problems in Local
and Global Optimization. Kluwer Academic Publishers, Dordrecht, 1999,
Section 5.3.3, pp. 46-50.
$Offtext

Scalars a01 /0.31569/,      a02 /0.96926/,     a03 /0.40281/,
        a11 /-0.0112812/,   a12 /-0.0413393/,  a13 /-0.0119785/,
        a21 /0.0072698/,    a22 /0.02282203/,  a23 /0.0082055/,
        a31 /0.0064241/,    a32 /0.0257035/,   a33 /0.009819/;

Scalars bA1 /0.0016446/,    bA2 /0.0015625/,   bA3 /-0.001748/,
        bB1 /0.0018611/,    bB2 /0.0091604/,   bB3 /-0.0002583/,
        bC1 /0.001262/,     bC2 /0.0076758/,   bC3 /-0.0004691/;

Variables F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,
          F9,  F10, F11, F12, F13, F14, F15, F16,
          F17, F18, F19, F20, F21, F22, F23, F24,
          F25, F26, F27, F28, F29, F30, F31, F32,
          xA6, xA10, xA15, xA24, xA25,
          xB6, xB10, xB15, xB24, xB25,
          xC6, xC10, xC15, xC24, xC25,
          xD6, xD10, xD15, xD24, xD25,
          xA7, xB7,  xA16, xB16, xC16,
          xB20, xC20, xD20, xC30, xD30, obj;

Equations e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,
          e19,e20,e21,e22,e23,e24,e25,e26,e27,e28,e29,e30,e31,e32,e33,e34,
          e35,e36,e37,e38,e39,e40,e41,e42,e43,e44,e45,e46,e47,e48,e49,e50,
          e51,e52,e53, e;

e..   obj =e= a01 +(a11+0.85*a21+a31+bA1*xA6+bB1*xB6+bC1*xC6)*F6 +
              a02 +(a12+0.85*a22+0.85*a32+bA2*xA15+bB2*xB15+bC2*xC15)*F15+
              a03 +(a13+a23+0.85*a33+bA3*xA24+bB3*xB24+bC3*xC24)*F24;

e1..  F1 + F2 + F3 + F4 + F5 =e= 600;
e2..  F6 - F1 - F17 - F26 =e= 0;
e3..  F15 - F2 - F11 - F27 =e= 0;
e4..  F24 - F3 - F12 - F21 =e= 0;
e5..  F7 - F8 - F9 =e= 0;
e6..  F10 - F11 - F12 - F13 - F14 =e= 0;
e7..  F16 - F17 - F18 - F19 =e= 0;
e8..  F20 - F21 - F22 - F23 =e= 0;
e9..  F25 - F26 - F27 - F28 - F29 =e= 0;
e10.. F30 - F31 - F32 =e= 0;
e11.. F7*xA7 - 0.85*F6*xA6 =e= 0;
e12.. F16*xB16 - 0.85*F15*xB15 =e= 0;
e13.. F25*xC25 - F24*xC24 =e= 0;
e14.. F10*xB10 - F6*xB6 =e= 0;
e15.. F20*xC20 - 0.85*F15*xC15 =e= 0;
e16.. F30*xD30 - 0.85*F24*xD24 =e= 0;
e17.. F6*xA6 - F7*xA7 - F10*xA10 =e= 0;
e18.. F6*xB6 - F7*xB7 - F10*xB10 =e= 0;
e19.. F6*xC6 - F10*xC10 =e= 0;
e20.. F6*xD6 - F10*xD10 =e= 0;
e21.. F15*xA15 - F16*xA16 =e= 0;
e22.. F15*xB15 - F16*xB16 - F20*xB20 =e= 0;
e23.. F15*xC15 - F16*xC16 - F20*xC20 =e= 0;
e24.. F15*xD15 - F20*xD20 =e= 0;
e25.. F24*xA24 - F25*xA25 =e= 0;
e26.. F24*xB24 - F25*xB25 =e= 0;
e27.. F24*xC24 - F25*xC25 - F30*xC30 =e= 0;
e28.. F24*xD24 - F25*xD25 - F30*xD30 =e= 0;
e29.. 0.250*F1 + F17*xA16 + F26*xA25 - F6*xA6 =e= 0;
e30.. 0.333*F1 + F17*xB16 + F26*xB25 - F6*xB6 =e= 0;
e31.. 0.167*F1 + F17*xC16 + F26*xC25 - F6*xC6 =e= 0;
e32.. 0.250*F1 + F26*xD25 - F6*xD6 =e= 0;
e33.. 0.250*F2 + F11*xA10 + F27*xA25 - F15*xA15 =e= 0;
e34.. 0.333*F2 + F11*xB10 + F27*xB25 - F15*xB15 =e= 0;
e35.. 0.167*F2 + F11*xC10 + F27*xC25 - F15*xC15 =e= 0;
e36.. 0.250*F2 + F11*xD10 + F27*xD25 - F15*xD15 =e= 0;
e37.. 0.250*F3 + F12*xA10 - F24*xA24 =e= 0;
e38.. 0.333*F3 + F12*xB10 + F21*xB20 - F24*xB24 =e= 0;
e39.. 0.167*F3 + F12*xC10 + F21*xC20 - F24*xC24 =e= 0;
e40.. 0.250*F3 + F12*xD10 + F21*xD20 - F24*xD24 =e= 0;
e41.. 0.250*F4 + F8*xA7 + F13*xA10 + F18*xA16 + F28*xA25 =e= 50;
e42.. 0.222*F4 + F8*xB7 + F13*xB10 + F18*xB16 + F22*xB20 + F28*xB25 =e= 100;
e43.. 0.167*F4 + F13*xC10 + F18*xC16 + F22*xC20 + F28*xC25 + F31*xC30 =e= 40;
e44.. 0.250*F4 + F13*xD10 + F22*xD20 + F28*xD25 + F31*xD30 =e= 100;
e45.. xA6 + xB6 + xC6 + xD6 =e= 1;
e46.. xA7 + xB7 =e= 1;
e47.. xA10 + xB10 + xC10 + xD10 =e= 1;
e48.. xA15 + xB15 + xC15 + xD15 =e= 1;
e49.. xA16 + xB16 + xC16 =e= 1;
e50.. xB20 + xC20 + xD20 =e= 1;
e51.. xA24 + xB24 + xC24 + xD24 =e= 1;
e52.. xA25 + xB25 + xC25 + xD25 =e= 1;
e53.. xC30 + xD30 =e= 1;

* Bounds on variables
F1.lo=0;      F1.up=600;       F2.lo=0;      F2.up=600;
F3.lo=0;      F3.up=600;       F4.lo=0;      F4.up=600;
F5.lo=0;      F5.up=600;       F6.lo=0;      F6.up=600;
F7.lo=0;      F7.up=600;       F8.lo=0;      F8.up=600;
F9.lo=0;      F9.up=600;       F10.lo=0;     F10.up=600;
F11.lo=0;     F11.up=600;      F12.lo=0;     F12.up=600;
F13.lo=0;     F13.up=600;      F14.lo=0;     F14.up=600;
F15.lo=0;     F15.up=600;      F16.lo=0;     F16.up=600;
F17.lo=0;     F17.up=600;      F18.lo=0;     F18.up=600;
F19.lo=0;     F19.up=600;      F20.lo=0;     F20.up=600;
F21.lo=0;     F21.up=600;      F22.lo=0;     F22.up=600;
F23.lo=0;     F23.up=600;      F24.lo=0;     F24.up=600;
F25.lo=0;     F25.up=600;      F26.lo=0;     F26.up=600;
F27.lo=0;     F27.up=600;      F28.lo=0;     F28.up=600;
F29.lo=0;     F29.up=600;      F30.lo=0;     F30.up=600;
F31.lo=0;     F31.up=600;      F32.lo=0;     F32.up=600;

xA6.lo=0;     xA6.up=1;        xA10.lo=0;    xA10.up=1;
xA15.lo=0;    xA15.up=1;       xA24.lo=0;    xA24.up=1;
xA25.lo=0;    xA25.up=1;       xB6.lo=0;     xB6.up=1;
xB10.lo=0;    xB10.up=1;       xB15.lo=0;    xB15.up=1;
xB24.lo=0;    xB24.up=1;       xB25.lo=0;    xB25.up=1;
xC6.lo=0;     xC6.up=1;        xC10.lo=0;    xC10.up=1;
xC15.lo=0;    xC15.up=1;       xC24.lo=0;    xC24.up=1;
xC25.lo=0;    xC25.up=1;       xD6.lo=0;     xD6.up=1;
xD10.lo=0;    xD10.up=1;       xD15.lo=0;    xD15.up=1;
xD24.lo=0;    xD24.up=1;       xD25.lo=0;    xD25.up=1;
xA7.lo=0;     xA7.up=1;        xB7.lo=0;     xB7.up=1;
xA16.lo=0;    xA16.up=1;       xB16.lo=0;    xB16.up=1;
xC16.lo=0;    xC16.up=1;       xB20.lo=0;    xB20.up=1;
xC20.lo=0;    xC20.up=1;       xD20.lo=0;    xD20.up=1;
xC30.lo=0;    xC30.up=1;       xD30.lo=0;    xD30.up=1;

* Initial point  (a variant)
F1.l=160;     F2.l=110;        F3.l=90;      F4.l=60;
F5.l=170;     F6.l=162;        F7.l=30;      F8.l=0;
F9.l=30;      F10.l=127;       F13.l=130;    F15.l=120;
F16.l=70;     F18.l=65;        F20.l=50;     F21.l=50;
F22.l=0;      F24.l=140;       F25.l=98;     F28.l=0;
F29.l=100;    F30.l=40;        F31.l=40;
xA6.l=0.2;    xA7.l=1;         xB7.l=0;      xB10.l=0.4;
xB15.l=0.3;   xB16.l=0.5;      xB24.l=0.2;   xC10.l=0.2;
xC20.l=0.3;   xC24.l=0.2;      xC25.l=0.3;   xD6.l=0.25;
xD20.l=0.6;

Model separation2 /all/;

$iftheni x%mode%==xbook
$onecho >bench.opt
  solvers knitro minos snopt
$offecho
separation2.optfile=1;
option nlp=bench
$endif

Solve separation2 minimizing obj using nlp;
* End separation2