我正在使用带有 CBC_MIXED_INTEGER_PROGRAMMING 求解器的 Google OR-Tools。
大多数情况下,求解器会在不到 20 秒的时间内找到最优解,但有时需要几分钟才能找到。它可以非常快速地猜测出对解决方案的良好估计,但找到最佳解决方案需要很长时间。
我的第一个想法是设置一个简单的时间限制,以返回 30 秒后找到的最佳解决方案:
solver = pywraplp.Solver('scheduling_solver', pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)
solver.SetTimeLimit(30*1000) # 30 seconds time limit
不幸的是,此时找到的解决方案可能与最佳解决方案相差太远。
是否有可能:
- [00 - 30 秒] 如果在不到 30 秒内找到最佳解决方案,则返回该解决方案。
- [30 - 60 秒] 如果未找到最佳解决方案,则接受 5% 的 GAP 额外 30 秒(GAP LIMIT)
- [60+ 秒] 如果求解器在一分钟后仍在运行,则返回找到的最佳解决方案 (TIME LIMIT)
提前谢谢了,
罗曼