我试图通过将变量 A 除以变量 B 来计算约束来解决 LP 问题。
问题的简单版本如下:

代码是这样的:

from pulp import *

prob = LpProblem('Simple problem', LpMinimize)
x = LpVariable('x', 0, None, 'Integer')
y = LpVariable('y', 0, None, 'Integer')
prob += x
prob += x / (x + y) > 0.5  # <== Where the error happens
prob += y / (x + y) < 0.4
prob += x + y == 100
prob.solve()

print 'Result: %s' % LpStatus[prob.status]
print 'Amount of A: %s' % value(prob.objective)
但是我收到一条错误消息说:

看起来 PuLP 不支持变量作为除数。
https://github.com/coin-or/pulp/blob/master/src/pulp/pulp.py#L800
任何想法?如果 PuLP 不是适合使用的库,我很乐意切换到任何适合的库。
更新 2015 年 11 月 27 日
出于某种原因,上面的示例没有意义(未按预期工作)。我是这个图书馆的新手。也许它根本就不是解决我问题的正确方法。因此,如果有人对其他图书馆有建议,我们将不胜感激。
顺便说一句,下面 Koen Peters 的建议很棒。采纳他的建议后,错误就消失了。谢谢你。

最佳答案

线性规划不理解除法,因此错误:)
您必须重新制定它,以便线性制定除法。
在这种情况下:

prob += x / (x + y) > 0.5
prob += y / (x + y) < 0.4

相当于:
prob += x > 0.5 * (x + y)
prob += y < 0.4 * (x + y)

哪些是线性约束。
祝你好运!

关于python - 如何在 PuLP 中使用变量作为除数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33929353/

10-15 10:21