计算路线段的成本

Posted

技术标签:

【中文标题】计算路线段的成本【英文标题】:calculate cost of route segments 【发布时间】:2018-11-08 18:50:44 【问题描述】:

路线表:

route_id | points 
       1 | [A,B] 
       2 | [L,G,C,F,E]

路段成本表:

route_id | point A | pointB | cost
       1 | A       | B      |   10
       2 | L       | G      |   10
       2 | G       | C      |   20
       2 | C       | F      |   15
       2 | F       | E      |   13

需要计算 route_id=2 中点 'G' 和 'E' 之间的成本

【问题讨论】:

您只需要使用 sql 吗?我们可以在任何其他后端语言数据结构中获取此数据并解决此问题。 【参考方案1】:

您可以使用“Recursive With Clause”达到您想要的结果。

表:

create table test(
route_id int, 
pointA char,
 pointB char, 
 cost int
);

价值观:

insert into test values(1 ,'A','B',10),
(2 ,'L','G',10),
(2 ,'G','C',20),
(2 ,'C','F',15),
(2 ,'F','E',13)

递归查询:

WITH RECURSIVE routecost AS (
SELECT pointA, pointB ,cost  /* non recursive part */ 
FROM test                   
WHERE pointA = 'G'
  and route_id = 2 
UNION ALL
SELECT b.pointA, a.pointB, a.cost + b.cost   /* recursive part */               
FROM test a                
JOIN routecost b ON(a.pointA = b.pointB)    
  where a.route_id = 2
)
SELECT * FROM routecost
where pointB = 'E'

解释:

    首先以非递归方式过滤带有pointA和route_id的查询 部分。 然后在递归部分加入它,如查询所示并添加成本 我每次都获取 b.pointA(在非递归部分),因为我们 需要起点。 最后我将它过滤到 pointB 值以获得所需 结果。

Reference: Recursive with clause

【讨论】:

以上是关于计算路线段的成本的主要内容,如果未能解决你的问题,请参考以下文章

解决车辆路线以优化成本

最小成本流未优化路线

[AutoCars]自动驾驶汽车概述(下)

Linux学习路线

Anylogic:如何根据路线成本和代理选择创建每小时到达率计划?

Linux学习路线