gurobi - 当我找到多个解决方案时,为什么我在 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]
如何解决此问题以获得不同的解决方案?
解决方案
似乎 Gurobi 向 MIP 返回了多个解决方案,这些解决方案可以映射到您的潜在问题的相同解决方案。我敢肯定,如果您检查整个解决方案向量,所有这些解决方案确实会有所不同。您只查看 set 中变量的子集optimal_sets
。
推荐阅读
- vue.js - 获取 v-textarea 中的选定文本
- java - 单击 TextView 之外的区域后取消选择 TextView 字段
- vue.js - 即使 console.log 显示该值,也未定义 Fetch Promise
- flutter - 不要让 Flex 视图在某些屏幕尺寸后调整大小
- javascript - 我的javascript代码有什么问题还是opencv.js?
- javascript - 如何使用 javascript 动态插入 Google Web 应用程序 URL
- c - 我想对输入文件中的单词(az)进行排序并将该代码写入另一个文件。但是我被排序部分卡住了,因为它显示了一些错误
- ruby - 如何使用绑定对表达式中的多个属性执行算术运算?
- r - 如何将数据框中的 Inf 或 NA 值更改为 R 中的不同值
- r - 闪亮文档中的renderDiagrammeR美人鱼图大小