optimization for min and max values of a parameter
Show older comments
Im trying to optimize a kind of 4 bar mechanism (lenghts to minimize forces) which has to move within predefined min&max values of an angle as lower and upper bounds. l want my optimization to run according to taking those values into account in the objective function and nonlinear constraints where my system has to reach while working.(Defining the angle as a variable with upper/lower bounds leads to result of finding optimums of the angle too). creating a for loop to iterate every single movement is a good idea? how should l define those min max values? its simple version is below,
Angmin = -30;
Angmax = 30;
Ang = Angmin & Angmax;% optimizan process must take both values into account in the same process.
A =[];
b = [];
Aeq =[];
beq= [];
lb = [];
ub = [];
x0= [40,50,60,70];
function Fmin = minconfcn(x)
Fmin = (x(2)/x(1))*sqrt(x(3)^2+x(2)^2)*cos(x(4)+Ang)
end
function [c,ceq] = nlincnstfcn(x)
c(1) = asin(x(4)+Ang) + x(3)^2 - x(1)^2;
c(2) = sqrt((x(2)*asin(Ang))^2- x(2)^2)+x(1);
ceq = [];
end
[x,Fmin] = fmincon(@minconfcn,x0,A,b,Aeq,beq,lb,ub,@nlincnstfcn)
8 Comments
Matt J
on 28 Feb 2022
If you write a formal mathematical description of the problem for us, it would be easier to say. Basically, though, all Optimization Toolbox solvers allow you to impose upper and lower bounds on the unknown parameters, and fmincon allows you to apply arbitrary (differentiable) nonlinear constraints.
Matt J
on 28 Feb 2022
Again, a formal mathematical description would let us be more helpful.
gigi
on 28 Feb 2022
Matt J
on 28 Feb 2022
Why though is Ang a vector with 61 different values? You made it sound like you had only 2 values, an upper and lower bound.
gigi
on 28 Feb 2022
Matt J
on 28 Feb 2022
No you can't think of 61 values as 2 values. Matlab won't see it that way.
gigi
on 28 Feb 2022
Answers (2)
l think it should be a kind of passing variable extra parameter but l dont know how to do it.
One way is to use nested functions, as below. See also Passing Extra Parameters - MATLAB & Simulink.
function main()
Angmin = -30;
Angmax = 30;
A =[];
b = [];
Aeq =[];
beq= [];
lb = [];
ub = [];
x0= [40,50,60,70];
[x,Fmin] = fmincon(@minconfcn,x0,A,b,Aeq,beq,lb,ub,@nlincnstfcn)
function Fmin = minconfcn(x)
Fmin = (x(2)/x(1))*sqrt(x(3)^2+x(2)^2)*cos(x(4))
end
function [c,ceq] = nlincnstfcn(x)
c(1) = asin(x(4)+Angmin) + x(3)^2 - x(1)^2;
c(2) = sqrt((x(2)*asin(Angmax))^2- x(2)^2)+x(1);
ceq = [];
end
end
7 Comments
gigi
on 28 Feb 2022
Matt J
on 28 Feb 2022
You can pass as many variables as you like in the same manner.
gigi
on 28 Feb 2022
Matt J
on 28 Feb 2022
I have rewritten my answer to show (in hypothetical equations) how Angmin and Angmax can both be manipulated by your constraints. That should be enough. What the actual constraint equations should be is up to you to provide. No one here besides you can possibly know the physics of your problem.
Matt J
on 1 Mar 2022
Again, all of the equations I have written are deliberately wrong. Only you can provide the correct equations. My role here was to show how to make other variables like Angmin avaialble to the objective function and constraints.
gigi
on 2 Mar 2022
function main
Angmin = -30*pi/180;
Angmax = 30*pi/180;
A =[];
b = [];
Aeq =[];
beq= [];
lb = [-Inf -Inf -Inf -Inf Angmin];
ub = [Inf Inf Inf Inf Angmax];
x0= [40,50,60,70*pi/180,10*pi/180];
[x,Fmin] = fmincon(@minconfcn,x0,A,b,Aeq,beq,lb,ub,@nlincnstfcn)
end
function Fmin = minconfcn(x)
Fmin = (x(2)/x(1))*sqrt(x(3)^2+x(2)^2)*cos(x(4)+x(5))
end
function [c,ceq] = nlincnstfcn(x)
c(1) = asin(x(4)+x(5)) + x(3)^2 - x(1)^2;
c(2) = sqrt((x(2)*asin(x(5)))^2- x(2)^2)+x(1);
ceq = [];
end
8 Comments
Torsten
on 2 Mar 2022
Sorry, I don't understand.
gigi
on 2 Mar 2022
Torsten
on 2 Mar 2022
So you want "ang" to be constant during the optimization in your case, but you want to find the respective solutions for "ang" varying between Angmin and Angmax ?
gigi
on 2 Mar 2022
So you want to solve the problem for ang = Angmin and ang = Angmax separately and compare the respective values of the objective function (i.e. which solution is the better one) ?
function main
Angmin = -30*pi/180;
Angmax = 30*pi/180;
A =[];
b = [];
Aeq =[];
beq= [];
lb = [];
ub = [];
x0= [40,50,60,70*pi/180];
Ang = Angmin;
[x1,Fmin1] = fmincon(@(x)minconfcn(x,Ang),x0,A,b,Aeq,beq,lb,ub,@(x)nlincnstfcn(x,Ang))
ang = Angmax;
[x2,Fmin2] = fmincon(@(x)minconfcn(x,Ang),x0,A,b,Aeq,beq,lb,ub,@(x)nlincnstfcn(x,Ang))
end
function Fmin = minconfcn(x,Ang)
Fmin = (x(2)/x(1))*sqrt(x(3)^2+x(2)^2)*cos(x(4)+Ang)
end
function [c,ceq] = nlincnstfcn(x,Ang)
c(1) = asin(x(4)+Ang) + x(3)^2 - x(1)^2;
c(2) = sqrt((x(2)*asin(Ang)))^2- x(2)^2)+x(1);
ceq = [];
end
gigi
on 2 Mar 2022
Torsten
on 2 Mar 2022
Then please write down what your objective function and the constraints are if you use Argmin and Argmax together in one run of fmincon. My phantasy has come to an end.
Categories
Find more on Systems of Nonlinear Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!