optimizing linprog 2 variables with different dimensions

조회 수: 3 (최근 30일)
bus14
bus14 2019년 4월 17일
댓글: bus14 2019년 4월 19일
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)

채택된 답변

Torsten
Torsten 2019년 4월 17일
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
bus14
bus14 2019년 4월 19일
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 2019년 4월 19일
think I might have found it already with Aeq=[eye(4),A1.']

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by