如何在Gurobi Python中编写多目标函数

时间:2019-05-13 21:33:18

标签: python optimization gurobi

我正在使用Gurobi和Python处理多目标优化问题。

这是我的代码的一部分,该代码显示了如何定义目标函数:

model.setObjective( quicksum(w[k]*R[k]*3 for k in stations)
                   +quicksum(cost[l]*z[l,k] for l in L for k in stations),
                   GRB.MINIMIZE )

我想要多个目标。首先,我想优化第一个求和,然后第二个。

1 个答案:

答案 0 :(得分:0)

您可以以分层方式定义多个目标。这是您的操作方式:

getBoosterConfig = false

此代码定义了两个层次结构目标。第一个参数是表达式(即原始代码中的求和),第二个参数是目标的索引,第三个参数定义优先级。 (更高的优先级意味着将首先解决该目标。)有关setObjectiveN的更多信息,请参见here

默认情况下,古罗比(Gurobi)将最小化,但您也可以将其明确化:

model.setObjectiveN(quicksum(w[k]*R[k]*3 for k in stations), 0, 1)
model.setOjbectiveN(quicksum(cost[l]*z[l,k] for l in L for k in stations), 1, 0)

调用优化时,Gurobi将使用第一个目标求解模型,然后添加一个约束以确保该约束的目标值不会降低,然后为第二个目标求解模型。

您还可以通过定义(绝对和/或相对)公差来允许一定程度的退化。 Here is more information about working with multiple objectives in Gurobi.