diet.py


# !/usr/bin/env python3.7版权所有2023,Gurobi Opt狗万app足彩imization, LLC #解决经典饮食模型,展示如何向现有模型添加约束#。从gurobipy导入GRB #营养指南,基于#美国农业部美国人膳食指南,2005 # http://www.health.gov/DietaryGuidelines/dga2005/分类,minNutrition, maxNutrition = gp。multidict({'calorie ': [1800,2200], 'protein': [91, GRB.]∞),“脂肪”:[0,65),“钠”:[0,1779]})食物,成本= gp。multidict({'汉堡':2.49,'鸡肉':2.89,'热狗':1.50,'薯条':1.89,'通心粉':2.09,'披萨':1.99,'沙拉':2.49,'牛奶':0.89,'冰淇淋':1.59})#食物营养值营养值={('汉堡','卡路里'):410,('汉堡','蛋白质'):24,('汉堡','钠'):730,('鸡肉','卡路里'):420,('鸡肉','蛋白质'):32,('鸡肉','脂肪'):10,('鸡肉','钠'):1190,('热狗','卡路里'):560,('热狗','蛋白质')::20日(“热狗”,“胖”):32岁(“热狗”,“钠”):1800(“薯条”,“卡路里”):380(“炸薯条”、“蛋白质”):4(“炸薯条”、“脂肪”):19日(“炸薯条”、“钠”):270(“通心粉”、“卡路里”):320(“通心粉”、“蛋白质”):12日(“通心粉”,“胖”):10(“通心粉”、“钠”):930(“披萨”,“卡路里”):320(“披萨”,“蛋白质”):15日(“披萨”,“胖”):12日(“披萨”,“钠”):820(“沙拉”,“卡路里”):320(“沙拉”、“蛋白质”):31日(“沙拉”,“胖”):12日(“沙拉”,“钠”):1230(“牛奶”,“卡路里”):100,('牛奶','蛋白质'):8,('牛奶','脂肪'):2.5,('牛奶','钠'):125,('冰淇淋','卡路里'):330,('冰淇淋','蛋白质'):8,('冰淇淋','脂肪'):10,('冰淇淋','钠'):180}#模型m = gp.Model("diet") #为要购买的食物创建决策变量buy = m.d addvars(食物,name="buy") #你可以使用Python循环构造和m.d addvar()来创建#这些决策变量。下面的语句将等价于# # buy = {} # for f in foods: # buy[f] = m.d addvar (name=f) #目标是最小化成本m.s ettobobjective (buy.prod(cost), GRB.MINIMIZE) #使用循环构造,前面的语句将是:# # m.s ettobobjective (sum(buy[f]*cost[f] for f in foods), GRB.MINIMIZE) #营养约束m.s addconstrs ((gp. f)。quicksum(nutritionValues[f, c] * buy[f] for f in foods) == [minNutrition[c], maxNutrition[c]] for c in categories), "_") #使用循环构造,前面的语句将是:# # for c in categories: # m.addRange(sum(nutritionValues[f, c] * buy[f] for f in foods), # minNutrition[c], maxNutrition[c], c) def printSolution(): if m.status == GRB。OPTIMAL: print('\nCost: %g' % m.b obval) print('\nBuy:') for f in foods: if buy[f]。X> 0.0001: print('%s %g' % (f, buy[f].X)) else: print('No solution') # Solve m.optimize() printSolution() print('\nAdding constraint: at most 6 servings of dairy') m.addConstr(buy.sum(['milk', 'ice cream']) <= 6, "limit_dairy") # Solve m.optimize() printSolution()