Pool2 : Pooling: Blending. A Pooling System with Five Feeds, Three Pools and Five Products

Reference

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

Category : GAMS NOA library


Mainfile : pool2.gms

$ontext
 A pooling system with five feeds, three pools and five products.
$offtext

VARIABLES
         q11  fraction of flow to pool 1 from feed 1
         q12  fraction of flow to pool 1 from feed 2
         q13  fraction of flow to pool 1 from feed 3
         q21  fraction of flow to pool 2 from feed 1
         q22  fraction of flow to pool 2 from feed 2
         q23  fraction of flow to pool 2 from feed 3
         q41  fraction of flow to pool 4 from feed 1
         q42  fraction of flow to pool 4 from feed 2
         q43  fraction of flow to pool 4 from feed 3
         q51  fraction of flow to pool 5 from feed 1
         q52  fraction of flow to pool 5 from feed 2
         q53  fraction of flow to pool 5 from feed 3
         z31  flow from feed 3 to product 1
         z32  flow from feed 3 to product 2
         z33  flow from feed 3 to product 3
         z34  flow from feed 3 to product 4
         z35  flow from feed 3 to product 5
         y11  flow from pool 1 to product 1
         y12  flow from pool 1 to product 2
         y13  flow from pool 1 to product 3
         y14  flow from pool 1 to product 4
         y15  flow from pool 1 to product 5
         y21  flow from pool 2 to product 1
         y22  flow from pool 2 to product 2
         y23  flow from pool 2 to product 3
         y24  flow from pool 2 to product 4
         y25  flow from pool 2 to product 5
         y31  flow from pool 3 to product 1
         y32  flow from pool 3 to product 2
         y33  flow from pool 3 to product 3
         y34  flow from pool 3 to product 4
         y35  flow from pool 3 to product 5
      objval  objective function variable;

FREE VARIABLES    objval;

EQUATIONS
         f Objective function
         g1
         g2
         g3
         g4
         g5
         g6
         g7
         g8
         g9
         g10
         g11
         g12
         g13
         g14
         g15
         g16
         g17
         g18
         g19  ;

f  .. objval =e= (18 - 6*q11 - 16*q21 - 15*q41 - 12*q51)*y11 +
                 (18 - 6*q12 - 16*q22 - 15*q42 - 12*q52)*y21 +
                 (18 - 6*q13 - 16*q23 - 15*q43 - 12*q53)*y31 +
                 (15 - 6*q11 - 16*q21 - 15*q41 - 12*q51)*y12 +
                 (15 - 6*q12 - 16*q22 - 15*q42 - 12*q52)*y22 +
                 (15 - 6*q13 - 16*q23 - 15*q43 - 12*q53)*y32 +
                 (19 - 6*q11 - 16*q21 - 15*q41 - 12*q51)*y13 +
                 (19 - 6*q12 - 16*q22 - 15*q42 - 12*q52)*y23 +
                 (19 - 6*q13 - 16*q23 - 15*q43 - 12*q53)*y33 +
                 (16 - 6*q11 - 16*q21 - 15*q41 - 12*q51)*y14 +
                 (16 - 6*q12 - 16*q22 - 15*q42 - 12*q52)*y24 +
                 (16 - 6*q13 - 16*q23 - 15*q43 - 12*q53)*y34 +
                 (14 - 6*q11 - 16*q21 - 15*q41 - 12*q51)*y15 +
                 (14 - 6*q12 - 16*q22 - 15*q42 - 12*q52)*y25 +
                 (14 - 6*q13 - 16*q23 - 15*q43 - 12*q53)*y35 +
                 8*z31 + 5*z32 + 9*z33 + 6*z34 + 4*z35;

g1  .. q41*y11 + q41*y12 + q41*y13 + q41*y14 + q41*y15 + q42*y21 +
       q42*y22 + q42*y23 + q42*y24 + q42*y25 + q43*y31 + q43*y32 +
       q43*y33 + q43*y34 + q43*y35 =l= 50;

g2  .. y11 + y21 + y31 + z31 =l= 100;
g3  .. y12 + y22 + y32 + z32 =l= 200;
g4  .. y13 + y23 + y33 + z33 =l= 100;
g5  .. y14 + y24 + y34 + z34 =l= 100;
g6  .. y15 + y25 + y35 + z35 =l= 100;

g7  .. (3*q11 + q21 + q41 + 1.5*q51 -2.5)*y11 +
       (3*q12 + q22 + q42 + 1.5*q52 - 2.5)*y21 +
       (3*q13 + q23 + q43 + 1.5*q53 - 2.5)*y31 - 0.5*z31 =l= 0;

g8  .. (q11 + 3*q21 + 2.5*q41 + 2.5*q51 -2)*y11 +
       (q12 + 3*q22 + 2.5*q42 + 2.5*q52 - 2)*y21 +
       (q13 + 3*q23 + 2.5*q43 + 2.5*q53 - 2)*y31 + 0.5*z31 =l= 0;
g9  .. (3*q11 + q21 + q41 + 1.5*q51 -1.5)*y12 +
       (3*q12 + q22 + q42 + 1.5*q52 - 1.5)*y22 +
       (3*q13 + q23 + q43 + 1.5*q53 - 1.5)*y32 + 0.5*z32  =l= 0;
