MATLAB Answers

linprog cannot find solution

3 views (last 30 days)
Dany
Dany on 20 Sep 2020
Commented: Dany on 23 Sep 2020
I am running a problem with constraints of equality, inequality and the limits of the variables. The formulation of the problem is correct, but the solver returns empty, or "no feasible solution found". How do I get linprog to find a solution?. Next I show the matrices and the result.
f = [ 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
A = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 -2 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 -2 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 ];
b = [ 0
0
0
0
0
0
0
0
0.3927
0.3927
0.3927
0.3927
0.3927
0.3927
0.3927
0.3927
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0];
Aeq= [
-1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0.462 0 0.308 0.924 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 -1 -1 -1 0 0 0 0 0 1 0 0 -1.537 0.924 0.462 0.613 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 -1 -1 0 1 0 0 0 0 -0.924 -0.385 0 0.924 0.385 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 1 0 0 0 0 0 0 0 1 0 -0.462 0 0.77 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 1 1 0 0 0 0 0 0 1 -0.613 -0.924 0 2.461 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 -0.385 0 0 0.385 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.6667 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 -5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2.5 0 2.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 -3.2258 0 0 3.2258 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -5 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -2.0833 0 0 2.0833 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 -1 0 0 0 0 -1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 -1 0 -1 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 1 0 0 0 0 1 -1 0 0 0 0 -1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 0 0 0 1 0 -1 0 0 0 -1 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 1 0 0 0 1 0 -1 0 0 0 -1 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 1 0 0 -1 0 0 1 0 0 -1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 1 0 0 0 -1 0 1 0 0 0 -1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 3 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 0 3 0 0 0 1 0 -1 0 0 0 1 0 -1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 3 0 0 1 0 0 -1 0 0 1 0 0 -1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 0 3 0 0 0 1 0 -1 0 0 0 1 0 -1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 3 0 0 1 0 0 -1 0 0 1 0 0 -1 ];
beq = [ 0.8000
2.4000
0.4000
1.6000
2.4000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0];
lb = [ -1 -0.8 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 -10 -10 -10 -10 -10 0 0 0 0 0 0 0 0 0 0 0 0 ];
ub = [1.0, 0.8, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.5, 3.6, 6.0, 2.4, 1.6, 2.4, 10.0, 10.0, 10.0, 10.0, 10.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0];
options=optimoptions('linprog','Display','off');
options.Display='off';
X = linprog(f,A,b,Aeq,beq,lb,ub,options);
X = []

  1 Comment

John D'Errico
John D'Errico on 20 Sep 2020
How do you know a solution exists? Said differently, why do you THINK a solution exists?

Sign in to comment.

Answers (1)

John D'Errico
John D'Errico on 20 Sep 2020
Edited: John D'Errico on 20 Sep 2020
While you claim a solution exists, initially, I sincerely wonder if it truly does. I may learn differently by the time I am done with this response...
>> size(Aeq)
ans =
30 31
>> rank(Aeq)
ans =
24
>> rank([Aeq,beq])
ans =
24
So your euality constraints are not even full rank, although beq does lie within the column space of Aeq.
On top of that, you have 32 inequality constraints, and possibly tight bounds on the problem. That makes me wonder.
Turning off the output from a solver is usually a bad idea. So first, let me run linprog, to see what it does
>> X = linprog(f,A,b,Aeq,beq,lb,ub)
Solver stopped prematurely.
Linprog stopped because it exceeded its allocated memory.
X =
[]
So linprog did not fail because no feasible solution was found, but because it had memory problems. Interesting. Let me try intlinprog, a newer solver.
>> X = intlinprog(f,[],A,b,Aeq,beq,lb,ub)
LP: Optimal objective value is 5.842744.
Optimal solution found.
No integer variables specified. Intlinprog solved the linear problem.
X =
0.12495
0.083301
0.38257
2.2399e-14
0
0.085593
0.13267
0
1.5
0.55719
0
2.4
1.5321
1.9107
-0.04998
-0.04998
-0.04998
-0.076513
-0.04998
0.15303
0.053068
0.053068
0.053068
0
0.053068
0.076513
0.026534
0.026534
0.026534
0
0.026534
So a solution does exist after all. It does seem to satisfy the constraints. linprog has been around a while, but I would almost never turn optimization output off, at least not until I am sure there won't be anything useful I can learn from that display.

  1 Comment

Dany
Dany on 23 Sep 2020
Dear John..!
Your responce was very helpful for me.
Thank you so much.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by