How can I make the negative output values of the linprog optimization to be treated as if they was positive when optimizing a problem?
Show older comments
How can I make the negative output values of the linprog optimization to be treated as if they was positive when optimizing a problem?
My output is as follows (being printed into an external file):
Gen1 P: 0.00 Gen2 P: 200.00 P12: 66.67 P13: -66.67 P32: 133.33
It is a power flow problem, and the output might therefore be negative if power flows in a different direction to my chosen one. What the optimizer clearly does, is treating the negative value as a "gain" and hence it tries to maximize this value (only constrained by the bounds and other constraints I have defined). I need this negative value to be treated as a positive one when optimizing, as negative only indicates direction and not a gain. In other words, I need the negative value to be minimized in the same manner as a positive value. Is there an option to do this directly when launching the optimizer?
1 Comment
Walter Roberson
on 14 Nov 2013
You do not show us your linprog() call. It appears that you are not specifying a lower bound and upper bound ?
Accepted Answer
More Answers (2)
Ben Petschel
on 15 Nov 2013
1 vote
If you need to minimise something like abs(x), just replace x with y-z so your objective becomes to minimise y+z with y>=0 and z>=0. This can all be plugged straight into linprog along with all the other linear constraints.
You could also replace terms f(i)*abs(x(i)) in the objective function with f(i)*w where w(i) is an additional variable introduced into the problem formulation. You then add constraints,
w(i)>=x(i)
w(i)>=-x(i)
Categories
Find more on Linear Programming and Mixed-Integer Linear Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!