Я тестировал эту функцию.
В документации не слишком понятно, как мы должны устанавливать объективные функции. Тем не менее, я сделал следующее:
- Определить переменные, связанные с целевой функции (стоимость и т.д.)
- Тогда я изменил ряд задач
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, Hop).
Параметр 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 и напишите код, а затем обновите свой вопрос. –