Microsoft GraphEngine LIKQ查询

时间:2017-03-11 18:47:17

标签: .net algorithm graph graphengine

描述

我有一个简单的有向图,它有两个结束节点C,E(接收器)和一个起始节点A.我正在使用的框架是Microsoft的GraphEngine

GraphGeneration

我的TSL文件如下所示:图形节点由 NodeItem 组成,它只是一个具有 Id Name 属性的容器。该节点具有用于传出关系的 OutEdges 和用于传入关联的 InEdges

TSL File

我知道有几种图形算法,如A *,Dijkstra,Floyd Warshall,Bellman-Ford等......它们每个都解决了非常具体的遍历问题。到现在为止还挺好。但现在我想学习如何使用LIKQ遍历此图表。 LIKQ是一种语言集成的知识查询语言。它允许用户通过图形遍历和lambda表达式实时查询,搜索和使用知识。

问题

我想做什么:找到节点A和C 节点A和E 之间的所有最短路径。 LIKQ有可能吗?

这是我到目前为止所得到的:

 List<PathDescriptor> paths = KnowledgeGraph.StartFrom(start)
            .FollowEdge("OutEdges")
            .VisitNode(_ => Action.Continue)
            .FollowEdge("OutEdges")
            .VisitNode(_ => Action.Continue)
            .FollowEdge("OutEdges")
            .VisitNode(_ => Action.Return)
            .ToList();

我可以从 A - B - D - E 遍历。但这是一个手动步骤。有没有机会让LIKQ决定如何从节点A开始并获得两条路径(到C和E)作为回报?

此外,我想知道BFS或DFS是否可以翻译成LIKQ?

VSDebug

希望有人可以为黑暗带来一些亮光(: 非常感谢你提前!

祝你好运, 菲尔

1 个答案:

答案 0 :(得分:2)

目前这有点棘手,扇出搜索算法并不能保证发出的遍历步骤的顺序,但实际上较早的路径确实会被调度。因此,如果您在每一步中放置Action.Continue & Action.Return,并创建一个全局标志变量,那么当您点击目标时,切换该位以便读取它的每个其他路径都可以停止,那么您将可能获取最短路径。