【发布时间】:2020-09-07 16:32:44
【问题描述】:
我有一个用 docplex 编写的 MIP 模型和一个用 cplex 编写的解决方案池。我的模型在现实中有数十亿个解决方案。我需要使用一定的人口数(例如 10,000)多次求解这个模型(例如 10 次),但我需要这些多次求解的解决方案彼此完全不同。如何使用 cplex 实现这一目标?是否有参数或方法?
【问题讨论】:
标签: python python-3.x cplex docplex
我有一个用 docplex 编写的 MIP 模型和一个用 cplex 编写的解决方案池。我的模型在现实中有数十亿个解决方案。我需要使用一定的人口数(例如 10,000)多次求解这个模型(例如 10 次),但我需要这些多次求解的解决方案彼此完全不同。如何使用 cplex 实现这一目标?是否有参数或方法?
【问题讨论】:
标签: python python-3.x cplex docplex
您可以对解决方案池使用多样性过滤器,请参阅CPLEX > User's Manual for CPLEX > Discrete optimization > Solution pool: generating and keeping multiple solutions > Filtering the solution pool 以及可调用库函数CPXXaddsonpooldivfilter() 的参考文档,其中详细说明了如何评估过滤器。只有在所有变量都是二进制的情况下才能这样做。
另一种选择是为您已经找到的每个解决方案添加一个不好的剪辑。
另一种选择是使用现有回调(或带有CANDIDATE 上下文的通用回调)来拒绝您已经找到的任何解决方案。
说了这么多,我不清楚你为什么要从头开始多次解决相同的模型。您是否尝试继续搜索?如果搜索由于解决方案限制而停止并且您再次调用它,那么它应该从之前停止的地方继续。所以它应该找到不同的解决方案。
另外,如果您想获得数以千计的解决方案,那么我想知道您如何处理这些解决方案。也许它可以帮助安装或调整针对某些解决方案的目标函数。使用不同的目标函数只能推动解决方案的多样性。
【讨论】: