当我找到多个解决方案时,为什么我在 gurobi 中得到相同的答案?

Why I am getting same answers in gurobi when I am finding multiple solutions?

我正在使用 Gurobi 解决优化问题。在我的问题中,目标是分析最可能的解决方案。为此,我使用参数:

PoolSearchMode=2 

在 Gurobi 中找到多个解决方案。但是,当我检索解决方案时,有一些相同的结果!。例如,如果 returns 100 个解决方案,其中一半是相同的,实际上我有 50 个不同的解决方案。

有关更多详细信息,我试图在图中找到一些具有特殊功能的节点集。所以我将参数 "PoolSearchMode" 设置为 2,使 MIP 对 n 个最佳解决方案进行系统搜索。我定义了一个参数 "best" 来查找 "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 个解决方案,则解决方案会减少 returns 个。但在这些集合中也有相同的结果,如:

[1,2,3],
[1,2,3],
[1,3,5] 

如何解决这个问题以获得不同的解决方案?

似乎 Gurobi returns MIP 的多个解决方案可以映射到您的基础问题的相同解决方案。我敢肯定,如果您检查了整个解决方案向量,所有这些解决方案确实会有所不同。您只查看集合 optimal_sets.

中变量的一个子集