待解决的问题:VRP+TW(带时间窗的车辆路线规划问题)
外卖、跑腿业务中,配送站维度,新订单派给哪个骑手,实现骑手资源最大化利用,提高配送效率
基础输入:n个骑手 --> 单位骑手:最大单量+每个骑手位置+n个出发点+n个目的地+目的地时间窗
输出:骑手的最优路径(路网/直线距离)+总耗时+总距离
硬约束:
①每个骑手限制最大单量
②一个订单包含一个取餐点(出发点)一个送餐点(目的地),对于一个订单,骑手只能先去取餐点,再去送餐点
③骑手每个订单的目的地都有时间窗约束,不能晚于目的地要求的到达时间
可逐渐加大范围:
①手动指定配送站,配送站维度动态规划指定骑手
②全市n个配送站,动态规划指定某个配送站某个骑手
规划求解器:Optaplanner(Java)
每个组织都需要面对规划、排程问题:在有限的资源约束下提供服务与产品(例如人员,资产,时间及资本等限制)。Optaplanner可以优化这类规划、排程问题,令到使用它的组织可以用更少的资源做更多的事(尽可能的花少钱办大事)。这就是著名的的约束满足规划,它属于运筹学的一部分。
Optaplanner是一个轻量的、可嵌入的,可以对规划问题进行优化的约束满足引擎,它让普通的Java工程师能够有效地解决优化问题,它还与其他JVM语言(如Kotlin和Scala)兼容。在问题建模方面,OptaPlanner的约束作用在普通的域对象上,且无需键入复杂的数学公式,可以重复使用现有代码。在问题求解方面,OptaPlanner结合了许多复杂的启发式和元启发式算法(如禁忌搜索、模拟退火、逾期接受和变邻域搜索),能够提供非常有效的优化服务。OptaPlanner是一款开源软件,100%由Java编写,可以在任何JVM上运行,也可以在Maven中央存储库中使用。
它可以解决案例有:
- 员工排班:为护士、维修工等人员制定上班时间表。
- 方程安排:安排会议、约见、维修工作、广告时间等。
- 教育领域的时间安排:安排课程、课堂、考试、会议讲座等。
- 规划车辆运动路线:通过已知的地图工具,为货运、客运(货车、火车、轮船、航班等)规划交通工具多目标的运行路线。
- 装箱问题:向容器、货车、轮船和仓库装载货物,同时可以规划电脑的资源加载利用,例如云计算的资源分配问题。
- 车间生产安排:规划汽车组装生产线,机器队规划,劳动任务的规则等。
- 下料问题:在下料分割的时候,实量最小的浪费,例如切割纸张、钢铁、地毯等。
- 运动赛事安排:规划比赛和训练,例如安排足球联赛、棒球联赛等。
- 金融优化:投资组合优化、实现风险分散等。
官方文档:https://docs.optaplanner.org/9.42.0.Final/optaplanner-docs/pdf/optaplanner-docs.pdf
中文介绍:https://blog.csdn.net/kentis/article/details/82696448
github:https://github.com/kiegroup/optaplanner
OptaPlanner内部优化算法介绍: https://blog.csdn.net/sinat_41359797/article/details/89147050
本地路网引擎
一、GraphHopper
文档地址:https://www.graphhopper.com
GraphHopper是一个快速、可扩展且灵活的开源路线规划引擎,它基于Java开发,具有多种显著特点和广泛的应用场景。
①主要特点:
- 高性能:GraphHopper采用了A*搜索算法,并对数据进行预处理,从而能够在大规模地图数据上实现高效的路径查找。
- 灵活性:它支持多种出行方式,如汽车、步行、自行车等,并能处理实时交通信息,提供最佳路线建议。
- 可扩展性:GraphHopper易于集成和扩展,可以根据不同的应用需求进行定制。
- 跨平台:基于Java开发,GraphHopper可以在多个操作系统上运行。 开源免费:遵循Apache 2.0许可协议,完全开源免费。
②功能与应用:
- 路线规划:GraphHopper可以根据地理位置数据计算出最短路径、最快路径、多点路径等,满足不同交通方式的需求。
- 实时导航:它能够根据实时交通情况和用户需求,对路径进行优化,提供最佳的路线选择。
- 定制化开发:GraphHopper提供了丰富的API和插件机制,允许开发者自定义路线规划算法、数据源、导航指令等,满足不同应用的需求。
- 应用场景:GraphHopper可以广泛应用于各种场景,包括Web应用、企业应用、IoT设备、研究项目等。具体如地图导航应用、物流管理系统、出行服务应用等。
③与腾讯云的结合:
- 腾讯云提供了一系列与地图相关的产品和服务,可以与GraphHopper结合使用,如腾讯地图API、腾讯位置服务、腾讯云服务器等,为用户提供完整的地理位置解决方案。
④其他优势:
- 离线地图支持:GraphHopper支持离线地图数据,可以在本地进行计算,提高了计算效率。
- 多种导航模式:支持实时导航、离线导航和批量导航等不同的导航模式,以满足不同需求。
总结:GraphHopper是一个功能强大、灵活可定制的开源路线规划引擎,具有广泛的应用前景和潜力。
二、openrouteservice(推荐)
文档地址:https://link.zhihu.com/?target=https%3A//github.com/GIScience/openrouteservice
Openrouteservice是一个功能强大的开源项目,它提供全球范围的地理空间服务。
①数据来源:
- Openrouteservice利用用户生成和社区协作收集的免费地理数据——OpenStreetMap。
②技术特点:
- 高度可定制:项目允许用户根据需求调整参数,如避开特定区域、优先考虑自行车道等。
- 全球化覆盖:基于OpenStreetMap数据,Openrouteservice提供全球范围的服务。
- 高效性能:优化的算法保证了大规模请求处理的效率。 易于部署:支持Docker容器化部署,简化安装过程。
- 技术栈:项目主要使用Java编写,并依赖于一个经过修改的graphhopper 4.0版本。
③主要服务:
- 方向服务:基于选定的出行方式,为两个或多个位置之间的路径提供详细的路线和定制化设置。
- 等时区服务:从给定地点获取可以到达的所有区域,用于评估出行时间影响。
- 矩阵服务:计算任意交通模式下的多对一、一对多或多对多的路线。
④项目整合:
- Openrouteservice与Pelias(用于地理编码)和openpoiservice(用于地点查询)进行了整合,提供了更全面的地理空间服务。
⑤应用场景:
- 地图应用开发者:可以集成Openrouteservice的API,提供自己的路线规划和导航解决方案。
- 研究者:利用Openrouteservice强大的空间分析功能进行城市规划、交通研究或环境影响评估。
- 个人用户:通过提供的在线客户端,快速获取到出行信息,方便日常生活。
⑥使用方式:
- 用户可以访问Openrouteservice的演示服务器体验服务,或者注册API密钥,直接向API发起请求,灵活调用。
⑦项目优势:
- 开放源码:允许自由使用、修改和分发,鼓励社区参与开发和改进。
- 易于集成:提供简单的HTTP接口,便于与其他应用或平台集成。
总结:Openrouteservice是一个功能丰富、性能卓越的开源地理空间服务项目,通过整合OpenStreetMap数据和先进的地理空间算法,为全球用户提供了高质量的路线规划、导航和地理空间分析服务。