我试图通过将变量A除以变量B来计算约束来解决LP问题。
问题的简单版本如下:
- 制成
该产品由两种材料(A和B)
A的百分比应大于50%
B%应小于40%
- 醇>
A和B的总量为100
目标:A的最低数量是什么?
代码如下:
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)
但是我收到一条错误消息:
TypeError:表达式不能用非常量表达式
来划分
看起来PuLP不支持变量作为除数。 https://github.com/coin-or/pulp/blob/master/src/pulp/pulp.py#L800
有什么想法吗?如果PuLP不适合使用,我很乐意切换到适合的任何库。
2015年11月27日更新
出于某种原因,上面的示例没有意义(没有按预期工作)。我是这个图书馆的新手。也许它根本不是解决我问题的合适人选。因此,如果任何人有其他图书馆的建议,我们将不胜感激。
BTW,Koen Peters的建议如下。在接受他的建议后错误消失了。谢谢。答案 0 :(得分:2)
线性规划不理解分歧,因此错误:) 你必须重新制定它,以便划分线性化。 在这种情况下:
prob += x / (x + y) > 0.5
prob += y / (x + y) < 0.4
相当于:
prob += x > 0.5 * (x + y)
prob += y < 0.4 * (x + y)
哪些是线性约束。 祝你好运!
答案 1 :(得分:0)
我觉得解决方案中不应允许零-并且我包含了一个变量,该变量为x
和y
的总和(认为您将其称为{{1} }。
A