【问题标题】:Is there a Neo4j A* Cypher query?是否有 Neo4j A* Cypher 查询?
【发布时间】:2018-06-23 22:20:12
【问题描述】:

我目前正在使用 Neo4j 的内置 Dijkstra 来查找最短路径,并且它有效。

START start=node(123), end=node(203454)
MATCH p=(start)-[:CONNECTS]->(end)
RETURN p as shortestPath,
REDUCE(distance=0, r in relationships(p) | distance+r.distance) AS totalDistance
ORDER BY totalDistance ASC
LIMIT 1

我希望能够使用 A* 算法,因为我的节点有纬度和经度。是否有针对此的 Cypher 查询?

【问题讨论】:

    标签: neo4j cypher shortest-path a-star


    【解决方案1】:

    APOC library's 图算法中有一个 A* 算法。

    以关系属性名称作为成本函数运行 A*

    apoc.algo.aStar(
        startNode, endNode, 'KNOWS|<WORKS_WITH|IS_MANAGER_OF>', 
        'distance','lat','lon'
    ) YIELD path, weight
    

    以关系属性名称作为成本函数运行 A*

    apoc.algo.aStar(
      startNode, endNode, 'KNOWS|<WORKS_WITH|IS_MANAGER_OF>',
      {weight:'dist',default:10, x:'lon',y:'lat'}
    ) YIELD path, weight
    

    【讨论】:

    • 这太棒了,而且比预期的要容易得多。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多