消除放置在线性规划问题上的隐式边界

时间:2019-04-12 03:26:17

标签: scipy linear-programming

我正在尝试使用python scipy库中的线性编程函数,但是我无法删除放置在变量上的非负约束。为了证明这一点,请考虑以下代码。

from scipy.optimize import linprog

c = [-1]
A = [[1]]
b = [-3]
print(linprog(c, A_ub=A, b_ub=b, bounds=None))

它提供以下输出:

     fun: 3.0
 message: 'Optimization failed. Unable to find a feasible starting point.'
     nit: 0
  status: 2
 success: False
       x: nan

这应该是以下问题的表述:最小化c * x使得Ax≤b或等效地最小化-1 * x st。 1x≤-3。希望我做得正确。根据当前输出,我怀疑存在x≥0的附加约束。我不知道如何删除此约束。

我已将边界设置为“无”,原因是这意味着除了Ax≤b之外,没有在问题上设置其他边界,但是显然在该问题上还有其他界限。如何删除此绑定?谢谢

1 个答案:

答案 0 :(得分:1)

您不是第一个对此感到困惑的人-文档字符串应该对此进行更好的解释。

使用bounds=None时,是在告诉linprog使用默认行为,即假定非负约束。只有通过将bounds设置为其他值,默认行为才能更改。在这种情况下,bounds=(None, None)将删除每个变量的界限。

In [40]: from scipy.optimize import linprog                                                                                                                                              

In [41]: c = [-1]                                                                                                                                                                        

In [42]: A = [[1]]                                                                                                                                                                       

In [43]: b = [-3]                                                                                                                                                                        

In [44]: print(linprog(c, A_ub=A, b_ub=b, bounds=(None, None)))                                                                                                                          
     con: array([], dtype=float64)
     fun: 3.0
 message: 'The solution was determined in presolve as there are no non-trivial constraints.'
     nit: 0
   slack: array([0.])
  status: 0
 success: True
       x: array([-3.])