1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
// Reference: E. Sandgren,Nonlinear Integer and Discrete Programming in Mechanical I Design Optimization,Journal of Mechanical Design,JUNE 1990, Vol. 112/223
//A cylindrical pressure vessel is capped at both ends by hemispherical heads.The total cost,
//including the cost of material, cost of forming and welding,is to be minimized. The design variables are Ts and Th are the thicknesses of the shell and head, and R and L, the inner radius and length of the cylindrical section.These variables are denoted by X1 x2 , x3, and x4, respectively, and units for each are inches. The variables are such that R and L are continuous while Ts and Th are integer multiples of 0.0625 inch, the available thicknesses of rolled steel plates.
// Min f = 0.6224*X(1)*X(3)*X(4) + 1.7781*X(2)*X(3)^2 + 3.1661*X(1)^2*X(4) + 19.84*X(1)^2*X(3)
// subject to
// g1(X) - X1 + 0.0193 X3 < = 0
// g2(X) - x2 + 0.00954X3 <= 0
// g3(X) -%pi*X3^2*X4 - (4/3)*%pi*X3^3 + 1296000 <= 0
// g4(X) X4 - 240 <= 0
//======================================================================
// 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: Remya Kommadath
// Organization: FOSSEE, IIT Bombay
// Email: toolbox@scilab.in
//======================================================================
clc;
// Onjective fucntion
function f = ObjectiveFunction (X)
X(1:2) = X(1:2)*0.0625;
f = 0.6224*X(1)*X(3)*X(4) + 1.7781*X(2)*X(3)^2 + 3.1661*X(1)^2*X(4) + 19.84*X(1)^2*X(3);
endfunction
// Non linear equality and inequality constraints
function [C,Ceq] = NLconstraints(X)
X(1:2) = (X(1:2))*0.0625;
C = -%pi*X(3)^2*X(4) - (4/3)*%pi*X(3)^3 + 1296000;
Ceq = [];
endfunction
// Linear inequality constraints
A = [-0.0625 0 0.0193 0;0 -0.0625 0.00954 0;0 0 0 1];
b = [0 0 240]';
// Bounds of the variables
lb = [1 1 10 10];
ub = [99 99 200 200];
nVar = length(lb);
// Initial guess given to the solver
x0 = [20 10 58.291 43.69];
// indices of the integer decision variables
int = [1 2];
// Calling the solver
[xopt,fopt,exitflag,output,lambda] = intfmincon(ObjectiveFunction,x0,int,A,b,[],[],lb,ub,NLconstraints)
// Result representation
// Converting the integer variables to the discrete variable
x0(1:2) = x0(1:2)*0.0625;
clc;
disp(x0,"Initial guess given to the solver")
select exitflag
case 0
disp("Optimal Solution Found")
disp(xopt',"The optimum solution obtained")
disp(fopt,"The optimum value of the objective function")
case 1
disp("Converged to a point of local infeasibility")
case 2
disp("Objective Function is Continuous Unbounded")
case 3
disp("Limit Exceeded")
case 4
disp("User Interupt")
case 5
disp("MINLP Errors")
end
|