g10  .. (q11 + 3*q21 + 2.5*q41 + 2.5*q51 -2.5)*y12 +
        (q12 + 3*q22 + 2.5*q42 + 2.5*q52 - 2.5)*y22 +
        (q13 + 3*q23 + 2.5*q43 + 2.5*q53 - 2.5)*y32 =l= 0;
g11  .. (3*q11 + q21 + q41 + 1.5*q51 -2)*y13 +
        (3*q12 + q22 + q42 + 1.5*q52 - 2)*y23 +
        (3*q13 + q23 + q43 + 1.5*q53 - 2)*y33 =l= 0;
g12  .. (q11 + 3*q21 + 2.5*q41 + 2.5*q51 -2.6)*y13 +
        (q12 + 3*q22 + 2.5*q42 + 2.5*q52 - 2.6)*y23 +
        (q13 + 3*q23 + 2.5*q43 + 2.5*q53 - 2.6)*y33 - 0.1*z33  =l= 0;
g13  .. (3*q11 + q21 + q41 + 1.5*q51 -2)*y14 +
        (3*q12 + q22 + q42 + 1.5*q52 - 2)*y24 +
        (3*q13 + q23 + q43 + 1.5*q53 - 2)*y34 =l= 0;
g14  .. (q11 + 3*q21 + 2.5*q41 + 2.5*q51 -2)*y14 +
        (q12 + 3*q22 + 2.5*q42 + 2.5*q52 - 2)*y24 +
        (q13 + 3*q23 + 2.5*q43 + 2.5*q53 - 2)*y34 + 0.5*z34  =l= 0;
g15  .. (3*q11 + q21 + q41 + 1.5*q51 -2)*y15 +
        (3*q12 + q22 + q42 + 1.5*q52 - 2)*y25 +
        (3*q13 + q23 + q43 + 1.5*q53 - 2)*y35  =l= 0;
g16  .. (q11 + 3*q21 + 2.5*q41 + 2.5*q51 -2)*y15 +
        (q12 + 3*q22 + 2.5*q42 + 2.5*q52 - 2)*y25 +
        (q13 + 3*q23 + 2.5*q43 + 2.5*q53 - 2)*y35 + 0.5*z35  =l= 0;

g17  .. q11 + q21 + q41 + q51 =e= 1;
g18  .. q12 + q22 + q42 + q52 =e= 1;
g19  .. q13 + q23 + q43 + q53 =e= 1;

* Bounds
q11.LO = 0; q11.UP = 1;
q12.LO = 0; q12.UP = 1;
q13.LO = 0; q13.UP = 1;
q21.LO = 0; q21.UP = 1;
q22.LO = 0; q22.UP = 1;
q23.LO = 0; q23.UP = 1;
q41.LO = 0; q41.UP = 1;
q42.LO = 0; q42.UP = 1;
q43.LO = 0; q43.UP = 1;
q51.LO = 0; q51.UP = 1;
q52.LO = 0; q52.UP = 1;
q53.LO = 0; q53.UP = 1;
y11.LO = 0; y11.UP = 100;
y12.LO = 0; y12.UP = 200;
y13.LO = 0; y13.UP = 100;
y14.LO = 0; y14.UP = 100;
y15.LO = 0; y15.UP = 100;
y21.LO = 0; y21.UP = 100;
y22.LO = 0; y22.UP = 200;
y23.LO = 0; y23.UP = 100;
y24.LO = 0; y24.UP = 100;
y25.LO = 0; y25.UP = 100;
y31.LO = 0; y31.UP = 100;
y32.LO = 0; y32.UP = 200;
y33.LO = 0; y33.UP = 100;
y34.LO = 0; y34.UP = 100;
y35.LO = 0; y35.UP = 100;
z31.LO = 0; z31.UP = 100;
z32.LO = 0; z32.UP = 200;
z33.LO = 0; z33.UP = 100;
z34.LO = 0; z34.UP = 100;
z35.LO = 0; z35.UP = 100;

* Starting point (global solution)
* q11.L =  1; q12.L =  0; q13.L =  0.2757;
* q21.L =  0; q22.L =  0; q23.L =  0;
* q41.L =  0; q42.L =  0; q43.L =  0;
* q51.L =  0; q52.L =  1; q53.L =  0.7243;
* y11.L =  51.5527; y12.L =  0; y13.L =  0;
* y14.L =  7.9609; y15.L =  15.7866;
* y21.L =  0; y22.L =  200; y23.L =  0;
* y24.L =  0; y25.L =  20.5622;
* y31.L =  17.9054; y32.L =  0; y33.L =  0;
* y34.L =  92.0391; y35.L =  63.6512;
* z31.L =  30.4969; z32.L =  0; z33.L =  100;
* z34.L =  0; z35.L =  0;

MODEL Pool2 /ALL/;

*$onecho >bench.opt
*  solvers conopt knitro minos
*$offecho
pool2.optfile=1;
*option nlp=bench;

SOLVE Pool2 USING NLP MAXIMIZING objval;
* End Pool2