Google OR-Tools车辆路由示例运行异常求助
解决Google OR-Tools车辆路由示例中的Check failed: step >0错误
我之前在Windows 10 + Python 3.6环境下运行OR-Tools的VRP示例时也碰到过一模一样的问题,结合官方文档和社区讨论,总结了几个可行的解决方向:
1. 匹配OR-Tools与Python版本的兼容性
Python 3.6属于较旧的版本,OR-Tools从9.x系列开始就不再支持Python 3.6了。你需要安装适配Python 3.6的旧版OR-Tools:
pip install ortools==8.10.8847
这个版本是官方最后支持Python 3.6的稳定版本之一,能避免版本不兼容导致的底层搜索模块错误。
2. 显式初始化Google日志模块
错误提示里提到WARNING: Logging before InitGoogleLogging() is written to STDERR,日志初始化不完整可能干扰求解器的正常运行。在代码开头添加以下初始化代码:
import sys from ortools.init import pywrapinit # 初始化日志系统 pywrapinit.CppBridge.InitializeLogging(sys.argv[0]) pywrapinit.CppBridge.SetUsageMessage("运行OR-Tools车辆路由示例")
3. 调整求解器搜索参数
默认的搜索参数可能在某些环境下无法生成有效的搜索步骤,你可以显式设置搜索时间限制和启发式算法,强制求解器在合理范围内运行:
from ortools.constraint_solver import routing_enums_pb2 from ortools.constraint_solver import pywrapcp # ... 保留原代码中的距离矩阵、路由模型等初始化逻辑 ... # 自定义搜索参数 search_parameters = pywrapcp.DefaultRoutingSearchParameters() # 设置10秒的时间限制,避免无限阻塞 search_parameters.time_limit.seconds = 10 # 使用引导式局部搜索启发式,提升求解稳定性 search_parameters.local_search_metaheuristic = ( routing_enums_pb2.LocalSearchMetaheuristic.GUIDED_LOCAL_SEARCH) # 运行求解器 solution = routing.SolveWithParameters(search_parameters)
4. 验证输入数据完整性
虽然官方示例代码本身没问题,但如果复制过程中出现距离矩阵缺失、节点数设置错误等情况,也可能导致求解器无法生成有效搜索步骤。可以在代码中添加一行打印,确认距离矩阵的有效性:
print("距离矩阵:", distance_matrix)
确保所有元素都是合理的非负整数,没有全0或者异常值。
按照以上步骤调整后,应该能解决程序冻结退出和Check failed: step >0的错误。
内容的提问来源于stack exchange,提问作者Jeff Saltfist
相关产品推荐
相关产品推荐

