summaryrefslogtreecommitdiff
path: root/code/intfmincon/ProcessSel.sce
diff options
context:
space:
mode:
Diffstat (limited to 'code/intfmincon/ProcessSel.sce')
-rw-r--r--code/intfmincon/ProcessSel.sce148
1 files changed, 148 insertions, 0 deletions
diff --git a/code/intfmincon/ProcessSel.sce b/code/intfmincon/ProcessSel.sce
new file mode 100644
index 0000000..d2efefb
--- /dev/null
+++ b/code/intfmincon/ProcessSel.sce
@@ -0,0 +1,148 @@
+//This is an MINLP example.The solution to the problem is Y1=1,Y2=0;Y3=1;C1=1;B1=1.111;B2=0;B3=1.111;BP=0;A2=0;A3=1.52;
+//Netprofit = 1.923 (10^3$/hr))
+//Ref:Optimization of chemical processes, second edition. By Thomas F. Edgar, David M. Himmelblau, and Leon S. Lasdon, McGraw Hill, New York, 2001, Chapter 9
+//The manufacture of a chemical C in process 1 that uses raw material B.B can either be purchased or
+//manufactured via two processes, 2 or 3, both of which use chemical A as a raw mate-rial.Data and
+//specifications for this example problem, involving several nonlinear input4utput relations (mass balances),
+//are shown in Table.We want to deter-mine which processes to use and their production levels in order to
+//maximize profit.The processes represent design alternatives that have not yet been built. Their fixed
+//costs include amortized design and construction costs over their anticipated lifetime,which are incurred
+//only if the process is used
+//
+// A2------Process2-------------B2
+// A1------Process3-------------B3
+// B2+B3+BP---------------------B1
+// B1------Process1-------------C1
+//
+//Problem Data
+//Conversions Process 1 C = 0.9B
+// Process 2 B = ln(1+A)
+// Process 3 B = 1.2ln(1+A) (A,B,C in tons)
+//
+//Maximum Capacity Process 1 2 ton/h of C
+// Process 1 4 ton/h of B
+// Process 1 5 ton/h of B
+//
+//Price A: $1800/ton
+// B: $7000/ton
+// C: $13000/ton
+//
+//Demand of C: 1 ton/h maximum
+//Costs:
+//---------------------------------------------------------------------------------
+// Fixed(10^3 $/hr) variable (10^3 $/ton of product)
+//Process 1 3.5 2
+//Process 1 1 1
+//Process 1 1.5 1.2
+//---------------------------------------------------------------------------------
+////======================================================================
+// Copyright (C) 2018 - IIT Bombay - FOSSEE
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution. The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+// Author:Debasis Maharana
+// Organization: FOSSEE, IIT Bombay
+// Email: toolbox@scilab.in
+//======================================================================
+
+clc;
+//Objective function to calculate profit
+function costval = ProcessSel(x)
+ Y1 = x(1);Y2 = x(2);Y3 = x(3);
+ C1 = x(4);B1 = x(5);B2 = x(6);
+ B3 = x(7);BP = x(8);A2 = x(9);A3 = x(10);
+
+ Income = 13*C1;
+ Purchase = 7 * BP;
+ Chemical = 1.8*A2 + 1.8*A3;
+ Invest = 3.5*Y1 + 2*C1 + Y2 + B2 + 1.5*Y3 + 1.2*B3;
+
+ costval = -(Income - (Purchase + Chemical + Invest));
+endfunction
+
+//Nonlinear constraint function
+function [C,Ceq] = Nonlincon(x)
+ Y1 = x(1);Y2 = x(2);Y3 = x(3);
+ C1 = x(4);B1 = x(5);B2 = x(6);
+ B3 = x(7);BP = x(8);A2 = x(9);A3 = x(10);
+ //No Non-linear inequality constraint
+ C = [];
+ Ceq(1) = C1-0.9*B1;
+ Ceq(2) = B2-log(1+A2);
+ Ceq(3) = B3 - 1.2*log(1+A3);
+
+endfunction
+
+// Decision vector structure
+// Y1 = x(1);Y2 = x(2);Y3 = x(3);C1 = x(4);B1 = x(5);B2 = x(6);B3 = x(7);BP = x(8);A2 = x(9);A3 = x(10);
+
+//Inequality constraints
+A = [0 -4 0 0 0 1 0 0 0 0
+0 0 -5 0 0 0 1 0 0 0
+-2 0 0 1 0 0 0 0 0 0];
+
+b = zeros(3,1);
+
+//Equality Constraint
+Aeq = [0 0 0 0 1 -1 -1 -1 0 0;];
+beq = 0;
+//Number of variables
+Var = 10;
+//Capacity Constraints are used for deciding upper bounds of variables
+C1max = 1;
+B2max = 4;
+B3max = 5;
+
+A2max = exp(B2max)-1;
+A3max = exp(B3max/1.2)-1;
+B1max = C1max/0.9;
+BPmax = B1max;
+
+//Bounds on variables
+lb = zeros(1,Var);
+// Important to give proper UB as otherwise solution might become sub optimal
+//users can try ub = [1 1 1 1 %inf %inf %inf %inf %inf %inf];
+
+ub = [1 1 1 C1max B1max B2max B3max BPmax A2max A3max];
+//Initial guess
+x0 = lb;
+//Integer ariables
+intcon = [1 2 3];
+mprintf('The decision variables and their bounds are")
+
+var = ['Y1','Y2','Y3','C1','B1','B2','B3','BP','A2','A3'];
+Table = [['Variables','lower Bound','Upper Bound'];[var' string(lb') string(ub')]];
+disp(Table)
+
+input("Press enter to solve the problem");
+clc
+//Using intfmin for solving MINLP
+mprintf("Scilab is solving the problem")
+[xopt,fopt,exitflag,gradient,hessian]= intfmincon(ProcessSel,x0,intcon,A,b,Aeq,beq,lb,ub,Nonlincon)
+clc;
+Y1 = xopt(1);Y2 = xopt(2);Y3 = xopt(3);C1 = xopt(4);B1 = xopt(5);B2 = xopt(6);
+B3 = xopt(7);BP = xopt(8);A2 = xopt(9);A3 = xopt(10);
+
+select exitflag
+case 0
+ mprintf("Optimal Solution Found");
+ mprintf("\n Net profit is %f $ \n Net production is : %f ton/hr",-fopt*1000,C1)
+ mprintf("\n The following production process should be followed \n")
+ mprintf("\n Amount of raw material A2: %f ton/hr \n Amount of raw material A3: %f ton/hr \n amount of B1 purchased : %f ton/hr",A2,A3,B1)
+
+case 1
+ mprintf("InFeasible Solution.");
+case 2
+ mprintf("Objective Function is Continuous Unbounded.");
+case 3
+ mprintf("Limit Exceeded.");
+case 4
+ mprintf("User Interrupt");
+case 5
+ mprintf("MINLP Error")
+end
+
+
+