题目
人体需要四种营养:category: calories、protein、fat、sodium。食物来源:foods=hamburger, chicken, hot dog, fries, macaroni, pizza, salad, milk, ice cream
营养吸收每天都有上限和下限;单位重量食物价格不同;单位重量食物所含营养成分不同,求达到足够营养花费的代价最小。
思路:
这个是典型的最优化,主要难点在于建模,怎么把需求转化为表达式,然后让gurobi求解。
本质就是, 用最小的成本来满足人体每日的营养需求。
核心逻辑就是以下几行:
第一行: 添加变量, 使用addVars, 相当于为foods里的每一种食物创建一个变量。
第二行:设定目标, 每一种food需求量 和其成本 cost相乘,就是此种food的成本, 把这些food全部加起来就是总成本, 求其最小值。
第三行:每种营养都有最大值和最小值, 所以,约束条件1就是 把所有食物中此中营养加起来大于等于最小值。 某种营养的总和 = sum(每个食物购买量buy[f] 乘以 该种食物营养含量 nutritionValues[f, c] )。
第四行:与第三行一样的道理。
buy = m.addVars(foods, name= "buy_food")
m.setObjective(quicksum([buy[f] * cost[f] for f in foods] ), GRB.MINIMIZE)
m.addConstrs( quicksum([nutritio