Почему я получаю одинаковые ответы в гуроби, когда нахожу несколько решений? - PullRequest
0 голосов
/ 30 мая 2020

Я использую 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] 

Как я могу исправить эту проблему, чтобы получить другие решения?

1 Ответ

1 голос
/ 30 мая 2020

Кажется, что Gurobi возвращает несколько решений в MIP, которые могут быть сопоставлены с одним и тем же решением вашей основной проблемы. Я уверен, что если бы вы проверили весь вектор решений, все эти решения действительно были бы другими. Вы смотрите только на подмножество переменных в своем наборе optimal_sets.

...