2013-11-27 4 views
0

Я хочу найти кратчайший путь в ориентированном ациклическом графе с neo4j. У меня есть график, который выглядит примерно так: enter image description hereA * поиск в neo4j

Я хочу найти путь, начиная с Root до Layer 3. На каждом уровне у меня есть другой набор свойств, и я могу рассчитать вес, используя эти свойства и пользовательский ввод. Мне нужно найти все кратчайшие пути с минимальным динамическим весом, используя A * или другой алгоритм поиска (возможно иметь несколько путей с равными весами). Возможно ли это с neo4j и cypher или гремлин?

Я не хочу использовать встроенную версию, потому что мой проект написан на python, поэтому я не могу использовать java-библиотеку, которая, как я знаю, может это сделать.

+0

Если его DAG, не существует ли один путь между любыми двумя узлами? A * кажется излишним, однако он реализован; простая DFS (отсечение на желаемом уровне) будет выполнять эту работу. –

+0

Можно ли использовать гремлин или (лучше) cypher? – Lazin

+0

Я нашел это - http://docs.neo4j.org/chunked/snapshot/query-match.html#_shortest_path, это похоже на ответ на мой вопрос. – Lazin

ответ

0

На данный момент Cypher не позволяет выполнять функцию, например. ваша стоимость функция. Добавление этой функции должно решаться очень осторожно, так как инъекционный исполняемый код на языке запросов имеет некоторые проблемы с безопасностью.

Это то, что вы можете сделать сейчас: создать unmanaged extension на сервер Neo4j. Внутри вашего неуправляемого расширения вы используете предоставленный graph algorithms. Используя параметр JAX-RS, вы предоставляете данные, чтобы идентифицировать начальный и конечный узлы вашего обхода и позволить графическим файлам выполнять грязную работу.

Возможно, вы захотите взглянуть на https://github.com/sarmbruster/unmanaged-extension-archetype, это минималистический образец проекта с использованием gradle в качестве системы сборки.

Однако набросанная идея включала Java-кодирование для части сервера. На стороне клиента вы можете использовать любой стек, который вам нравится.

+0

стоимостные выражения не являются опасными. :) –

Смежные вопросы