【发布时间】:2020-07-06 13:34:09
【问题描述】:
我正在尝试在 python 中使用 Pulp 使用线性编程来解决这个问题。
我们有芒果包,每个包都有不同数量的芒果。 我们应该能够使用最少数量的数据包来满足需求,如果可能的话,可以服务于整个袋子。
# Packet Names and the count of mangoes in each packet.
mangoe_packs = {
"pack_1": 2,
"pack_2": 3,
"pack_3": 3,
"pack_4": 2
}
例如,
根据需求,我们应该得到正确的数据包。即,如果需求是 2,我们给包 2 个芒果。如果需求量为 5,我们将提供 2 和 3 个芒果包。如果您的需求是 2,而我们没有任何包含 2 个芒果的包,我们可以提供包含 3 个芒果的包。在这种情况下,我们将有一个剩余的芒果。我们的目的是在满足需求的同时尽量减少剩余芒果的数量。
# Packet Names and the count of mangoes in each packet.
mangoe_packs = {
"pack_1": 2,
"pack_2": 3,
"pack_3": 3,
"pack_4": 2
}
根据上面提供的数据,
如果需求是2,解决方案是pack_2(也可以是pack_4)。
如果需求是4,解决方案是pack_2 + pack_4。
如果需求是5,解决方案是pack_1 + pack_2
我是线性规划的新手,遇到了问题。尝试了几个解决方案,但它们都不起作用。
我无法提出正确的目标函数和约束来解决这个问题。需要帮助。谢谢。
这是我试过的代码。
from pulp import *
prob = LpProblem("MangoPacks", LpMinimize)
# Number of Mangoes in each packet.
mangoe_packs = {
"pack_1": 2,
"pack_2": 3,
"pack_3": 3,
"pack_4": 2
}
# Define demand variable.
demand = LpVariable("Demand", lowBound=2, HighBound=2, cat="Integer")
pack_count = LpVariable.dicts("Packet Count",
((i, j) for i in mangoe_packs.values() for j in ingredients),
lowBound=0,
cat='Integer')
pulp += (
lpSum([
pack_count[(pack)]
for pack, mango_count in mangoe_packs.iteritems()])
)
pulp += lpSum([j], for pack, j in mangoe_packs.iteritems()]) == 350 * 0.05
status = prob.solve()
谢谢。
【问题讨论】:
-
请发布您当前的代码
-
您能否添加更多关于您正在尝试做的事情的细节?如果你有你到目前为止所拥有的,那么我们可以更好地帮助你
-
真正的问题是什么?
-
什么是成分?
-
感谢您的回复。虽然您的问题在我看来仍然不完全符合规范,但自从您第一次提出问题以来,它已经变得更好了。按照你的速度,我很快就会很乐意取消我的赞成票和反对票。我意识到这对你来说是一个令人沮丧的过程,但我赞扬你是少数真正建设性地回应批评并改进而不是等待“teh codez”的用户之一。
标签: python linear-programming pulp minimization