How to loop a objective function using the optimization toolbox?

16 ビュー (過去 30 日間)
BOWEN LI
BOWEN LI 2019 年 7 月 5 日
回答済み: Bartlomiej Mroczek 2021 年 4 月 27 日
Hi everyone,
I have a question that how can I put a "loop" structure in a optmization problem.
In my problem I have two binary decision variables and a objective function based on these two variables, and I am trying to use optmization toolbox to minimize the objective function.
There are 4 time periods in total, and the binary decision variables are changing(differs) in each time period. My objective function is built on the decision variable so that the objective function is for one time period as well. My goal is to minimize my objective function over all time periods.
For example, I have two binary decision variabe "y" and "s" that differs in each time period,
for n=4 %4 years in total
t=1:n
y=optimvar('y',[4,1],'Type','integer','LowerBound',0,'UpperBound',1);%binary decision variable
s=optimvar('s',[4,1],'Type','integer','LowerBound',0,'UpperBound',1);%binary decision variable
obj=optimproblem
obj.Objective = 2y+3s %minimize 2y+3s
obj.Constraints.precedence=y(t)-y(t-1)>=0 % a precedence constraint about y
[sol,fval] = solve(obj) % maybe use other method, i am supposed to use simmulated annealing

採用された回答

Matt J
Matt J 2019 年 7 月 5 日
編集済み: Matt J 2019 年 7 月 6 日
My objective function is built on the decision variable so that the objective function is for one time period as well.
You cannot solve this as 4 separate problems, because your precedence constraint creates a dependence between y(t) and y(t-1). The following might be what you are looking for (and it doesn't require a loop):
y=optimvar('y',[4,1],'Type','integer','LowerBound',0,'UpperBound',1);%binary decision variable
s=optimvar('s',[4,1],'Type','integer','LowerBound',0,'UpperBound',1);%binary decision variable
obj=optimproblem;
obj.Objective = 2*sum(y)+3*sum(s); %minimize
obj.Constraints.precedence=diff(eye(4))*y>=0; % a precedence constraint about y
[sol,fval] = solve(obj)
  2 件のコメント
BOWEN LI
BOWEN LI 2019 年 7 月 6 日
Thank you so much, really appreciate your help all the way!
But one question that you mentioned it does not need a loop, while my objective function: obj.Objective = 2*sum(y)+3*sum(s), which is for one time period, and I have like 4 time periods in total. Is this one can be formulated as the precedence constraint?
Thank you!
Matt J
Matt J 2019 年 7 月 6 日
編集済み: Matt J 2019 年 7 月 6 日
obj.Objective = 2*sum(y)+3*sum(s), which is for one time period,
It's not for one time period anymore. Originally, you had
obj.Objective = 2*y(t)+3*s(t)
or at least I think that's what you meant. But in my answer, I changed it to
obj.Objective = 2*sum(y)+3*sum(s)
thus summing over all time periods. This was just a guess on my part of what objective function you really want. Only you can know what you're actually trying to solve.

サインインしてコメントする。

その他の回答 (1 件)

Bartlomiej Mroczek
Bartlomiej Mroczek 2021 年 4 月 27 日
Hello to all Geeks:)
I work in the optimization area of the defined function f_PV.
The goal is to find optimal values of the vector a_PV for which ranges are defined.
The function f_PV only exists in a certain range x_PV.
Optimization is about looking for a mini. the values of the vector a in the range of the function.
Code snippet.
Defining the optimization vector
a_PV = optimvar("a_PV", [1,9],"LowerBound",[0.1; 0.1; 0.1; 0.1; 0.1; 0.1; 0.1; 0.1; 0.1]);
Defining a range for x_PV
x_PV = DANE_P_minus(idx0b:idxEb,1)
Defining the function f (a)
for i= x_PV(1):x_PV(end)
f_PV =a_PV(1)*sin(e1*x_PV(i)+f1) + a_PV(2)*sin(e2*x_PV(i)+f2) + a_PV(3)*sin(e3*x_PV(i)+f3) + a_PV(4)*sin(e4*x_PV(i)+f4) + a_PV(5)*sin(e5*x_PV(i)+f5) + a_PV(6)*sin(e6*x_PV(i)+f6) + a_PV(7)*sin(e7*x_PV(i)+f7) + a_PV(8)*sin(e8*x_PV(i)+f8) + a_PV(9)*sin(e9*x_PV(i)+f9);
end
Defining the problem
prob = optimproblem('ObjectiveSense', 'min');
prob.Objective = f_PV;
show(prob)
the values of e and f are defined - calculated
Request for help in compiling the code.

カテゴリ

Help Center および File ExchangeGet Started with Optimization Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by