我正在使用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 )
我想要多个目标。首先,我想优化第一个求和,然后第二个。
答案 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.