【问题标题】:Obtaining different solutions on solving a cplex model many times多次求解 cplex 模型时获得不同的解
【发布时间】:2020-09-07 16:32:44
【问题描述】:

我有一个用 docplex 编写的 MIP 模型和一个用 cplex 编写的解决方案池。我的模型在现实中有数十亿个解决方案。我需要使用一定的人口数(例如 10,000)多次求解这个模型(例如 10 次),但我需要这些多次求解的解决方案彼此完全不同。如何使用 cplex 实现这一目标?是否有参数或方法?

【问题讨论】:

    标签: python python-3.x cplex docplex


    【解决方案1】:

    您可以对解决方案池使用多样性过滤器,请参阅CPLEX > User's Manual for CPLEX > Discrete optimization > Solution pool: generating and keeping multiple solutions > Filtering the solution pool 以及可调用库函数CPXXaddsonpooldivfilter() 的参考文档,其中详细说明了如何评估过滤器。只有在所有变量都是二进制的情况下才能这样做。

    另一种选择是为您已经找到的每个解决方案添加一个不好的剪辑。

    另一种选择是使用现有回调(或带有CANDIDATE 上下文的通用回调)来拒绝您已经找到的任何解决方案。

    说了这么多,我不清楚你为什么要从头开始多次解决相同的模型。您是否尝试继续搜索?如果搜索由于解决方案限制而停止并且您再次调用它,那么它应该从之前停止的地方继续。所以它应该找到不同的解决方案。

    另外,如果您想获得数以千计的解决方案,那么我想知道您如何处理这些解决方案。也许它可以帮助安装或调整针对某些解决方案的目标函数。使用不同的目标函数只能推动解决方案的多样性。

    【讨论】:

    • 谢谢丹尼尔。我需要多次求解模型,因为我有一部分会随机更改一个变量,并且我需要在每次求解中更改该变量。在没有任何调整的情况下,每次使用不同的随机变量求解时,我都有一些解决方案,但它们彼此非常相似。如上所述,我怎样才能继续搜索?
    • (我需要更改一个约束才能继续搜索)
    • 修改模型后无法继续搜索。
    • 添加一个新的解决方案并继续如何?这可能吗?
    • “添加新解决方案”是什么意思?你想在哪里添加它?到解决方案池?这是不可能的。您可以添加一个新的解决方案作为 MIP 启动。或者通过添加排除此解决方案的多样性过滤器来假装您已经找到了该解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多