删除线性规划问题上的隐式边界
removing implicit bound placed on a linear programming problem
我正在尝试使用 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.])
我正在尝试使用 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.])