Writing Constaints for simulannealbnd
4 次查看(过去 30 天)
显示 更早的评论
I am trying to optimize an objective using simulannealbnd function. I have constraints of upper and lower bounds on decision variable x. The constraints are: x > 0 and sum(x)< Maximum_Average_Price. I have coded as follow but the resultant sum(x) goes beyond Maximum_Average_Price. I would appreciate any help.
x0=[price(1:4), priceDash(5:28)];
lb = ones(1,28);
ub= min(sum(x0), price_avg_max);
0 个评论
采纳的回答
Alan Weiss
2017-6-22
The constraint you have is not a bound, it is a linear inequality constraint that cannot be represented by a bound.
I strongly suggest that you do not use simulannealbnd for this problem, and instead use fmincon if your objective function is smooth, and use patternsearch otherwise. If you are looking for a global solution, then start the solver from a variety of initial points
x0 = lb + rand(size(lb)).*(ub - lb);
By the way, you wrote that your lower bound is x >= 1, not x >= 0, since you said lb = ones and not zeros.
Alan Weiss
MATLAB mathematical toolbox documentation
4 个评论
Alan Weiss
2017-6-23
No and no. A linear constraint is not the same as a bound constraint. Draw yourself a picture of x1 + x2 <= 1, and see if you can figure out how to get that picture as a bound constraint. The answer is no, you cannot.
You will have to do one of several things:
- Write your own simulated annealing solver that accepts linear constraints.
- Use a different solver.
- Find a different problem.
Sorry, that is the set of choices.
Alan Weiss
MATLAB mathematical toolbox documentation
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Simulated Annealing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!