我读到 scipy 中的 linprog 返回最小解决方案,并且可以通过将目标函数乘以 -1 来获得最佳解决方案。
我在这里读到它: https: //realpython.com/linear-programming-python/
我已经测试了他们提供的示例,看看我是否也能得到最小的解决方案——我可以。
关于我试图解决的问题,我希望解决方案是:
opt_sol1.x = [0.61538462 0.38461538]
opt_sol2.x = [0.0, 1.0]
Run Code Online (Sandbox Code Playgroud)
但在两种情况下我都得到相同的结果 [0.61538462 0.38461538] 为什么?-- 我的猜测是它与我的目标函数中的值相互接近有关,但只是猜测有没有一种方法可以得到我正在寻找的第二个解决方案?
from scipy.optimize import linprog
obj_fct1 = [0.5, 0.5]
obj_fct2 = [-0.5, -0.5]
lhs_ineq = [[1.5, 0.2]]
rhs_ineq = [1]
lhs_eq = [[1,1]]
rhs_eq = [1]
bnds = [(0, 1),
(0, 1)]
opt_sol1 = linprog(c=obj_fct1,
A_ub=lhs_ineq,
b_ub=rhs_ineq,
A_eq=lhs_eq,
b_eq=rhs_eq,
bounds=bnds)
print(opt_sol1.x)
print("------------------------------------------")
opt_sol2 = linprog(c=obj_fct2,
A_ub=lhs_ineq,
b_ub=rhs_ineq,
A_eq=lhs_eq,
b_eq=rhs_eq,
bounds=bnds)
print(opt_sol2.x)
>>> [0.61538462 0.38461538]
>>> ------------------------------------------ …Run Code Online (Sandbox Code Playgroud)