例子

例子

参数的使用

让我们通过一些示例继续说明如何使用与解决方案池相关的参数。假设您正在解决一个最优(最小)目标为100的MIP模型。进一步想象,使用默认设置,MIP求解器找到目标为100、110、120和130的模型的4个解。手机万博登录

如果你设置PoolSolutions参数为3,再次求解模型,MIP求解器将返回求解池中的3个解(即手机万博登录SolCount属性的值为3)PoolGap参数值0.2时,MIP解算器将丢手机万博登录弃任何目标值小于120的解(也将在解池中留下3个解)。

如果你设置PoolSearchMode参数为1和PoolSolutions参数设置为10时,MIP解算器将在找到最优解后继续手机万博登录运行,试图找到并存储10个解,但无法保证额外解的质量。

如果你设置PoolSearchMode参数为2和PoolSolutions参数为10时,MIP解算器将试图找到模型的10个最手机万博登录佳解。一个最优返回状态将表明:(i)它找到了10个最佳解,或(ii)它找到了模型的所有可行解,且少于10个。如果你也设置PoolGap参数值为0.1时,MIP解算器将尝试找到10个目标不低于110的解。手机万博登录虽然这看起来相当于要求10个解决方案,而忽略那些目标低于110的方案,但使用这个参数集,解决方案通常会更快地完成,因为求解器无需花费精力寻找超出请求间隔的解决方案。手机万博登录

解释属性信息

让我们尝试更好地理解与解决方案池相关的属性。再考虑一个参数设置的最小化问题PoolSearchMode = 2PoolSolutions = 10已经被使用。

首先,假设解算器以手机万博登录最优返回状态。我们看看一些属性的几个可能的假设值:

  • 案例1ObjVal = 100ObjBound = 100PoolObjBound = 500,池子中第10个溶液的客观值为500。

    池中的第一个解决方案是最优的(因为ObjValObjBound是相等的),求解器能够找到10个不超过5手机万博登录00的解。因为PoolObjBound = 500,我们知道解算器未找到的所有解的目标值都至少为500。手机万博登录因为池中的最后一个解的值是500,池中的10个解肯定是10个最佳解。

  • 案例2ObjVal = 100ObjBound = 100PoolObjBound = +∞SolCount = 7,池子中的第7和第8个解的值是350和+∞,分别。

    求解器找手机万博登录到了7个解,并证明了该模型不存在其他可行解。这7个解决方案中最好的有目标100,最差的有目标350。

现在,假设求解器由于时间限制(返回状态)而提手机万博登录前终止TIME_LIMIT).再次,我们看看一些属性的几个可能的假设值:

  • 案例3:ObjVal = 100ObjBound = 50PoolObjBound = 50

    ObjBound<ObjVal,求解器没有手机万博登录证明现有解(池中的第一个解)的最优性。有比现任更好的解决方案。

  • 案例4:ObjVal = 100ObjBound = 100PoolObjBound = 100,池子中第10个溶液的客观值为500。

    池中的第一个解决方案是最优的(因为ObjValObjBound均相等),求解器能够找到10个不超过50手机万博登录0的目标解。因为PoolObjBound = 100,我们知道解算器未找到的所有解的目标值都至少为100。手机万博登录由于池中最后一个解的值是500,因此可能存在10个或更多目标小于500(但大于或等于100)的解。特别是,当前在池中且目标值大于100的解决方案可能不在10个最佳解决方案之列。

  • 例5:ObjVal = 100ObjBound = 100PoolObjBound = 200,池中第4、5、10个解的目标值分别为180、220和500。

    池中的第一个解决方案是最优的(因为ObjValObjBound是相等的),求解器能够找到10个不超过5手机万博登录00的解。因为PoolObjBound = 200,我们知道解算器未找到的所有解的目标值至少为200。手机万博登录这意味着池中的前4个解(直到值180的解)肯定是存在的4个最好的解。值为220的第5个解(以及池中的后续解)可能不如其他未发现的解。