首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在PuLP中使用变量作为除数

如何在PuLP中使用变量作为除数
EN

Stack Overflow用户
提问于 2015-11-26 01:47:23
回答 2查看 3.7K关注 0票数 4

我试图解决一个带有约束的LP问题,该约束是通过变量A除以变量B计算的。

问题的简单版本如下:

  1. 该产品由两种材料(A和B)制成。
  2. A的百分比应大于50%
  3. B的百分比应小于40%
  4. A和B的总数为100

目的: A的最低用量是多少?

守则是这样的:

代码语言:javascript
运行
复制
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日

由于某些原因,上面的示例没有意义(不像预期的那样工作)。我是这个图书馆的新手。也许这根本不适合解决我的问题。因此,如果有人有其他图书馆的建议,我们将不胜感激。

顺便说一下,Koen Peters下面的建议是很棒的。听了他的建议,错误就消失了。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-26 15:59:19

线性规划不理解除法,因此错误是:)您必须重新编制它,这样除法才是线性的。在这种情况下:

代码语言:javascript
运行
复制
prob += x / (x + y) > 0.5  
prob += y / (x + y) < 0.4

相当于:

代码语言:javascript
运行
复制
prob += x > 0.5 * (x + y)
prob += y < 0.4 * (x + y)

它们是线性约束。祝好运!

票数 4
EN

Stack Overflow用户

发布于 2020-04-04 20:39:27

我觉得在我的解决方案中不应该允许零,我还包括了一个变量,它是xy的总和(您认为它是指A)。

代码语言:javascript
运行
复制
from pulp import LpProblem, LpStatus, LpVariable
from pulp import LpMinimize, LpMaximize, lpSum, value

# I feel like zero shouldn't be allowed for lower bound...
x = LpVariable("x", lowBound=1, cat="Integer")
y = LpVariable("y", lowBound=1, cat="Integer")
z = LpVariable("z", lowBound=1, cat="Integer")

model = LpProblem("Divison problem", LpMinimize)

model += x
model += z == x + y
model += z == 100

# Rather than division, we can use multiplication
model += x >= z * 0.5
model += y <= z * 0.4

model.solve()

print(LpStatus[model.status])

print(f"""
x = {int(x.varValue):>3}  #  60
y = {int(y.varValue):>3}  #  40
z = {int(z.varValue):>3}  # 100
""")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33929353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档