【问题标题】:How to generate some feasible solutions in CPLEX-PYTHON (Not docplex)?如何在 CPLEX-PYTHON(不是 docplex)中生成一些可行的解决方案?
【发布时间】:2019-10-12 13:55:33
【问题描述】:

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

【问题讨论】:

    标签: python algorithm mathematical-optimization cplex vehicle-routing


    【解决方案1】:

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

    【讨论】:

    • 谢谢,它有效,但我有疑问,例如在我的模型中,我有不同类型的变量,例如对于旅行商问题的 MTZ 公式,模型有 x[i, j] 和 u[i] 变量,因此我想在您的示例中将向量 x_i 分开,以更清楚地识别这两种类型的决策变量的值。这甚至可能吗?抱歉,我对这一切都是新手。
    • 那么对于范围内的k(nb_vars): sol.append([cpx.variables.get_names(k),x_i[k]])
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多