如何在 CPLEX-PYTHON(不是 docplex)中生成一些可行的解决方案?

How to generate some feasible solutions in CPLEX-PYTHON (Not docplex)?

我正在使用线性数学规划方法撰写有关车辆路径问题 (VRP) 变体形式的论文。我有一个我制定的经过良好测试的模型,但是这个模型在最多 30 个节点的可接受计算时间内得到解决,所以我需要实施一些元启发式算法来为更大的实例找到好的可行解决方案,所以这就是问题所在。我知道我可以使用 python-cplex 命令 solution_pool(类似的东西)生成一些解决方案,所以我想知道如何生成和访问这些解决方案(objective 函数)值、决策变量值等)我的模型是一个复杂的对象模型。我知道这是可能的,如果你能帮助我,那就太好了。在此先感谢智利的问候。

一旦你有了你的 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)

解决方案池中的解决方案在Cplex.solution.pool属性中可用,请参阅参考文档here

默认情况下,CPLEX 会保存它在解法池中找到的任何可行解法,因此您无需执行任何特定操作即可创建这些解法。但是,由于您不是在证明最优性之后而是想快速看到好的解决方案,因此您可能想尝试一些参数: