Gurobi 使用 addVar 中的 obj 参数
Gurobi using the obj parameter from addVar
我是 gurobi 的新手,我不明白为什么以下两个代码片段没有 return 相同的最小化 objective 功能。我试图从 addVar 函数而不是 setObjective 函数设置 objective 函数系数。
代码片段 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, lb=0, ub=1200000, name="variable_2")
p = m.addVar(vtype=GRB.CONTINUOUS, lb=0, 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, lb=0, obj=0.5, ub=1500000, name="variable_1")
c = m.addVar(vtype=GRB.CONTINUOUS, lb=0, obj=0.6, ub=1200000, name="variable_2")
p = m.addVar(vtype=GRB.CONTINUOUS, lb=0, obj=0.7, ub=2000000, name="variable_3")
# add objective function
m.setObjective(b + c + 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()
当您想使用线性表达式(LinExpr 对象)指定 objective 时,对代码片段 1 等代码使用 Model.setObjective()。对于片段 2,您在调用 Model.addVar() 时已经指定了 objective 系数;相反,调用 m.ModelSense = GRB.MINIMIZE 告诉 Gurobi 你想最小化 objective 函数。
我是 gurobi 的新手,我不明白为什么以下两个代码片段没有 return 相同的最小化 objective 功能。我试图从 addVar 函数而不是 setObjective 函数设置 objective 函数系数。
代码片段 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, lb=0, ub=1200000, name="variable_2")
p = m.addVar(vtype=GRB.CONTINUOUS, lb=0, 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, lb=0, obj=0.5, ub=1500000, name="variable_1")
c = m.addVar(vtype=GRB.CONTINUOUS, lb=0, obj=0.6, ub=1200000, name="variable_2")
p = m.addVar(vtype=GRB.CONTINUOUS, lb=0, obj=0.7, ub=2000000, name="variable_3")
# add objective function
m.setObjective(b + c + 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()
当您想使用线性表达式(LinExpr 对象)指定 objective 时,对代码片段 1 等代码使用 Model.setObjective()。对于片段 2,您在调用 Model.addVar() 时已经指定了 objective 系数;相反,调用 m.ModelSense = GRB.MINIMIZE 告诉 Gurobi 你想最小化 objective 函数。