【问题标题】:Why I am getting same answers in gurobi when I am finding multiple solutions?当我找到多个解决方案时,为什么我在 gurobi 中得到相同的答案?
【发布时间】:2020-05-30 08:53:13
【问题描述】:

我正在使用 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] 

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

【问题讨论】:

    标签: gurobi multiple-resultsets


    【解决方案1】:

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

    【讨论】:

    • 是的,你是对的。当我检查了所有解决方案时,我发现有不同的方法可以达到解决方案。所有不同方式的最终结果都是相同的,但到达的方式不同,因此 Gurobi 将它们视为可能的解决方案。但是“optimial_sets”的子集没有问题。为了获得具有最佳 objValue 的解决方案,我过滤了结果。
    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    相关资源
    最近更新 更多