How to compute a definite sum of a vector as an LP constrain
2 次查看(过去 30 天)
显示 更早的评论
Hello,
My own model is very large and complex so I will try to explain the problem by a simple example: The vector P is a V:1 vector. Each element of P is a positive real number. The following linear programme problem needs to be solved:
%optimization variable x:
x=optimvar('x',V,1);
%Objective function f:
f=optimexpr(size(P));
for t=V:1;
f(t)=P(t)*x(t)
end
%optimization problem:
prob1=optimproblem('ObjectiveSense','minimize');
obj=sum(f);
prob1.Objective=obj;
prob1.Constraints.cons1=x<=1;
prob1.Constraints.cons2=x>=-1;
If one solves the optimization problem above, the optimization variable outcome x will be a V:1 vector with all elements having a value of -1.
Now I want to put a constrain on the definite sum of each element. i.e. the sum of vector elements should never exceed the boundary -3:
. (note that I don't want to constrain the total sum of vector x (
) but only the sum up to the t-th element.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/345126/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/345129/image.png)
I tried introducing the following auxiliary variable to compute the constrain:
%create auxiliary variable
w=optimexpr(size(P));
w(t)=sum(x(1:t))
%create constraint:
prob1.Constraints.cons3=w>=-3
When I put in the constraint, and run the solver, the optimal solution is found. However, the constraint is not taken into account by the solver since each element of vector x has a value of -1.. Is there anyone that knows a way to resolve this problem??
0 个评论
回答(1 个)
Swatantra Mahato
2020-9-11
Hi Roeland,
I am assuming you want
w(t) = sum(x(1:t))
for all values of t from 1 to V. In order to do that you may want to insert the above statement inside the for loop. The loop would change as follows:
f=optimexpr(size(P));
w=optimexpr(size(P));
for t=1:V
f(t)=P(t)*x(t)
w(t)=sum(x(1:t))
end
To check
prob1.Constraints.cons3=w>=-3;
MATLAB then compares every element of w with –3.
As an example for V=5 and P= [88.0224, 98.9022, 1.0517, 86.6784, 61.6441]
we get x=[ -1,-1,1,-1,-1]
Hope this helps
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!