gpt4 book ai didi

neo4j - 在 Neo4j 1.8 及更高版本上使用 Java 嵌入式 API 在 AStar 遍历上设置初始 BranchState

转载 作者:行者123 更新时间:2023-12-02 03:54:04 25 4
gpt4 key购买 nike

我正在尝试使用 Java 嵌入式 API 在 Neo4J 中实现有状态的 AStar 遍历。也就是说,我想传递一个对象,该对象包含从分支收集的一些上下文信息,以便在我到达图中的某个节点后用于选择/修剪向前的关系。 PathExpander.expand() 方法将检查状态对象中包含的遍历上下文,并决定哪些路径符合扩展条件以及扩展顺序。我这样做是为了防止非法的多节点子路径(实际上是转弯限制)被视为返回的最佳路径的一部分。此技术适用于 Dijkstra 遍历,如 GraphAlgoFactory具有生成 dijkstra 的工厂方法,支持通过 InitialStateFactory 设置初始状态参数:

dijkstra(PathExpander expander, InitialStateFactory stateFactory, String relationshipPropertyRepresentingCost) 
dijkstra(PathExpander expander, InitialStateFactory stateFactory, CostEvaluator<Double> costEvaluator)

太棒了。但是,我找不到相应的工厂方法来设置 AStar 遍历中的初始状态,唯一的选择是:

aStar(PathExpander expander, CostEvaluator<Double> lengthEvaluator, EstimateEvaluator<Double> estimateEvaluator) 
aStar(RelationshipExpander expander, CostEvaluator<Double> lengthEvaluator, EstimateEvaluator<Double> estimateEvaluator)

可以预见的是,我对 PathFinderfindSinglePath() 调用实例过早地结束了:

java.lang.UnsupportedOperationException: Branch state disabled, pass in an initial state to enable it
at org.neo4j.kernel.Traversal$1.getState(Traversal.java:100)[neo4j-kernel-1.8.jar:1.8]

那么如何在没有 InitialStateFactory 的情况下“在初始状态下通过” AStar算法工厂方法的参数?查看 1.8 后的 API 文档似乎也没有(明显的)答案。

或者,是否有更好的方法来确保一组“非法”多节点子路径永远不会出现在从 Dijkstra 或 AStar PathFinders 上调用的 findSinglePath() 返回的最佳路径中?

最佳答案

因此,Dijkstra 算法是使用遍历框架在 Neo4j 中实现的,而 A* 是自定义实现。然而,有一个 TraversalAStar 类在遍历框架之上实现了 A*。该类没有构造函数让您通过 https://github.com/neo4j/neo4j/pull/604 的东西传递初始分支状态。地址。

与 GraphAlgoFactory 提供的比较和优化 TraversalAStar 相比,人们很少关注它,但它应该提供您所追求的功能……一旦它被合并到其中。

关于neo4j - 在 Neo4j 1.8 及更高版本上使用 Java 嵌入式 API 在 AStar 遍历上设置初始 BranchState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com