Microsoft GraphEngine LIKQ запрос

Описание

У меня есть простой ориентированный граф, который имеет два конечных узла C,E (приемники) и один начальный узел A. Используемая мной среда - это GraphEngine от Microsoft.

GraphGeneration

Мой файл TSL выглядит так: Узел графа состоит из NodeItem, который является просто контейнером со свойством Id и Name. Узел имеет OutEdges для исходящих отношений и InEdges для входящих выпусков.

Файл TSL

Я знаю, что есть несколько алгоритмов графов, таких как A*, Dijkstra, Floyd Warshall, Bellman–Ford и т. Д.... Каждый из них решает очень специфические задачи обхода. Все идет нормально. Но теперь я хочу узнать, как пройти этот граф с LIKQ. LIKQ - это язык запросов на знание языка. Он позволяет пользователям запрашивать, искать и использовать знания в режиме реального времени с помощью обхода графа и лямбда-выражений.

Вопрос

Что я хочу сделать: Найти все кратчайшие пути между узлами 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 ответ

В настоящее время это немного сложно, алгоритм поиска разветвления не гарантирует порядок пропущенных шагов обхода, но более короткие пути планируются практически раньше. Так что если вы положите Action.Continue & Action.Return на каждом шаге сделайте глобальную переменную-флаг, чтобы при достижении цели переключать этот бит так, чтобы все остальные пути чтения могли его прекратить, тогда вы, вероятно, получите кратчайший путь.

Другие вопросы по тегам