【问题标题】:Python linprog to maximise objective functionPython linprog 最大化目标函数
【发布时间】:2015-10-13 22:37:30
【问题描述】:

我已经有一段时间没有这样做了,所以我有点生疏,但是等式是:

max t(C)*x
s.t. Ax <=b

我有我的 A 约束矩阵,即 (1448x1359):

[[ 1.  1.  0. ...,  0.  0.  0.]

 ..., 


 [ 0.  0.  0. ...,  1.  1.  1.]]

然后我有我的绑定 b (1448x1):

[ 1.  1.  7. ...,  2.  1.  2.]

我要最大化的目标函数是一个向量 (1359,1)。

现在在其他包中,我的最大化目标函数是 841,但是使用 linprog:

res = linprog(c=OBJ_N, A_ub=A, b_ub=b, options={"disp": True})

它成功地优化到了​​ -0.0,所以我想知道我是否在 python 中使用了正确的命令并且我的约束是正确的?

编辑:好吧,这是有道理的,它试图最小化。我现在已经重写了(交换了 c 和 b 并转置了 A 以最小化)。

# (max t(C)*x s.t. Ax <=b) = min t(b)*x s.t. ATy = c, y ≥ 0
# (i): minimise number of shops no bounds
ID = np.ones(len(w[0]))
print(ID)
print(ID.shape)  #1359

At = A.transpose()

need_divest = (A.dot(ID)) - 1
print(need_divest)
print(need_divest.shape)  #1448

res = linprog(c=need_divest, A_eq=At, b_eq=ID, options={"disp": True})
print(res)

但是,我收到“消息:'优化失败。无法找到可行的起点。'”

【问题讨论】:

  • linprog: Minimize a linear objective function subject to linear equality and inequality constraints. - 有帮助吗?
  • 你走错路了...在这里你试图解决你原来的minimization问题的dual问题。您可以考虑下面的答案来正确说明您的原始问题。

标签: python optimization scipy linear-programming


【解决方案1】:

我猜你可能是minimizing 而不是maximizing 你的目标函数。 试试这个(在你的目标函数系数前面插入一个 -):

res = linprog(c=-OBJ_N, A_ub=A, b_ub=b, options={"disp": True})

你的结果应该是 -841。

这很有效,因为:

min(f(x))=-max(-f(x))

【讨论】:

  • 非常感谢!你治愈了我长时间的愚蠢
  • 与愚蠢无关,你只是需要一点点线性规划的更新:)
  • 我认为你不能使用linprog 做到这一点。当您需要整数变量时,问题会更加困难,因此ILPproblems 有不同的解析算法。如果您想了解更多关于在哪里查看的信息,请查看此内容:stackoverflow.com/questions/26305704/…
  • 有趣的是,当我施加 x 介于 0 和 1 之间的约束时(res = linprog(c=-ID, A_ub=A, b_ub=need_sell, bounds=(0,1), options={ "disp": True})) 我能够使用 R 包匹配我的答案。所以我想知道它是否是强制整数的情况?不过,我想这可能是巧合。谢谢你的链接!
  • 不,只是巧合(你很幸运!)我猜。根据您的问题的结构,它可能会发生。但是他们在文档中说,目前只实现了simplex 算法,它无法解决 ILP(否则我们会变得富有,因为我们会证明一个著名的数学猜想 P=NP !)。
猜你喜欢
  • 1970-01-01
  • 2018-02-03
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多