Я использую Gurobi для решения задачи оптимизации. В моей задаче цель - проанализировать максимально возможные решения. Для этой цели я использую параметр:
PoolSearchMode=2
в Gurobi, чтобы найти несколько решений. Но когда я получаю решения, есть те же результаты !. Например, если он возвращает 100 решений, половина из них одинаковы, и на самом деле у меня есть 50 разных решений.
Для более подробной информации я пытаюсь найти некоторые наборы узлов в графе, которые имеют особую особенность. Итак, я установил для параметра PoolSearchMode значение 2, что заставляет MIP выполнять систематический c поиск n лучших решений. Я определил параметр «лучший», чтобы найти решения, у которых «objVal» равно лучшему. Под ударом находится часть моего кода:
m.Params.PoolSearchMode = 2
m.Params.PoolSolutions = 100
b = m.addVars(Edges, vtype=GRB.BINARY, name = "b")
.
.
.
if m.status == GRB.Status.OPTIMAL:
best = 0
for key in range(m.SolCount):
m.setParam(GRB.Param.SolutionNumber, key)
if m.objVal == m.PoolObjVal:
best+=1
optimal_sets = [[] for i in range(best)]
for key in range(best):
m.setParam(GRB.Param.SolutionNumber, key)
for e in (Edges):
if b[e].Xn>0 and b[e].varname[2:]=="{}".format(External_node):
optimal_sets[key].append(int(b[e].varname[0:2]))
return optimal_sets
Я проверил и обнаружил, что если на графике нет 100 решений, он возвращает меньше решений. Но в этих наборах также есть такие же результаты, как:
[1,2,3],
[1,2,3],
[1,3,5]
Как я могу исправить эту проблему, чтобы получить другие решения?