快捷搜索: 王者荣耀 脱发

Gurobi求解目标函数最优值

"""
求解目标函数最大值
x+y+2*z
约束条件
x+2*y+3*z<=4
x+y>=1

"""

from gurobipy import *
try:
    m = Model("mip1")
    x = m.addVar(vtype=GRB.BINARY,name="x")
    y = m.addVar(vtype=GRB.BINARY,name="y")
    z = m.addVar(vtype=GRB.BINARY,name="z")
    
    m.setObjective(x+y+2*z,GRB.MAXIMIZE)
    
    m.addConstr(x+2*y+3*z<=4,"c0")
    m.addConstr(x+y>=1,"c1")
    m.optimize()
    #打印变量名称和变量值
    for v in m.getVars():
        print(v.varName,v.x)
    print( m.objVal)
#捕捉程序运行中的错误
except GurobiError as e:
    print("Erroe code" + str(e.errno) + ":" + str(e))
    
except AttributeError:
    print("Encountered an attribute erroe")
from gurobipy import *

#所需营养
categories,minNutrition,maxNutrition = multidict({
    "calories":[1800,2200],
    "protein":[91,GRB.INFINITY],
    "fat":[0,65],
    "sodium":[0,1779]
    })
#食物已经对应的cost
foods,cost = multidict({
    "hamburger":2.49,
    "chicken":2.89,
    "hot dog":1.50,
    "fries":1.89,
    "macaroni":2.09,
    "pizza":1.99,
    "salad":2.49,
    "milk":0.89,
    "ice cream":1.59
    })

#每种食物所对应的营养价值
nutritionValues = {
    ("hamburger","calories"):410,
    ("hamburger","protein"):24,
    ("hamburger","fat"):26,
    ("hamburger","sodium"):420,
    ("chicken","calories"):420,
    ("chicken","protein"):32,
    ("chicken","fat"):10,
    ("chicken","sodium"):1190,
    ("hot dog","calories"):380,
    ("hot dog","protein"):4,
    ("hot dog","fat"):19,
    ("hot dog","sodium"):1800,
    ("fries", "calories"):380,
    ("fries", "protein"):4,
    ("fries", "fat"):19,
    ("fries", "sodium"):270,
    ("macaroni", "calories"):320,
    ("macaroni", "protein"):12,
    ("macaroni", "fat"):10,
    ("macaroni", "sodium"):930,
    ("pizza", "calories"):320,
    ("pizza", "protein"):15,
    ("pizza", "fat"):12,
    ("pizza", "sodium"):820,
    ("salad", "calories"):320,
    ("salad", "protein"):31,
    ("salad", "fat"):12,
    ("salad", "sodium"):1230,
    ("milk", "calories"):100,
    ("milk", "protein"):8,
    ("milk", "fat"):2.5,
    ("milk", "sodium"):125,
    ("ice cream", "calories"):330,
    ("ice cream", "protein"):8,
    ("ice cream", "fat"):10,
    ("ice cream", "sodium"):180,
    }

#创建模型
m = Model("diet")

#添加变量
buy = m.addVars(foods,name="buy")

#构建目标函数
m.setObjective(buy.prod(cost),GRB.MINIMIZE)

#添加约束条件

m.addConstrs(
    (quicksum(nutritionValues[f,c]*buy[f] for f in foods)
    ==[minNutrition[c],maxNutrition[c]]
    for c in categories),"_"
    )


def printSolution():
    if m.status == GRB.Status.OPTIMAL:
        print("
Cost: %g" % m.objVal)
        print("
Buy:")
        buyx = m.getAttr("x",buy)
        for f in foods:
            if buy[f].x > 0.0001:
                print("%s %g" % (f, buyx[f]))
            else:
                print("No solution")
m.optimize()
printSolution()
经验分享 程序员 微信小程序 职场和发展