我正在使用 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]
如何解决此问题以获得不同的解决方案?