首页 > 解决方案 > Pulp Python 中的 For 循环

问题描述

我有一个 Pulp 问题,它运行良好并给了我正确的值,但我想清理代码。这是有问题的部分:

prob += (select_vars['MeatA'] + select_vars['MeatB'] + select_vars['MeatC']) >= 3, ""

我想把它放到一个for循环中,像这样:

meat_count = 0
Meats = ["MeatA", "MeatB", "MeatC"]
for i in Meats:
    if select_vars[i] is not None: meat_count += 1
    prob += meat_count >= 5, "Meat min"

但这将 NoneTypes 放入我的 prob.variables() 中,我不知道为什么。当我在没有 for 循环的情况下以第一种方式运行它时,我的 prob.variables() 中没有 NoneTypes。

# Print out the variables with their optimal value
for v in prob.variables():
    print("some none ", v)
    if v.varValue > 0:
        print(v.name, "=", v.varValue)

标签: pythonpulp

解决方案


首先,我建议您查看 PuLP 文档中的案例研究。在那里,您将看到如何使用循环来制作适应您的数据的通用模型。另外:我不确定您是否在 python 变量和 PuLP 变量之间有所不同,这很重要。

在您的情况下,您可能想要执行以下操作:

import pulp
prob = pulp.LpProblem('example')
Meats = ['MeatA', 'MeatB', 'MeatC']
select_vars = pulp.LpVariable.dicts("selected_vars", Meats)
prob += pulp.lpSum(select_vars.get(m, 0) for m in Meats) >= 3, ""

但我坚持要检查示例以查看每个约束的作用。


推荐阅读