我正在与Gurobi 7.0的多目标功能工作,我有两个目标函数:如何在Gurobi中编写多目标函数?
- 首先判定变量的乘积的总和最小化与系数矩阵-1
- 第二最小化产品的总和决策变量与系数矩阵-2
我正在使用分层或词典方法,其中我为每个目标设置优先级,并按优先级顺序进行优化。 我不能在这里使用model.setObjective()
函数,因为我将无法指定目标函数编号,模型会变得混乱。我怎样才能写出两个目标函数?
我正在与Gurobi 7.0的多目标功能工作,我有两个目标函数:如何在Gurobi中编写多目标函数?
我正在使用分层或词典方法,其中我为每个目标设置优先级,并按优先级顺序进行优化。 我不能在这里使用model.setObjective()
函数,因为我将无法指定目标函数编号,模型会变得混乱。我怎样才能写出两个目标函数?
我一直在测试这个功能。
关于我们必须设定目标函数的方式,文档并不太清楚。但是,我做了以下:
m.NumObj = 3
设置参数为每个目标的数量。
m.setParam(GRB.Param.ObjNumber, 0)
m.ObjNPriority = 5
m.ObjNName = 'Z'
m.ObjNRelTol = x/10.0
m.ObjNAbsTol = 0
Z.objN = 1.0
m.setParam(GRB.Param.ObjNumber, 1)
m.ObjNPriority = 4
m.ObjNName = 'Custo'
m.ObjNRelTol = x/10.0
m.ObjNAbsTol = 0
m.ObjNWeight = -1.0
Custo.ObjN = 1.0
m.setParam(GRB.Param.ObjNumber, 2)
m.ObjNPriority = 10
m.ObjNName = 'Hop'
m.ObjNRelTol = x/10.0
m.ObjNWeight = -1.0
Hop.ObjN = 1.0
在我而言,有三个目标函数(Z,CUSTO,合)。
参数GRB.Param.ObjNumber
用于更改您正在处理的目标函数。
我总结的另一件事是,根据我们定义与其相关的变量的顺序(根据我的知识)定义目标的数量。
详细了解目标函数
Custo = m.addVar(vtype=GRB.INTEGER, name="Custo", obj=1)
m.update()
expr = []
for k in xrange (1, KSIZE):
expr.append (quicksum (var_y[ (l[0],l[1],k) ] * links[l][0] for l in links.keys()))
expr.append (quicksum (var_y[ (l[1],l[0],k) ] * links[l][0] for l in links.keys()))
m.addConstr (quicksum (expr) == Custo, name= ' custo')
m.update()
链接 'Gurobi' 优化器(商业产品)的定义:www.gurobi.com。如果您在这里没有得到答案,请尝试他们的支持小组:https://groups.google.com/forum/#!forum/gurobi –
@TerryJanReedy好的,谢谢! – ash25
阅读此:https://www.gurobi.com/documentation/7.0/refman/multiple_objectives.html,并编写一些代码,然后更新您的问题。 –