fmincon does not satisfy one of the constraints

1 次查看(过去 30 天)
Hello,
I want to solve a nonlinear constrained optimization problem. I prepared 3 m-files which are for constraints, objective function and calling optimization toolbox.
M-File to call the optimization toolbox is following:
lb = [12.5;0.000460;0.005]; ub = [75;0.000786;0.160]; A =[]; Aeq= []; b = []; beq = []; x0= [32;0.00058;0.1]; [x,fval,exitflag,output] = fmincon(@microobj,x0,A,b,Aeq,beq,lb,ub,@microcons) [c,ceq] = microcons(x)
M-File for constraints is following:
function [c,ceq] = microcons(x)
b1 = -152.103; b2 = 2.16514; b3 = 1113.81; b4 = 204245; b5 = -0.0179843; b6 = -3391.78; b7 = -248075399; b8 = -7.60179; b9 = 1242.21; b10 = -45237.6; w = 0.500; n = w/x(3); D = 0.4; N = (x(1)*1000)/(pi*D); vL = 12.5; vU = 75; fzL = 0.000460; fzU = 0.000786; DocL = 0.005; DocU = 0.160; TlL = 0; TlU = 20.5; nL = 10000; nU = 60000;
Tl = b1+x(1)*b2+x(3)*b3+x(2)*b4+(x(1)^2)*b5+(x(3)^2)*b6+(x(2)^2)*b7+x(1)*x(3)*b8+x(1)*x(2)*b9+x(2)*x(3)*b10;
c = [vL-x(1);x(1)-vU;fzL-x(2);x(2)-fzU;DocL-x(3);x(3)-DocU;TlL-Tl;Tl-TlU;nL-N;N-nU];
ceq = [(n*x(3))-w];
M-File for objective function is following:
function f = microobj(x)
b1 = -152.103; b2 = 2.16514; b3 = 1113.81; b4 = 204245; b5 = -0.0179843; b6 = -3391.78; b7 = -248075399; b8 = -7.60179; b9 = 1242.21; b10 = -45237.6;
ae = 0.7; D = 0.4; A = 3.2; k = (A-D)/(2*ae*D); L = ((4*k*(k+1)*ae*D) + (2*ae*D)); dL = (k-1)*sqrt(2)*ae*D; Lc = L + dL; Lr = (sqrt(2)*(A-D))/2; w = 0.500; n = w/x(3); N = (x(1)*1000)/(pi*D); z = 2;
frCut = x(2)*z*N;
Tl = b1+x(1)*b2+x(3)*b3+x(2)*b4+(x(1)^2)*b5+(x(3)^2)*b6+(x(2)^2)*b7+x(1)*x(3)*b8+x(1)*x(2)*b9+x(2)*x(3)*b10;
Tm = (Lc/frCut)*n;
c0 = 1; CM = c0* Tm;
Ts = 3; CS = c0*Ts;
Tc = 3; CR = c0*Tc*(ceil(Tm/Tl));
tC = 50; CT = tC*(ceil(Tm/Tl));
f = CM + CS + CR + CT;
However, the tool box ignores "TlL = 0; TlU = 20.5;" limits and finds a negative Tl value. (When the solution is found, the value of 7th row in c vector is positive instead of negative. When I calculated Tl value using x1, x2, x3 and b1 to b10 values, Tl value is sufficiently large negative number). Then I wrote "TlL = 0.0000000001;" (1*10^-10) instead of "TlL = 0;", toolbox finds a reasonable result. Finally I increased the decimals to test whether toolbox always consider the TlL limit or not. When I tested the program for "TlL = 0.0000000000000001;" (1*10^-16), the program again gives a problematic result. I couldn't understand the reason of this problem. If it was a problem with # of decimal digits, it should not give a reasonable results for 1*(10^(-15)) or 1*(10^(-13))
Best Regards,

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Problem-Based Optimization Setup 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by