optimizing linprog 2 variables with different dimensions

5 views (last 30 days)
Hi community,
my function to optimize is min (l-q).'*z-s.'*y in which .' indicates the transpose.
the constraints for this fucntion are y=x-A1.'*z 0<z<d , y>0 z&y are the decision variables
The given data to use in the function is given below. The difficulty that arises is that the variables of Z & Y do not have the same dimensions as z=[Z] and y=[Y1;Y2] when trying to solve this function. An error pops up: Error using linprog (line 222)
The number of rows in Aeq must be the same as the number of elements of beq. This is because x has 2 rows in my case and Aeq only 1. I cannot find a propper definition for Aeq so that my function works.
does anyone have an idea how I can fix this? Or best handle optimizing 2 variables with different dimensions?
Thank you
l = 0.25;
q = 2;
s = 1;
A1 = [1, 1];
x = [20;25];
d = 120;
f= [-s.', l-q.'];
Aeq = [1, A1];
beq = x;
lb = [0, 0];
ub = [Inf, d];
sol = linprog(f,[],[],Aeq,beq,lb,ub);
y = sol(1)
z = sol(2)

Accepted Answer

Torsten
Torsten on 17 Apr 2019
Set
V = [V(1) V(2) V(3)] = [z y(1) y(2)]
as "combined" solution vector and write all your equations in V instead of z and y.
Then you'll easily see how to set f, Aeq, beq, lb and ub.
  6 Comments
bus14
bus14 on 19 Apr 2019
Hi torsten, As I am now scaling up the problem with having two values for Z and 4 values of Y the dimensional problem becomes more difficult once again. As eye(2),eye(3)... does not work any more for adding values of Y. new Matrix A1[1 1 0 0;0 0 1 1] makes determining Aeq for me rather difficult as the transpose of A1 makes it difficult to calculate.
I tried writing the whole equation out in terms of V as you did above. But, where I am stuck is that Z(1) --> V(5) needs to be multiplied with 2 variables of A1 instead of only one variable as in the previous problem.
l =[0.25; 0.3];
q =[6;5];
s = [1;1.2;1.1;1];
A1 = [1 1 0 0; 0 0 1 1];
x =[20; 25; 28; 26];
d =[120;110];
f =[-s.',(l-q).'];
Aeq =[1 1 0 0;0 0 1 1, A1.'];
beq =x;
lb =[0, 0, 0, 0, 0, 0];
ub =[inf, inf, inf, inf, d(1), d(2)];
sol = linprog(f,[],[],Aeq,beq,lb,ub);
y = [sol(1);sol(2);sol(3);sol(4)]
z= [sol(5); sol(6)]
Hope you can help me out!
bus14
bus14 on 19 Apr 2019
think I might have found it already with Aeq=[eye(4),A1.']

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!