diet.py


diet.py


# !/usr/bin/env python3.7 #版权所有2021,Gurobi优化狗万app足彩,LLC #解决经典的饮食模型,展示如何添加约束#到现有的模型。从gurobipy进口GRB #营养指南,基于#美国农业部美国膳食指南,2005 # http://www.health.gov/DietaryGuidelines/dga2005/类别,minNutrition, maxNutrition = gp。multidict({'卡路里':[1800,2200],'蛋白质':[91,GRB。∞),“脂肪”:[0,65),“钠”:[0,1779]})食物,成本= gp。multidict({'汉堡','鸡肉','热狗','薯条','通心粉','披萨','沙拉','牛奶','冰淇淋')#营养价值={('汉堡','卡路里'):410,('汉堡','蛋白质'):24,('汉堡','脂肪'):26,('汉堡','钠'):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} # Model m = gp.Model("diet") # Create decisions variables for the foods to buy buy = m.d addvars (foods, name="buy") #你可以使用Python的循环结构和m.d addvar()来创建#这些决策变量。# buy[f] = m.addVar(name=f) #目的是最小化成本m.setobobjective (buy.prod(cost), GRB.MINIMIZE) #使用循环结构,前面的语句将是: # # m.setObjective(sum(buy[f]*cost[f] for f in foods), GRB.MINIMIZE) # Nutrition constraints m.addConstrs((gp.quicksum(nutritionValues[f, c] * buy[f] for f in foods) == [minNutrition[c], maxNutrition[c]] for c in categories), "_") # Using looping constructs, the preceding statement would be: # # 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.ObjVal) 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()