scipy.optimize.linprog - 难以理解参数

时间:2018-03-21 13:54:19

标签: python numpy scipy linear-programming

我想最小化以下LPP: C = 60X + 40Y + 50Z 受制于 20x + 10y + 10z> = 350, 10x + 10y + 20z> = 400,x,y,z> = 0

我的代码片段如下(我第一次使用scipy包)

from scipy.optimize import linprog
c = [60, 40, 50]
A = [[20,10], [10,10],[10,20]]
b = [350,400]
res = linprog(c, A, b)
print(res)

输出为:https://golang.org/pkg/net/http/#Request.ParseMultipartForm

1.有人可以详细解释linprog函数的参数,特别是如何计算界限?

2.我写了参数吗?

我对LPP基础知识很天真,我认为我理解错误的参数。

2 个答案:

答案 0 :(得分:2)

linprog期望A每个不等式有一行,每个变量有一列,而不是相反。试试这个:

from scipy.optimize import linprog
c = [60, 40, 50]
A = [[20, 10, 10], [10, 10, 20]]
b = [350, 400]
res = linprog(c, A, b)
print(res)

输出:

     fun: -0.0
 message: 'Optimization terminated successfully.'
     nit: 0
   slack: array([ 350.,  400.])
  status: 0
 success: True
       x: array([ 0.,  0.,  0.])

答案 1 :(得分:1)

该消息告诉您,您的A_ub矩阵的维度不正确。它目前是一个3x2矩阵,不能左右乘以3x1优化变量x。你需要写:

A = [[20,10, 10], [10,10,20]]

这是一个2x3矩阵,可以保持乘法x