多点最优路径规划 - (商旅问题,拼车,餐饮配送,包裹配送,包裹取件,回程单)

标签

PostgreSQL , PostGIS , pgrouting , 商旅问题 , 拼车 , 餐饮配送 , 包裹配送 , 包裹取件 , 回程单


背景

小长假,带着一家人出去旅行,计划好了去几个地方,如何设计旅行线路是最优的?(里面还涉及到路费,路途时间等因素)。

又比如 拼车,餐饮配送,包裹取件、配送,都包含最佳路径计算的共性在里面。

PostgreSQL 在GIS领域有这非常丰富的用户和实际案例,路径规划方面,我之前写过一篇关于包裹配送的文章

《聊一聊双十一背后的技术 - 物流、动态路径规划》

在商旅问题,拼车,餐饮配送,包裹取件、配送,等诸多最佳路径计算的需求方面,PostgreSQL又是如何满足需求的呢?

pgrouting 核心功能

pgRouting library contains following features:

  • All Pairs Shortest Path, Johnson’s Algorithm
  • All Pairs Shortest Path, Floyd-Warshall Algorithm
  • Shortest Path A*
  • Bi-directional Dijkstra Shortest Path
  • Bi-directional A* Shortest Path
  • Shortest Path Dijkstra
  • Driving Distance
  • K-Shortest Path, Multiple Alternative Paths
  • K-Dijkstra, One to Many Shortest Path
  • Traveling Sales Person
  • Turn Restriction Shortest Path (TRSP)

最佳规划1 - 从一个点出发,经过多点,回到起点

解决 旅行、包裹配送、餐饮配送的问题

这个问题的定义如下,从一点出发,经过多点,回到起点。

Given a collection of cities and travel cost between each pair, find the cheapest way for visiting all of the cities and returning to the starting point.

详情

http://docs.pgrouting.org/latest/en/TSP-family.html#tsp

例子1

pgr_TSP - Returns a route that visits all the nodes exactly once.

从5出发,经过array[-1, 3, 5, 6, -6],回到5。

SELECT * FROM pgr_TSP(
    $$
    SELECT * FROM pgr_withPointsCostMatrix(
        'SELECT id, source, target, cost, reverse_cost FROM edge_table ORDER BY id',
        'SELECT pid, edge_id, fraction from pointsOfInterest',
        array[-1, 3, 5, 6, -6], directed := false);
    $$,
    start_id := 5,
    randomize := false
);  

 seq | node | cost | agg_cost
-----+------+------+----------
   1 |    5 |    1 |        0
   2 |    6 |    1 |        1
   3 |    3 |  1.6 |        2
   4 |   -1 |  1.3 |      3.6
   5 |   -6 |  0.3 |      4.9
   6 |    5 |    0 |      5.2
(6 rows)

例子2

pgr_eucledianTSP - Returns a route that visits all the coordinates pairs exactly once.

SET client_min_messages TO DEBUG1;
SET
SELECT* from pgr_eucledianTSP(
    $$
    SELECT id, st_X(the_geom) AS x, st_Y(the_geom) AS y FROM edge_table_vertices_pgr
    $$,
    tries_per_temperature := 0,
    randomize := false
);
DEBUG:  pgr_eucledianTSP Processing Information
Initializing tsp class ---> tsp.greedyInitial ---> tsp.annealing ---> OK  

Cycle(100) 	total changes =0	0 were because  delta energy < 0
Total swaps: 3
Total slides: 0
Total reverses: 0
Times best tour changed: 4
Best cost reached = 18.7796
 seq | node |       cost       |     agg_cost
