Writing Constaints for simulannealbnd
1 回表示 (過去 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!