Converting a maximizing problem into a minimizing program using linprog
11 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Bruno Luong
2020 年 9 月 5 日
You just need to reverse the sign of f. Don't touch the rest.
6 件のコメント
Bruno Luong
2020 年 9 月 7 日
編集済み: Bruno Luong
2020 年 9 月 7 日
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.
その他の回答 (1 件)
Alan Stevens
2020 年 9 月 5 日
Minimize -x. The maximum of x will then be the negative of this.
2 件のコメント
Alan Stevens
2020 年 9 月 5 日
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.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!