Python 如何在Gurobi中编写多目标函数?
我正在使用Gurobi 7.0的多目标功能,我有两个目标功能:Python 如何在Gurobi中编写多目标函数?,python,model,gurobi,Python,Model,Gurobi,我正在使用Gurobi 7.0的多目标功能,我有两个目标功能: 首先最小化决策变量与系数矩阵-1的乘积之和 第二,最小化决策变量与系数矩阵-2的乘积之和 我使用分层或词典方法,在这种方法中,我为每个目标设置优先级,并按优先级顺序进行优化。 我不能在这里使用model.setObjective()函数,因为我将无法指定目标函数编号,并且模型将被混淆。如何编写这两个目标函数?我一直在测试此功能 文件中没有太清楚地说明我们必须如何设置目标函数。然而,我做了以下工作: 定义与目标函数(成本等)相关的变
我不能在这里使用
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
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 ()
“古洛比”优化器(商业产品)链接:www.Gurobi.com。如果您在这里没有得到答案,请尝试他们的支持小组:@TerryJanReedy好的,谢谢!阅读以下内容:,并编写一些代码,然后更新您的问题。感谢您的帮助,但我有两个目标函数,如'obj1=quicksum(Matrix2[j][k]*variable1[j,k]表示范围内的k(0,m)表示范围内的j(0,n))''obj2=quicksum(Matrix2[j][k]*variable1[j,k]表示范围内的k(0,m)表示范围内的j(0,n))“我如何在您指定的代码中编写它?@JG25您能分享目标的数学公式吗?@JG25我更改了答案,解释了如何根据成本定义目标函数。