【问题标题】:Application of Neighborhood search in CPLEX邻域搜索在 CPLEX 中的应用
【发布时间】:2021-07-13 18:49:22
【问题描述】:

我直接在 CPLEX 中实现了一个混合整数问题。 我的问题是我的目的需要很长时间才能找到最佳解决方案。 我设定了 10 分钟的时间限制。因此,10 分钟后,我得到了一个可行的解决方案,但我不知道它离最佳解决方案有多远。 现在我读到了一个可变邻域搜索,它使优化更快,同时“承诺”一个接近最优的解决方案。 据我所知,CPLEX 不直接提供 VNS,但它能够执行松弛诱导邻域搜索 (RINS)。关于这个的两个问题:

  1. 如何应用它?
  2. 和VNS效果一样吗(短时间内找到接近最优解)

非常感谢! 真诚的

【问题讨论】:

  • 首先,CPLEX 内置了 RINS 作为其启发式方法之一,无论如何都会在其 B&B 搜索期间使用。它只是使用的许多此类启发式方法之一,包括本地分支、探测、潜水等,这些方法通常可以加速一系列大型问题的收敛。查看参数,您将看到 RINS 启发式频率的参数 - 默认情况下它是“开启”的,并且发生在 CPLEX 在解决您的问题时根据其自己的内部分析决定的频率
  • 非常感谢您的快速解答! @Erwin Kalvelagen:我不太明白。也许这个问题很愚蠢,但我不得不问:如果通常找到最佳解决方案需要 5 个小时,我将时间限制设置为 10 分钟。 CPLEX 如何知道解与最优解相差多远?
  • 有点微妙。 Cplex 不知道与最优解的距离。但它确实知道它并不比差距更远。这个差距在运行过程中越来越小。这是分支定界方法的独特功能。我像鹰一样看着这个差距。
  • 啊,好吧,太好了!明天我会看看我的差距,然后决定下一步:)

标签: search optimization cplex neighbours


【解决方案1】:

对于各种类型的邻域搜索,您在很大程度上是靠自己的,因为任何大型商业求解器都没有多少可以很好地内置。然而,在某一层面上,尝试它真的很容易。

假设您已经有一个可行的解决方案来解决您的问题。然后,您可以通过重新解决原始问题来创建一个新的更小的问题,但将模型中的大多数变量固定为已知解决方案中的值 - 您可以选择修复 90%、95% 或 99% 的变量值.这将为求解器留下更少的变量来查找值,并且它通常会在几秒钟内找到您的“子问题”的最佳解决方案,并且有时它可以为您找到的那些变量找到一组更好的值没有修复或冻结您的模型。您可以安全地将当前最知名解决方案中的这些变量的值替换为它们的新值,因为您可以保证这些值与解决方案的其余部分兼容。然后选择一组不同的变量来修复/冻结并再次执行此操作,并不断重复此过程。

让这个你的问题很好地工作的艺术和技巧是你如何选择要修复/冻结的变量以及要重新解决的变量。您留下未修复的变量越多,您先前解决方案的“邻域”就越大,找到改进的机会就越多,但每个子问题需要更长的时间来解决。将有一些子问题大小的最佳点效果很好,但是您必须进行试验才能看到什么有效。同样,它有助于在您的子问题中不固定相关变量。你可以随机选择它们,这个过程仍然会收敛,但会更慢;最好考虑一下您的问题结构,例如放松并重新解决计划中一天的变量,或一个或多个资源的变量,或其他任何东西。同样,这取决于您的问题。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多