多次求解复杂模型获得不同的解决方案

问题描述

我有一个用docplex编写的MIP模型和一个用cplex编写的解决方案池。我的模型实际上有数十亿个解决方案。我需要用一个特定的填充数(例如10,000)来多次(例如10次)求解该模型,但是我需要这些多重求解的解彼此完全不同。我如何用cplex做到这一点?是否有参数或方法

解决方法

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

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

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

所有这些,我不清楚为什么您要从头开始多次解决 same 模型。您是否尝试过继续搜索?如果搜索由于解决方案限制而停止,并且您再次调用它,则它应从先前停止的位置继续。因此,它应该找到不同的解决方案。

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