如何在PuLP中将变量用作除数

时间:2015-11-26 01:47:23

标签: python pulp

我试图通过将变量A除以变量B来计算约束来解决LP问题。

问题的简单版本如下:

  
      
  1. 该产品由两种材料(A和B)

  2. 制成   
  3. A的百分比应大于50%

  4.   
  5. B%应小于40%

  6.   
  7. A和B的总量为100

  8.         

    目标: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的建议如下。在接受他的建议后错误消失了。谢谢。

2 个答案:

答案 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)

我觉得解决方案中不应允许零-并且我包含了一个变量,该变量为xy的总和(认为您将其称为{{1} }。

A