Converting a maximizing problem into a minimizing program using linprog
10 views (last 30 days)
Show older comments
Hi guys,
i have a question about the function linprog.
I want to use this function, and according to the matlab database the function linprog can be applied so that it solves for:

In my case i want to maximize the vector x. Can Anyone help me and tell me how to convert it? What effects will it have on the A matrix and the upper / lower bounds?
Thanks a lot!
Kev
0 Comments
Accepted Answer
Bruno Luong
on 5 Sep 2020
You just need to reverse the sign of f. Don't touch the rest.
6 Comments
Bruno Luong
on 7 Sep 2020
Edited: Bruno Luong
on 7 Sep 2020
For a canonic form of LP
x = argmax f'*x
such that A*x <= b, x >= 0
(Method 3) It is also possible to solve the DUAL problem (2)
y = argmin b'*x
such that (-A'*y) <= -f, y >= 0
and finally x is retrieved as
x = Lagrange multiplier of (2)
- f => b
- A = -A'
- b => -f
- x => Lagrange multiplier of (2)
Example:
f = [6; 14; 13];
A = [0.5 2 1;
1 2 4];
b = [24; 60];
% Primal argmax, method 1
x = linprog(-f, A, b, [], [], zeros(size(f)), [])
% Primal argmax, method 2
x = linprog(f, -A, b, [], [], [], zeros(size(f)));
x = -x
% Dual formulation, method 3
[y, ~, ~, ~, lambda] = linprog(b, -A', -f, [], [], zeros(size(b)), []);
x = lambda.ineqlin
It is also possible formulate the dual for general case, but it gets a bit messy.
More Answers (1)
Alan Stevens
on 5 Sep 2020
Minimize -x. The maximum of x will then be the negative of this.
2 Comments
Alan Stevens
on 5 Sep 2020
Unfortunately, I don't have linprog available to check, but have a look at https://uk.mathworks.com/help/optim/examples/maximize-long-term-investments-using-linear-programming.html where there is a maximizing problem that uses linprog.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!