使用Neo4j进行多模式路由

时间:2016-09-26 17:04:53

标签: neo4j cypher

我尝试基于Neo4j数据库中的数据开发多模式路由系统。 我的想法如下:

节点

停止: 代表公共汽车站,铁路站,乘车分享优惠,汽车租赁或汽车共享站等的节点。

时间表: 此停靠点的服务时间表。 在公共交通方面,它包括工作日的出发时间。在汽车租赁的情况下,它包括例如开放时间。对于乘车分享,它包括出发日期和时间。

优惠: 此止损的相应移动性报价。如果当前止损属于公共交通,则这只是服务项目的标记和其他一些信息。在乘车共享的情况下,它包含有关此的其他信息。

connected_by: 节点通过此边缘连接,如果它是相同的运输模式(停止时没有变化等) 属性是:距离,旅行时间,价格

switch_to(也可以称为connected_by,但具有不同的属性): 如果节点是不同的运输模式,则通过此边缘连接节点(需要停止更改) 属性是:切换时间

scheduled_by: 节点和时间表通过此边缘连接。

offered_by: 时间表和优惠通过此边缘连接。

如果用户要求从A点到B点的连接,我该如何计算? 我的第一个想法是这样的:

MATCH (from {name: 'test'}),(to {name: 'test3'}), p = (from)-[:connected_by*]-(to)
RETURN p AS shortestPath, reduce(cost=0, rel in relationships(p) | cost + rel.cost) AS totalCost
ORDER BY totalCost ASC

但我真正想要的是:

从A点到B点的所有节点,相应的报价,总价,所需的开关(改变运输方式)和总的行驶时间。特别是旅行时间很难,因为必须考虑:

  • " connected_by"
  • 的旅行时间
  • " switch_to"
  • 中的切换时间
  • 等待时间:e。 G。我在11点07分在Node1,下一个出发时间是11:15,然后我要等8分钟。
  • 如果旅程从晚上11点到凌晨1点,则必须确保计算正确。

此外,价格很难,因为它可能是一个连接(乘车份额,铁路)的价格,时间取决于价格(汽车共享,每小时/每天)或公共交通票(对多个连接有效但是只是某段时间和某个区域。)

有没有办法通过cypher声明实现这一目标?也许如果我简化数据结构(信息必须相同)?如果没有,获取此信息的最佳方式是什么(Java程序?)。

编辑1: 这是图的实际模型: Graph Model

以下是一个例子:

Example Graph

在该示例中,您可以看到从A点到目的地的一个人的计算。因此,该人必须步行,乘坐公共汽车并使用乘车分享。

0 个答案:

没有答案