对纸浆中字典的一个值应用约束

问题描述 投票:0回答:1

我需要对我的一个字典的值部分应用约束,我使用Pulp进行优化问题。我有食物数据,包括食物信息以及营养信息和每服务费用。

我的代码工作正常,为我提供每种食物的份量和最小化的成本。我需要对每个食品数量应用过滤器,其中n是特定食品的消费数量。

Data reference

from pulp import *
import pandas as pd
prob = LpProblem("Simple Diet Problem", LpMinimize)
df = pd.read_excel("diet - medium.xls", nrows=17)
food_items = list(df['Foods'])
costs = dict(zip(food_items, df['Price/Serving']))
calories = dict(zip(food_items, df['Calories']))
fat = dict(zip(food_items, df['Total_Fat (g)']))
carbs = dict(zip(food_items, df['Carbohydrates (g)']))
food_vars = LpVariable.dicts("Food", food_items, lowBound=0, cat='Continuous')

prob += lpSum([costs[i] * food_vars[i] for i in food_items])
prob += lpSum([calories[f] * food_vars[f] for f in food_items]) >= 800.0
prob += lpSum([calories[f] * food_vars[f] for f in food_items]) <= 1300.0

# Need to apply constraint for number of each items to be consumed

prob.solve()
print("Status:", LpStatus[prob.status])
for v in prob.variables():
    if v.varValue > 0:
        print(v.name, "=", v.varValue)
obj = value(prob.objective)
print("The total cost of this balanced diet is: ${}".format(round(obj, 2)))
python machine-learning data-science mathematical-optimization pulp
1个回答
0
投票

如果我理解正确,你会问如何在循环中添加约束,而不是逐个。如果是这样,一般方法是这样的:

for f in food_items:
    prob += food_vars[f] <= max_qty[f]

其中max_qty[f]是食物f的最大允许数量,从您的csv文件中读取。

© www.soinside.com 2019 - 2024. All rights reserved.