【问题标题】:Linear programming with scipy.optimize.linprog使用 scipy.optimize.linprog 进行线性规划
【发布时间】:2015-06-16 00:20:13
【问题描述】:

我刚刚用 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

得到了非常奇怪的结果,我预计 x[1] 会是 1 而 x[2] 会是 5,但是:

>>> 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

谁能解释一下,为什么我会得到这个奇怪的结果?

【问题讨论】:

  • 好吧,一旦你意识到linprog实际上是最小化了,那就不再那么奇怪了:)

标签: python numpy scipy


【解决方案1】:

optimize.linprog 总是最小化你的目标函数。如果你想最大化,你可以使用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'
)

这将为您提供预期的结果,值为-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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2017-04-22
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多