summaryrefslogtreecommitdiff
path: root/1202/CH19/EX19.4
diff options
context:
space:
mode:
Diffstat (limited to '1202/CH19/EX19.4')
-rwxr-xr-x1202/CH19/EX19.4/19_4.sce51
1 files changed, 51 insertions, 0 deletions
diff --git a/1202/CH19/EX19.4/19_4.sce b/1202/CH19/EX19.4/19_4.sce
new file mode 100755
index 000000000..ecddbff72
--- /dev/null
+++ b/1202/CH19/EX19.4/19_4.sce
@@ -0,0 +1,51 @@
+clear
+clc
+
+//Example 19.4
+disp('Example 19.4')
+
+//Here we have Nonlinear programming problem hence we use optim function
+//Since optim does not have the ability to handle constraints
+//we use the penalty method for optimization
+//ie we make the constraints a part of the cost function such that
+//cost function increases severly for any violation of constraints
+//MATLAB users must be familiar with fmincon function in MATLAB
+//Unfortunately a similar function in Scilab is not yet available
+//Fmincon toolbox development for scilab is under development/testing
+
+x0=[2 4 4 1]'; //Initial guess
+
+function y=func(x) //x is 4*1 vector
+ P1=4.5*x(1)+0.1*x(1)^2+4*x(2)+0.06*x(2)^2;
+ P2=4*x(3)+0.05*x(3)^2+3.5*x(4)+0.2*x(4)^2;
+ if (P1>30) then
+ c1=abs(P1-30)^2;
+ elseif P1<18
+ c1=abs(P1-18)^2;
+ else c1=0;
+ end
+ if (P2>25) then
+ c2=abs(P2-30)^2;
+ elseif P2<14
+ c2=abs(P2-18)^2;
+ else c2=0;
+ end
+ c3=abs(P1+P2-50)^2;
+ c4=abs(x(2)+x(4)-5)^2;
+ y=(x(1)+x(3))+100*(c1+c2+c3+c4);
+endfunction
+
+function [f, g, ind] = costf(x, ind)
+ f=func(x);//cost is negative of function to be maximised
+ g=derivative(func,x);//derivative of the cost function
+endfunction
+
+[fopt, xopt] = optim(costf,"b",zeros(4,1), 10*ones(4,1),x0);
+// "b",zeros(4,1), 10*ones(4,1) stands for lower and upper bounds on x
+
+disp(xopt,"Optimum value of x=")
+disp(fopt,"Min value of f=")
+
+mprintf('Note that the answer in book is not as accurate as the one\n...
+calculated from scilab')
+