我正在使用线性数学规划方法研究关于车辆路径问题 (VRP) 的变体形式的论文。我制定了一个经过充分测试的模型,但是这个模型在可接受的计算时间内最多可以解决 30 个节点,所以我需要实施一些元启发式算法来为更大的实例找到好的可行解决方案,所以这里是问题所在。我知道我可以使用 python-cplex 命令 solution_pool (类似的东西)生成一些解决方案,所以我想知道如何生成和访问这些解决方案(目标函数值、决策变量值等)我的模型是cplex 对象模型。我知道这是可能的,如果你能帮助我,那就太好了。在此先感谢智利的问候。
问问题
664 次
2 回答
3
一旦你有了你的 cpx 对象,你就可以写
cpx.populate_solution_pool()
numsol = cpx.solution.pool.get_num()
print("The solution pool contains %d solutions." % numsol)
meanobjval = cpx.solution.pool.get_mean_objective_value()
sol_pool = []
for i in range(numsol):
objval_i = cpx.solution.pool.get_objective_value(i)
x_i = cpx.solution.pool.get_values(i)
nb_vars=len(x_i)
sol = []
for k in range(nb_vars):
sol.append(x_i[k])
sol_pool.append(sol)
print("pools =",sol_pool)
于 2019-05-27T04:14:33.673 回答
1
解决方案池中的解决方案在属性中可用,请参阅此处Cplex.solution.pool
的参考文档。
默认情况下,CPLEX 会保存它在解决方案池中找到的任何可行解决方案,因此您无需执行任何特定操作来创建这些解决方案。但是,由于您不是在证明最优性而是希望快速看到好的解决方案,因此您可能需要使用一些参数:
- 将Cplex.parameters.emphasis设置为 4 可以更快地产生更好的解决方案
- 手册中有关填充解决方案池的章节中还有一些想法。您可能想查看抛光程序和/或查看
Cplex.populate_solution_pool()
.
于 2019-05-27T04:43:56.063 回答