gpt4 book ai didi

python - 线性规划,具有等式约束的意外解

转载 作者:太空宇宙 更新时间:2023-11-04 10:17:41 25 4
gpt4 key购买 nike

我试图弄清楚我的实现有什么问题,我希望结果是 [5, 10],我不明白它是如何得到 [7.5, 7.5]x1应该是x2的一半。

from scipy.optimize import linprog
import numpy as np

c = [-1, -1]

A_eq = np.array([
[1, 0.5],
[1, -0.5],
])

b_eq = [15, 0]

x0_bounds = (0, None)
x1_bounds = (0, None)

res = linprog(
c,
A_eq=A_eq.transpose(),
b_eq=b_eq,
bounds=(x0_bounds, x1_bounds),
options={"disp": True})

print res.x
# =>
# Optimization terminated successfully.
# Current function value: -15.000000
# Iterations: 2
# [ 7.5 7.5]

作者更新:

正如所说,这里不需要矩阵转置。问题出在矩阵本身,为了得到想要的结果,即 [5, 10],它必须是:

A_eq = np.array([
[1, 1],
[1, -0.5],
])

最佳答案

根据 scipy linprog docs :

Minimize: c^T * x

Subject to:

A_ub * x <= b_ub

A_eq * x == b_eq

因此,您现在正在求解以下方程:

Minimize -x1 -x2

受限于,*

x1 + x2 = 15 (i)
0.5 * x1 - 0.5 * x2 = 0 (ii)

现在,(ii) 暗示 x1 = x2(因此您想要的解决方案不可行),然后 (i) 修正 x1 = x2 = 7.5。所以,linprog() 返回的解确实是正确的。由于您期望得到不同的结果,也许您应该研究将问题转化为代码的方式,因为我认为这是您可以找到问题和解决方案的地方。

*) 因为你正在进行转置。

关于python - 线性规划,具有等式约束的意外解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com