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

问题描述

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

PoolSearchMode=2 

在 Gurobi 中找到多种解决方案。但是,当我检索解决方案时,有一些相同的结果!例如,如果它返回 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 个解决方案,它返回的解决方案会更少。但是在这些集合中也有相同的结果,例如:

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

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

标签: gurobimultiple-resultsets

解决方案


似乎 Gurobi 向 MIP 返回了多个解决方案,这些解决方案可以映射到您的潜在问题的相同解决方案。我敢肯定,如果您检查整个解决方案向量,所有这些解决方案确实会有所不同。您只查看 set 中变量的子集optimal_sets


推荐阅读