微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gurobi 使用 addVar 中的 obj 参数

如何解决Gurobi 使用 addVar 中的 obj 参数

我是 gurobi 的新手,我不明白为什么以下两个代码片段没有返回相同的最小化目标函数。我试图从 addVar 函数而不是 setobjective 函数设置目标函数系数。

代码片段 1:

import gurobipy as gb
from gurobipy import GRB

# create model
m = gb.Model()

# add variables
b = m.addVar(vtype=GRB.CONTINUOUS,lb=0,ub=1500000,name="variable_1")
c = m.addVar(vtype=GRB.CONTINUOUS,ub=1200000,name="variable_2")
p = m.addVar(vtype=GRB.CONTINUOUS,ub=2000000,name="variable_3")


# add objective function
m.setobjective(.5 * b + .6 * c + .7 * p,GRB.MINIMIZE)


# add constraints
m.addConstr(b + c + p == 4000000,"constraint_one")
m.addConstr(-3 * b - 18 * c + 7 * p >= 0,"constraint_two")
m.addConstr(-b + 4 * c + 2 * p >= 0,"constraint_three")

m.optimize()

代码片段 2:

import gurobipy as gb
from gurobipy import GRB

# create model
m = gb.Model()

# add variables
b = m.addVar(vtype=GRB.CONTINUOUS,obj=0.5,obj=0.6,obj=0.7,name="variable_3")


# add objective function
m.setobjective(b + c + p,"constraint_three")

m.optimize()

解决方法

当您想使用线性表达式(LinExpr 对象)指定目标时,将 Model.setObjective() 用于类似片段 1 的代码。对于片段 2,您在调用 Model.addVar() 时已经指定了目标系数;相反,调用 m.ModelSense = GRB.MINIMIZE 告诉 Gurobi 您想要最小化目标函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。