I've just check the simple linear programming problem with scipy.optimize.linprog:
1*x[1] + 2x[2] -> max
1*x[1] + 0*x[2] <= 5
0*x[1] + 1*x[2] <= 5
1*x[1] + 0*x[2] >= 1
0*x[1] + 1*x[2] >= 1
1*x[1] + 1*x[2] <= 6
And got the very strange result, I expected that x[1] will be 1 and x[2] will be 5, but:
>>> print optimize.linprog([1, 2], A_ub=[[1, 1]], b_ub=[6], bounds=(1, 5), method='simplex')
status: 0
slack: array([ 4., 4., 4., 0., 0.])
success: True
fun: 3.0
x: array([ 1., 1.])
message: 'Optimization terminated successfully.'
nit: 2
Can anyone explain, why I got this strange result?
In Mathematics, linear programming is a method of optimising operations with some constraints. The main objective of linear programming is to maximize or minimize the numerical value. It consists of linear functions which are subjected to the constraints in the form of linear equations or in the form of inequalities.
Linear programming (LP), also called linear optimization, is a method to achieve the best outcome (such as maximum profit or lowest cost) in a mathematical model whose requirements are represented by linear relationships.
Linear programming deals with a class of optimization problems, where both the objective function to be optimized and all the constraints, are linear in terms of the decision variables.
x = linprog( f , A , b , Aeq , beq , lb , ub ) defines a set of lower and upper bounds on the design variables, x , so that the solution is always in the range lb ≤ x ≤ ub .
optimize.linprog
always minimizes your target function. If you want to maximize instead, you can use that max(f(x)) == -min(-f(x))
from scipy import optimize
optimize.linprog(
c = [-1, -2],
A_ub=[[1, 1]],
b_ub=[6],
bounds=(1, 5),
method='simplex'
)
This will give you your expected result, with the value -f(x) = -11.0
slack: array([ 0., 4., 0., 4., 0.])
message: 'Optimization terminated successfully.'
nit: 3
x: array([ 1., 5.])
status: 0
success: True
fun: -11.0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With