logmip3.gms : LogMIP User's Manual Example 3 - Synthesis of 8 Processes
This model selects optimal processes from within a given superstructure.
References:
MARCO DURAN , PH.D. THESIS , 1984. CARNEGIE-MELLON UNIVERSITY,
PITTSBURGH , PA.
Turkay & Grossmann, LOGIC-BASED MINLP ALGORITHMS FOR THE OPTIMAL
SYNTHESIS OF PROCESS NETWORKS, Computers and Chemical Engineering 20,
8, p. 959-978, 1996
Aldo Vecchietti, LogMIP User's Manual, http://www.logmip.ceride.gov.ar/, 2007
References:
- Raman, R, and Grossmann, I E, Modeling and Computational Techniques for Logic Based Integer Programming. Computers and Chemical Engineering 18, 7 (1994), 563-578.
- Turkay M., and Grossmann, I E, Logic-Based Algorithms for the Optimal Synthesis of Process Networks. Computers and Chemical Engineering 20, 8 (1996), 959-978.
Small Model of Types: LOGMIP minlp
$title LogMIP User's Manual Example 3 - Synthesis of 8 Processe (LOGMIP3,SEQ=336)
$ontext
This model selects optimal processes from within a given superstructure.
References:
MARCO DURAN , PH.D. THESIS , 1984. CARNEGIE-MELLON UNIVERSITY,
PITTSBURGH , PA.
Turkay & Grossmann, LOGIC-BASED MINLP ALGORITHMS FOR THE OPTIMAL
SYNTHESIS OF PROCESS NETWORKS, Computers and Chemical Engineering 20,
8, p. 959-978, 1996
Aldo Vecchietti, LogMIP User's Manual, http://www.logmip.ceride.gov.ar/, 2007
$offtext
SETS I PROCESS STREAMS / 1*25 /
J PROCESS UNITS / 1*8 /
PARAMETERS CV(I) VARIABLE COST COEFF FOR PROCESS UNITS - STREAMS/
3 = -10 , 5 = -15 , 9 = -40
19 = 25 , 21 = 35 , 25 = -35
17 = 80 , 14 = 15 , 10 = 15
2 = 1 , 4 = 1 , 18 = -65
20 = -60 , 22 = -80 /;
VARIABLES PROF PROFIT ;
BINARY VARIABLES Y(J) ;
POSITIVE VARIABLES X(I) , CF(J) ;
EQUATIONS
* EQUATIONS COMMON TO NLP SUBPROBLEMS AND MASTER PROBLEMS:
* --------------------------------------------------------
MASSBAL1 MASS BALANCE #1
MASSBAL2 MASS BALANCE #2
MASSBAL3 MASS BALANCE #3
MASSBAL4 MASS BALANCE #4
MASSBAL5 MASS BALANCE #5
MASSBAL6 MASS BALANCE #6
MASSBAL7 MASS BALANCE #7
MASSBAL8 MASS BALANCE #8
SPECS1 DESIGN SPECIFICATION 1
SPECS2 DESIGN SPECIFICATION 2
SPECS3 DESIGN SPECIFICATION 3
SPECS4 DESIGN SPECIFICATION 4
* EQUATIONS FOR THE MASTER PROBLEMS ONLY:
* ---------------------------------------
LOGICAL1 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 1 EXISTS
LOGICAL2 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 2 EXISTS
LOGICAL3 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 3 EXISTS
LOGICAL4 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 4 EXISTS
LOGICAL5 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 5 EXISTS
LOGICAL6 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 6 EXISTS
LOGICAL7 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 7 EXISTS
LOGICAL8 CONSTRAINTS WHICH ALLOW FLOW IFF UNIT 8 EXISTS
* EQUATIONS FOR THE NLP SUBPROBLEMS ONLY:
* ---------------------------------------
INOUT11 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 1
INOUT12
INOUT13
INOUT14
INOUT21 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 2
INOUT22
INOUT23
INOUT24
INOUT31 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 3
INOUT32
INOUT34
INOUT41 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 4
INOUT42
INOUT43
INOUT44
INOUT45
INOUT51 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 5
INOUT52
INOUT53
INOUT54
INOUT61 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 6
INOUT62
INOUT63
INOUT64
INOUT71 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 7
INOUT72
INOUT73
INOUT74
INOUT81 INPUT-OUTPUT RELATIONS FOR PROCESS UNIT 8
INOUT82
INOUT83
INOUT84
INOUT85
INOUT86
OBJETIVO OBJECTIVE FUNCTION DEFINITION ;
* BOUNDS SECTION:
* ---------------
X.UP('3') = 2.0 ;
X.UP('5') = 2.0 ;
X.UP('9') = 2.0 ;
X.UP('10') = 1.0 ;
X.UP('14') = 1.0 ;
X.UP('17') = 2.0 ;
X.UP('19') = 2.0 ;
X.UP('21') = 2.0 ;
X.UP('25') = 3.0 ;
* EQUATIONS COMMON TO NLP SUBPROBLEMS AND MASTER PROBLEMS:
* --------------------------------------------------------
MASSBAL1 .. X('13') =E= X('19') + X('21') ;
MASSBAL2 .. X('17') =E= X('9') + X('16') + X('25') ;
MASSBAL3 .. X('11') =E= X('12') + X('15') ;
MASSBAL4 .. X('3') + X('5') =E= X('6') + X('11') ;
MASSBAL5 .. X('6') =E= X('7') + X('8') ;
MASSBAL6 .. X('23') =E= X('20') + X('22') ;
MASSBAL7 .. X('23') =E= X('14') + X('24') ;
MASSBAL8 .. X('1') =E= X('2') + X('4') ;
SPECS1 .. X('10') =L= 0.8 * X('17') ;
SPECS2 .. X('10') =G= 0.4 * X('17') ;
SPECS3 .. X('12') =L= 5.0 * X('14') ;
SPECS4 .. X('12') =G= 2.0 * X('14') ;
LOGICAL1 .. X('2') + X('3') =L= 10. * Y('1') ;
LOGICAL2 .. X('4') + X('5') =L= 10. * Y('2') ;
LOGICAL3 .. X('9') =L= 10. * Y('3') ;
LOGICAL4 .. X('12') + X('14') =L= 10. * Y('4') ;
LOGICAL5 .. X('15') =L= 10. * Y('5') ;
LOGICAL6 .. X('19') =L= 10. * Y('6') ;
LOGICAL7 .. X('21') =L= 10. * Y('7') ;
LOGICAL8 .. X('10') + X('17') =L= 10. * Y('8') ;
INOUT11.. EXP(X('3')) -1. =E= X('2') ;
INOUT14.. CF('1') =E= 5 ;
INOUT12.. X('2') =E= 0 ;
INOUT13.. X('3') =E= 0 ;
INOUT21.. EXP(X('5')/1.2) -1. =E= X('4') ;
INOUT24.. CF('2') =E= 8 ;
INOUT22.. X('4') =E= 0 ;
INOUT23.. X('5') =E= 0 ;
INOUT31.. 1.5 * X('9') + X('10') =E= X('8') ;
INOUT34.. CF('3') =E= 6 ;
INOUT32.. X('9') =E= 0 ;
INOUT41.. 1.25 * (X('12')+X('14')) =E= X('13') ;
INOUT45.. CF('4') =E= 10 ;
INOUT42.. X('12') =E= 0 ;
INOUT43.. X('13') =E= 0 ;
INOUT44.. X('14') =E= 0 ;
INOUT51.. X('15') =E= 2. * X('16') ;
INOUT54.. CF('5') =E= 6 ;
INOUT52.. X('15') =E= 0 ;
INOUT53.. X('16') =E= 0 ;
INOUT61.. EXP(X('20')/1.5) -1. =E= X('19') ;
INOUT64.. CF('6') =E= 7 ;
INOUT62.. X('19') =E= 0 ;
INOUT63.. X('20') =E= 0 ;
INOUT71.. EXP(X('22')) -1. =E= X('21') ;
INOUT74.. CF('7') =E= 4 ;
INOUT72.. X('21') =E= 0 ;
INOUT73.. X('22') =E= 0 ;
INOUT81.. EXP(X('18')) -1. =E= X('10') + X('17');
INOUT86.. CF('8') =E= 5 ;
INOUT82.. X('10') =E= 0 ;
INOUT83.. X('17') =E= 0 ;
INOUT84.. X('18') =E= 0 ;
INOUT85.. X('25') =E= 0 ;
OBJETIVO .. PROF =E= SUM(J,CF(J)) + SUM(I , X(I)*CV(I)) + 122 ;
$ONECHO > "%lm.info%"
disjunction d1, d2, d3, d4, d5, d6, d7, d8;
d1 is
if Y('1') then
INOUT11;
INOUT14;
else
INOUT12;
INOUT13;
endif;
d2 is
if Y('2') then
INOUT21;
INOUT24;
else
INOUT22;
INOUT23;
endif;
d3 is
if Y('3') then
INOUT31;
INOUT34;
else
INOUT32;
endif;
d4 is
if Y('4') then
INOUT41;
INOUT45;
else
INOUT42;
INOUT43;
INOUT44;
endif;
d5 is
if Y('5') then
INOUT51;
INOUT54;
else
INOUT52;
INOUT53;
endif;
d6 is
if Y('6') then
INOUT61;
inout64;
else
INOUT62;
INOUT63;
endif;
d7 is
if Y('7') then
INOUT71;
INOUT74;
else
INOUT72;
INOUT73;
endif;
d8 is
if Y('8') then
INOUT81;
INOUT86;
else
INOUT82;
INOUT83;
INOUT84;
INOUT85;
endif;
atmost(Y('1'), Y('2'));
atmost(Y('4'), Y('5'));
atmost(Y('6'), Y('7'));
Y('1') -> Y('3') or Y('4') or Y('5');
Y('2') -> Y('3') or Y('4') or Y('5');
Y('3') -> Y('8');
Y('3') -> Y('1') or Y('2');
Y('4') -> Y('1') or Y('2');
Y('4') -> Y('6') or Y('7');
Y('5') -> Y('1') or Y('2');
Y('5') -> Y('8');
Y('6') -> Y('4');
Y('7') -> Y('4');
INIT TRUE Y('2'), Y('3'), Y('4'), Y('6'), Y('8');
INIT TRUE Y('1'), Y('3'), Y('4'), Y('7'), Y('8');
INIT FALSE Y('2'), Y('4'), Y('6'), Y('7');
$OFFECHO
OPTION MINLP=LMLBOA, OPTCR = 0, LIMCOL = 0, LIMROW = 0;
MODEL EXAMPLE3 / ALL / ;
SOLVE EXAMPLE3 USING MINLP MINIMIZING PROF ;