-----+------+------------------+------------------
   1 |    1 |  1.4142135623731 |                0
   2 |    3 |                1 |  1.4142135623731
   3 |    4 |                1 | 2.41421356237309
   4 |    9 | 0.58309518948453 | 3.41421356237309
   5 |   16 | 0.58309518948453 | 3.99730875185762
   6 |    6 |                1 | 4.58040394134215
   7 |    5 |                1 | 5.58040394134215
   8 |    8 |                1 | 6.58040394134215
   9 |    7 | 1.58113883008419 | 7.58040394134215
  10 |   14 |   1.499999999999 | 9.16154277142634
  11 |   15 |              0.5 | 10.6615427714253
  12 |   13 |              1.5 | 11.1615427714253
  13 |   17 | 1.11803398874989 | 12.6615427714253
  14 |   12 |                1 | 13.7795767601752
  15 |   11 |                1 | 14.7795767601752
  16 |   10 |                2 | 15.7795767601752
  17 |    2 |                1 | 17.7795767601752
  18 |    1 |                0 | 18.7795767601752
(18 rows)

最佳规划2 - 从一个点出发,经过多点,到达终点

拼车的问题更加复杂一些,

从一个点出发(司机位置),经过多点(所有拼车乘客的上车地点),再去到多点(拼车乘客的下车地点)。

拼车的问题可以分为两个阶段来解决,

第一个阶段,从司机位置到接上所有拼车乘客。

第二个阶段,从最后一个乘客上车地点,到达所有乘客的下车地点。

两个阶段的规划需求是一样的,从一个点出发,经过多点,到达终点。

详情

http://docs.pgrouting.org/latest/en/TSP-family.html#tsp

例子

详情

http://docs.pgrouting.org/latest/en/pgr_dijkstraVia.html#pgr-dijkstravia

Given a list of vertices and a graph, this function is equivalent to finding the shortest path between vertexivertexi and vertexi+1vertexi+1 for all i<size_of(vertexvia)i<size_of(vertexvia).

参考

所有用到的路由函数,点对点成本矩阵函数,请参考

http://pgrouting.org/

《聊一聊双十一背后的技术 - 物流、动态路径规划》

http://docs.pgrouting.org/latest/en/TSP-family.html#tsp

时间: 2024-08-30 15:57:02

多点最优路径规划 - (商旅问题,拼车,餐饮配送,包裹配送,包裹取件,回程单)的相关文章

数据库案例集锦 - 开发者的《如来神掌》

背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗手,无可柰何,惟隐居深谷,以雕为友.呜呼,生平求一敌手而不可得,诚寂寥难堪也.」 剑冢中,埋的是剑魔独孤求败毕生几个阶段中用过的几柄剑: 利剑无意:第一柄是青光闪闪的利剑,凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋. 软剑无常:第二柄是紫薇软剑,三十岁前所用,误伤义士不祥,悔恨不已,乃弃之深谷. 重剑无锋:第三柄是玄铁重剑,重剑无锋,大巧不工,四十岁之前恃之横行天下. 木剑无俦:第四柄是已腐朽的木剑. 无剑无招:四十岁后,不

无人驾驶背后的技术 - PostGIS点云(pointcloud)应用

