optimization - 在 PuLP 的计划优化中添加 7 天约束
问题描述
我想制定一个 7 天最低糖摄入量的最佳膳食计划,但日常饮食计划应包括 3 种不同类别的食物。如何添加可以从 3 种不同食物类别中获取食物并提供 7 天膳食计划的约束?
我的数据框如下:
id name energy sugar Food_Groups
1 4-Grain Flakes 140 58.8 Breakfast
2 Beef Mince, Fried 1443 8.0 Meat
3 Pork 1000 3.0 Meat
4 cake 1200 150 Sweet
5 cheese 1100 140 Sweet
6 Juice 700 85 Drink
7 cabbage 60 13 vegetarian
8 cucumber 10 10 vegetarian
9 eggs 45 30 Breakfast
我创建了一个概率变量,制定了目标函数,创建了字典变量,添加了约束,解决如下
# Create the 'prob' variable to contain the problem data
prob = LpProblem("Simple Diet Problem",LpMinimize)
#create data variables and dictionary
food_items = list(df['name'])
calories = dict(zip(food_items,df['energy']))
sugars = dict(zip(food_items,df['sugar']))
food_vars =LpVariable.dicts("Food",food_items,lowBound=0,cat='Integer')
#Building the LP problem by adding the main objective function.
prob += lpSum([sugars[i]*food_vars[i] for i in food_items])
#adding calorie constraint
prob += lpSum([calories[f] * food_vars[f] for f in food_items]) >=
1800.0, "CalorieMinimum"
prob += lpSum([calories[f] * food_vars[f] for f in food_items]) <=
2200.0, "CalorieMaximum"
prob.writeLP("SimpleDietProblem.lp")
prob.solve()
print("Status:", LpStatus[prob.status])
我想知道如何制作7天的菜单?我尝试了以下代码,但它重复相同的食物
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for i in days:
print(days)
prob.writeLP("SimpleDietProblem.lp")
prob.solve(PULP_CBC_CMD())
print("Status:", LpStatus[prob.status])
print("Therefore, the optimal balanced diet consists of\n"+"-")
for v in prob.variables():
if v.varValue:
print(v.name , "=", v.varValue)
print("The total sugar of this balanced diet is: {}".format(round(value(prob.objective),2)))
解决方案
推荐阅读
- flutter - 带附件的颤振表单(文件上传)
- r - 删除完全不适用的行
- javascript - 动态添加来自不同 json 响应的值 - JS
- android - 在单元测试期间调用初始化 JSModule
- kubernetes - Kubernetes:使用容器作为代理
- python - Python:有没有办法使用字段名称访问 HL7 消息
- javascript - DFP 广告未在某些网页上展示。谷歌控制台刚刚加载
- git - 在功能分支合并之前回滚 git 主分支,做一些工作并再次合并功能分支
- reactjs - React 无法识别 DOM 元素上的 computedMatch 属性
- javascript - 将运行简单 js 脚本的组件添加到 create-react-app 应用程序