【问题标题】:Neo4j dijkstra with pre calculated cost具有预先计算成本的 Neo4j dijkstra
【发布时间】:2018-05-24 14:48:53
【问题描述】:

我正在构建一个类似 app 的方向,并且我使用 Neo4j 作为我的数据库 我一直在努力寻找一个可以帮助我在 Neo4j 中做我想做的事情的解决方案。我搜索了很多,但找不到我需要的东西。

用户可以选择起点和终点,并按照他希望生成路径的方式进行定制。路径(最短的)将根据距离、污染和噪声生成。用户将能够为这三个选项分配百分比。 举个例子: 计算最短路径的成本为:cost = (distance * 0.25) + (noise_level * 0.25) + (pollution_level * 0.5) 这意味着关系成本属性将始终是动态的。

我正在使用 apoc.algo.dijkstra 程序来帮助我。但 dijkstra 只允许我给出关系属性名称。有没有办法做到这一点? 两个节点之间的关系示例:

{ “intersectionNode”:25632284, “污染级别”:2, “intersection_distance”:0.0, “噪声级”:5, “成本”:0 }

我是 Neo4j 的新手,如果有任何帮助,我将不胜感激。很抱歉有任何英文错误。

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    你可以看看Memgraph,高性能的内存事务图数据库。 Memgraph 与 openCypherBolt 兼容。 (免责声明:我是联合创始人兼首席技术官)。 Memgraph 内置加权最短路径功能,其中总权重通过用户定义的 lambda 函数计算。对于您的情况并基于此数据集

    CREATE (n1 {id: 1}) CREATE (n2 {id: 2}) CREATE (n3 {id: 3}) CREATE (n4 {id: 4})
    CREATE (n1)-[:E {pollution_level: 1, distance: 1.0, noise_level: 5}]->(n2)
    CREATE (n1)-[:E {pollution_level: 2, distance: 2.0, noise_level: 4}]->(n3)
    CREATE (n2)-[:E {pollution_level: 3, distance: 2.0, noise_level: 3}]->(n4)
    CREATE (n3)-[:E {pollution_level: 4, distance: 1.0, noise_level: 2}]->(n4);
    

    相关的 Memgraph 查询将与此类似

      MATCH (a {id: 1})-[
                edges *wShortest
                    (e, n | (e.distance * 0.25) +
                    (e.noise_level * 0.25) +
                    (e.pollution_level * 0.5))
                total_weight
            ]-(b {id: 4})
      RETURN startNode(head(edges)).id +
             reduce(acc = "", edge IN edges | acc + " -> " + endNode(edge).id) AS hops,
             total_weight;
    

    结果如下。

    | hops      | total_weight |
    |-----------|--------------|
    |1 -> 2 -> 4| 4.75         |
    

    【讨论】:

      【解决方案2】:

      解决方法是:

      (1) 在每个相关关系中生成一个新的计算权重属性。

      (2) 使用计算出的权重属性运行您的 dijkstra 查询。

      (3) (可选)删除计算的重量属性。 (如果它们没有被删除,它们的值可能会随着时间的推移而失效,因此不应重复使用这些值。)

      【讨论】:

      • 嗨@cybersam。十分感谢。这如我所愿;)祝你有美好的一天!
      猜你喜欢
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多