neo4j中总线路由的数据模型和遍历方法

时间:2016-01-15 12:04:15

标签: neo4j routing graph-databases

我正在尝试创建一个应用程序,以便在当地城市乘坐公共汽车时找到最佳路径。到目前为止,我已经在这里找到了一些有用的答案,但我目前正在采用我的方法,我希望得到一些反馈。

当前数据模型

电台阶段建模为节点,电台和停靠点之间有两个关系。每个阶段节点都有开始结束时间作为“HH:mm”格式的字符串,属于某些更高级别的结构,我称之为 routes < / strong>,连接到这些阶段节点以描述具有时间细节的站点的轨迹。每个:FROM 关系都有一个属性持续时间来模拟reduce语句的传播时间。

因此,以下查询将返回this之类的内容。舞台节点在图片中显示开始属性。

match (from:Station {name: "Glosberg"})
match (to:Station {name: "Knellendorf"})
match paths=((from)-[:FROM|:TO*..10]->(to))
return paths;

到目前为止的问题:

  1. ShortestPath / AllShortestPaths 不是有效选项,因为最小跳数并不意味着最佳路径。我想要的是缩短旅行时间,我可以用 Reduce 语句来完成这一点,我已经做过了。因为我必须检查所有路径,我正在使用具有限制的一般模式匹配器(如上所示)。我在查询中使用的限制实际上是之间的最短路径的长度加上10%左右,还包括可能包含更多跃点的路径但是更短的时间。这不一定准确,但似乎是公平的权衡。
  2. 使用dijkstra为我提供了从 A B 的所有路径。由于舞台节点上有一种时间数据形式,大多数路径没有意义,因为它们要么以相反的顺序组合(下午2点 - >下午1点),要么产生长的等待时间(下午2点 - >下午4点),没有必要。因此,我必须在cypher或某些api级别过滤掉坏路径。但是,对于当前的数据模型,只有太多的路径来检查有效性。对于一些也会在生产中运行的样本数据,我有一条路线每天访问24个站点2次,从而产生2 ^ 23条路径。我很确定我的数据模型是问题所在,但我看不出任何方法来解决这个问题;任何想法?
  3. 问题:

    1. 更多的问题:你如何解决阶段超过0点的订购路径?由于“23:59”大于“00:01”但不是按时间顺序排列。
    2. 您对数据模型有什么改变?
    3. 您是否建议在路径查找如何降低复杂性方面进行任何权衡(例如,使用最短路径)?
    4. 您是否建议从基础设施数据(站点和哪些站点接近哪些站点数据)中分离实际路线数据(时间表,何时何地停止)?这样我就不得不使用neo4j找到一个路径/一组站点,然后尝试从时间表中找到一组适合的元素,类似于wanderu's approach
    5. 我已经读过,遍历api是一种更好的方式来描述如何访问图形而不是使用cypher,它只描述了要查找的内容,但是我希望直到现在才收到关于我的内容的反馈我深入研究了这一点。

0 个答案:

没有答案