Neo4j:具有成本函数的最短路径取决于路径中的两个连续关系

时间:2016-09-14 14:25:59

标签: neo4j dijkstra shortest-path

假设我有一个图表,其中包含代表城市的节点以及代表城市之间可能连接的关系。连接有出发和到达时间。我想找到城市<td ng-show="perm.contain == 'create-user' ">X</td> A之间的最短路径,而费用函数是总的旅行时间。旅行时间是连接和连接时间之间的等待时间的总和。

我使用Java API,并尝试使用B使用Dijkstra算法。我的主要问题似乎是,GraphAlgoFactory.dijkstra(expander, costEvaluator)接口只接收当前关系而不是完整路径。这样我可以计算连接持续时间而不是等待时间。

我可以采取哪些措施来调整现有算法,还是必须重新实现Dijkstra?

1 个答案:

答案 0 :(得分:0)

路径的总成本将是给定关系的每个评估的getCost()返回值的总和,因此只需定义如何在关系级别上评估成本,总成本是多少由算法本身评估。

另一方面,您可以使用Cypher,假设等待时间是departure_timearrival_time之间的差异:

MATCH p=(a:City {name:"NY"})-[r:CONNECTS*..10]->(b:City {name:"LA"})
WITH p, reduce(
  cost=0, x IN rels(p) | cost + (x.departure_time - x.arrival_time) 
) as cost
RETURN p, cost
ORDER BY cost ASC
LIMIT 1