求解器选择与收敛性问题(OR-Tools)

1.求解器的选择

OR-Tools提供了用于求解 线性规划和 混合整数规划问题的 MPSolver 接口容器,易于调用各种不同求解器。gurobi 当然无论在各个问题上性能都要优胜许多,考虑到毕竟是商用求解器,这里主要枚举开源免费的求解器。

问题类型求解器
纯整数规划(IP)CP-SAT
线性规划(LP)Glop
混合整数规划(MIP)SCIP, CP-SAT

由于MIP问题是最为麻烦难解的,建模时候尽量考虑建成LP或IP,求解速度会快很多。尤其google ortools 整合了SAT/CP solver,CP_SAT 对于一部分MIP问题也可以求解,部分问题效果比SCIP好很多。

2.求解器的收敛

做一个简单的数值实验对比不同求解器的求解速度。构建一个小规模整数规划问题,算例都一样,模型也一样,唯一的区别即求解器不同,这里测试GUROBI,CP_SAT,SCIP三个比较常用的求解器。

ortools调用solver.

solver = pywraplp.Solver.CreateSolver('SCIP')  # GUROBI  SCIP  CP_SAT 

2.1 相同时间下求解结果

先用gurobi求解算例,14s后得到最优解,设定求解时间为14s,再依次求解CP_SAT,SCIP,结果如下表所示。

求解器求解时间(s)是否最优解obj
gurobi149190.0
CP_SAT149190.0
SCIP149305.49

(CP_SAT 在规定时间内同样求得最优解,但如果不加限制求解依然不会停止,这里可能是求解器数值问题)

2.2 不同时间段求解结果

我们设定不同的停止时间,观察求解器的求解情况,可以看到gurobi无论是在初始解以及最后的收敛上都要技高一筹,其实在第7s时就已经找到了最优解,但程序最终停止时间是14s,剩余的这段时间大概就是验优的过程。我设置的算例为IP,CP_SAT表现略逊gurobi但也不错,但SCIP在短时间内陷入了局部最优,跳出局部最优需要更多的时间,显然这就是不同求解器内部性能的一个差异了。

limit Time(s)gurobiCP_SATSCIP
19215.09241.09305.49
29215.09215.59305.49
39215.09215.09305.49
59209.59211.59305.49
79190.09199.59305.49
10opt9196.09305.49
12opt9205.59305.49
14opt9190.09305.49

2.3 目标函数变化曲线

上面用一个小规模算例简单比较了一下三个求解器的求解性能,为了更好的看到求解器gap变化情况,这里将算例规模适当扩大(算例太大了过于费时),给予不同的停止时间,绘制目标函数随时间变化曲线。结果很显著,对于整数规划问题CP_SAT效果明显优于SCIP。

在这里插入图片描述
求解器内部搜索、剪枝算法有差异,尤其到接近最优解时,容易围绕最优解震荡,耗费大量的时间,在调用时需要注意,最好限制GAP或时间。这里参考知乎回答
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.结论

  1. gurobi的收敛性能很好,但商业求解器价格昂贵,在一些小规模case上尤其IP使用google的CP_SAT是个不错的替代选项;
  2. 在使用时有必要限定求解时间和gap,尤其在不要求最优解的情况下;
参考资源链接:[Python实现解决车辆路径问题的神经网络强化学习算法](https://wenku.csdn.net/doc/1ciy4483ts?utm_source=wenku_answer2doc_content) 要在Python中实现图神经网络和强化学习算法以解决车辆路径问题(VRP),并评估其OR-Tools工具的性能对比,首先需要熟悉图神经网络和强化学习的基础理论。推荐资料《Python实现解决车辆路径问题的神经网络强化学习算法》将为您提供宝贵的资源和指导。以下是一些关键步骤和考虑因素: 1. 理解问题:车辆路径问题(VRP)是一种典型的组合优化问题,涉及到多个车辆如何高效地分配和导航以服务一系列客户点。 2. 环境构建:使用图神经网络(GNNs)处理和学习图结构数据,这在VRP中尤为重要,因为道路网络可以自然地表示为图。 3. 强化学习策略:通过构建环境模型来模拟车辆在图中的移动,并采用强化学习策略如Q-Learning或Policy Gradients来训练模型,使车辆能学习到如何优化路径。 4. 实现调优:编写Python代码来实现这些算法,并进行必要的调优。推荐资料提供了完整的源码文件,您可以复现和进一步开发。 5. 结果可视化:使用Python中的可视化工具,如matplotlib或seaborn,来绘制算法收敛过程和最终解的图表。 6. 性能对比:最后,将您的算法结果OR-Tools工具进行对比OR-Tools是一个强大的运筹学求解器,它对VRP这类问题提供了一个基准。 通过这个综合性的学习过程,您不仅能掌握解决复杂VRP问题的技术,还能了解如何评价和优化算法性能。建议您在完成算法实现后,深入阅读推荐资料中的项目介绍、安装指南和使用说明,以获得最佳的学习效果。 参考资源链接:[Python实现解决车辆路径问题的神经网络强化学习算法](https://wenku.csdn.net/doc/1ciy4483ts?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值