How to add constraints to simulannealbnd minimization
2 views (last 30 days)
Show older comments
How to add constraint to minimization problem?
Simply x(3) >10*x(4)
ConstraintFunction = @simple_constraint; %constraint here does not affect minimization
hybridopts = optimoptions('fmincon','OptimalityTolerance',1e-14);
options = optimoptions(@simulannealbnd,'InitialTemperature',[1e4 1e4 1e4 1e4 ],...
'PlotFcn',{@saplotbestf,@saplottemperature,@saplotf,@saplotstopping},'HybridFcn',{'fmincon',hybridopts},...
'AnnealingFcn','annealingboltz','TemperatureFcn','temperatureboltz');
options.ReannealInterval = 400;
[x,fval] = simulannealbnd(ObjectiveFunction,X0,LB,UB,options);
function [c, ceq] = simple_constraint(x)
c = [-x(3) + 10*x(4)];
% c = [];
ceq = [];
0 Comments
Answers (1)
Walter Roberson
on 14 Apr 2021
You cannot add constraints directly. However you can set AnnealingFcn to the handle of a function that only generates points that meet the constraints.
Alternately you could permit those points to be generated, but set the AcceptanceFcn to reject them.
3 Comments
Walter Roberson
on 14 Apr 2021
No, nothing like that. AnnealFcn needs to return data points; it is not designed as a constraint function.
Give the command
type annealingboltz
to see the code for the default function.
You would need to add a loop that generated new y and newx and keep going generating new ones if the constraint was not met.
See Also
Categories
Find more on Get Started with Optimization Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!