删除线性规划问题上的隐式绑定



我正在尝试使用pythons 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。我不知道如何删除此约束。

我将边界设置为 None 的理解是,这意味着除了 Ax≤b 之外,没有对问题施加额外的界限,但显然对问题施加了其他界限。如何删除此绑定?谢谢

你不是第一个对此感到困惑的人 - 文档字符串应该更好地解释这一点。

当您使用 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.])

最新更新