标签 PostgreSQL , PostGIS , box , grid , pointcloud , pgpointcloud , point聚合 , KNN , 自动驾驶 , 自动配送 , 无人驾驶 , 机器人配送 , 物流 背景 科幻电影的场景随着技术的发展,正在一步步的从荧幕变成现实.从军用到民用,比如汽车厂商.科技公司在尝试的无人驾驶,无人飞行器. 无人驾驶应用非常广泛,比如快递行业,时机成熟以后,将来可能快递员这个职业也会逐渐从社会上消失(解放快递员的双手和创造力,让更多的人参与到科

滴滴大脑聪明程度远超 AlphaGo,叶杰平解密滴滴 AI 路径规划

"互联网时代的上半场结束了,下半场的角逐一定是在人工智能上."滴滴出行CEO程维对此坚信不疑. 在有中国"AI 春节"之称的新智元2017开源·生态 AI 技术峰会上,滴滴出行研究院副院长叶杰平出面,给大家做了一场关于使用人工智能技术解决出行难题的演讲. 滴滴大脑:大数据.机器学习和云计算   叶杰平将滴滴大脑这个智能系统分为三部分,分别是大数据.机器学习和云计算.   云计算提供强大.灵活的计算能力,滴滴的业务场景对计算要求和实时性都非常高,用户输入一个目的地,最

聊一聊双十一背后的技术 - 物流, 动态路径规划

双十一背后的技术系列文章 <聊一聊双十一背后的技术 - 物流, 动态路径规划> <聊一聊双十一背后的技术 - 分词和搜索> <聊一聊双十一背后的技术 - 强奸式秒杀技术实现> <聊一聊双十一背后的技术 - 毫秒分词算啥, 试试正则和相似度> 云栖聚能聊 - 聊一聊双十一背后的数据库技术 标签 PostgreSQL , 物流 , 路径规划 , LBS , PostGIS , Greenplum , 最短路径 , 双十一 , 地理位置信息 , 快递 , 菜鸟物流

PgSQL · GIS应用 · 物流, 动态路径规划

背景 双十一背后的技术系列文章 <聊一聊双十一背后的技术 - 分词和搜索> 每年双十一的交易额都创新高,今年也不例外,双十一几乎成了各种IT系统的大考,物流也不例外. 每次双十一快递几乎都被爆仓,但是随着技术的发展,今年,听说双十一刚过,小伙伴们的包裹差不多都收到了,今年的快递效率怎么如此之高呢? 今天,来给大家分享一下物流与背后的数据库技术,当然我讲的还是PostgreSQL, Greenplum, PostGIS一类,大伙了解我的. 物流行业是被电子商务催生的产业之一. 快件的配送和揽件的

PostgreSQL 路径规划插件 pgruoting 介绍

    我们都知道PostgreSQL利用PostGIS插件,善于处理LBS相关的业务.     PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象.空间索引.空间操作函数和空间操作符.同时,PostGIS遵循OpenGIS的规范.  PostGIS的优势 一: 支持所有的空间数据类型,这些类型包括:点(POINT).线(LINESTRING).多边形(POLYGON).多点(MULTIPOINT).多线(MULTILINESTR

c语言-基于C语言,用蚁群算法求最优路径。百度复制粘贴的别来了。。。要求可以直接运行的代码哈

问题描述 基于C语言,用蚁群算法求最优路径.百度复制粘贴的别来了...要求可以直接运行的代码哈 一个人从上海大学出发,经过若干个地点,路线不重复走,最后回到上海大学,找三条优化路线. 上海大学:北纬N31°19′5.86″ 东经E121°23′21.52″ 星雨城:北纬N31°19′46.58″ 东经E121°24′9.29″ 大康公寓:北纬N31°19′18.88″ 东经E121°25′3.98″ 文景楼:北纬N22°35′23.78″ 东经E113°52′50.67″ 大场中学:北纬N31°

产品信息架构:互联网产品路径规划

文章描述:产品路径规划的几个阶段. 相比之前在博客上公布自己的创业项目时候的数据,又过了3个月,下厨房总体的数据翻了3倍多,注册用户2.6W,每天的独立用户也已经2W多.当然,我们的团队相比之前的3.5个人,翻了4倍. 创业前写过一个PPT,大致描述了一下下厨房的路径规划,到目前为止,基本按照设想的路径发展:1 第一阶段,主要是靠"感觉"驱动产品.(在知乎曾经回答过一个问题可以解释这种"感觉"的来源)如果感觉对的话,不久应该可以做到每天3W独立IP(之前估计的6-8

机器人操作系统ROS教程(十四) move_base(路径规划)

在上一篇的博客中,我们一起学习了ROS定位于导航的总体框架,这一篇我们主要研究其中最重要的 move_base包. 在总体框架图中可以看到,move_base提供了ROS导航的配置.运行.交互接口,它主要包括两个部分: (1)全局路径规划(global planner):根据给定的目标位置进行总体路径的规划: (2)本地实时规 划(local planner):根据附近的障碍物进行躲避路线规划. 一.数据结构 ROS中定义了 MoveBaseActionGoal数据结构来存储导航的目标位置数据,