use of org.neo4j.graphdb.GraphDatabaseService in project neo4j by neo4j.
the class TraversalAStar method findPaths.
private Iterable<WeightedPath> findPaths(Node start, Node end, boolean multiplePaths) {
PathInterest interest;
if (multiplePaths) {
interest = stopAfterLowestWeight ? PathInterestFactory.allShortest() : PathInterestFactory.all();
} else {
interest = PathInterestFactory.single();
}
GraphDatabaseService db = start.getGraphDatabase();
TraversalDescription traversalDescription = db.traversalDescription().uniqueness(Uniqueness.NONE).expand(expander, initialState);
lastTraverser = traversalDescription.order(new SelectorFactory(end, interest)).evaluator(includeWhereEndNodeIs(end)).traverse(start);
return new Iterable<WeightedPath>() {
@Override
public Iterator<WeightedPath> iterator() {
return new WeightedPathIterator(lastTraverser.iterator(), costEvaluator, stopAfterLowestWeight);
}
};
}
use of org.neo4j.graphdb.GraphDatabaseService in project neo4j by neo4j.
the class TraversalShortestPath method instantiateTraverser.
@Override
protected Traverser instantiateTraverser(Node start, Node end) {
GraphDatabaseService db = start.getGraphDatabase();
TraversalDescription sideBase = db.traversalDescription().breadthFirst().uniqueness(NODE_PATH);
return db.bidirectionalTraversalDescription().mirroredSides(sideBase.expand(expander)).sideSelector(LEVEL_STOP_DESCENT_ON_RESULT, maxDepth).collisionEvaluator(toDepth(maxDepth)).traverse(start, end);
}
use of org.neo4j.graphdb.GraphDatabaseService in project neo4j by neo4j.
the class AStarPerformanceIT method somePerformanceTesting.
@Test
public void somePerformanceTesting() throws Exception {
// GIVEN
int numberOfNodes = 200000;
GeoDataGenerator generator = new GeoDataGenerator(numberOfNodes, 5d, 1000, 1000);
generator.generate(directory);
// WHEN
long[][] points = new long[][] { new long[] { 9415, 158154 }, new long[] { 89237, 192863 }, new long[] { 68072, 150484 }, new long[] { 186309, 194495 }, new long[] { 152097, 99289 }, new long[] { 92150, 161182 }, new long[] { 188446, 115873 }, new long[] { 85033, 7772 }, new long[] { 291, 86707 }, new long[] { 188345, 158468 } };
GraphDatabaseService db = new TestGraphDatabaseFactory().newEmbeddedDatabase(directory.getAbsoluteFile());
PathFinder<WeightedPath> algo = aStar(allTypesAndDirections(), doubleCostEvaluator("weight", 0), GeoDataGenerator.estimateEvaluator());
for (int i = 0; i < 10; i++) {
System.out.println("----- " + i);
for (long[] p : points) {
try (Transaction tx = db.beginTx()) {
Node start = db.getNodeById(p[0]);
Node end = db.getNodeById(p[1]);
long time = currentTimeMillis();
WeightedPath path = algo.findSinglePath(start, end);
time = currentTimeMillis() - time;
System.out.println("time: " + time + ", len:" + path.length() + ", weight:" + path.weight());
tx.success();
}
}
}
// THEN
db.shutdown();
}
use of org.neo4j.graphdb.GraphDatabaseService in project neo4j by neo4j.
the class AllPaths method instantiateTraverser.
@Override
protected Traverser instantiateTraverser(Node start, Node end) {
// // Legacy single-directional traversal (for reference or something)
// return traversal().expand( expander ).depthFirst().uniqueness( uniqueness() )
// .evaluator( toDepth( maxDepth ) ).evaluator( Evaluators.includeWhereEndNodeIs( end ) )
// .traverse( start );
// Bidirectional traversal
GraphDatabaseService db = start.getGraphDatabase();
TraversalDescription base = db.traversalDescription().depthFirst().uniqueness(uniqueness());
return db.bidirectionalTraversalDescription().startSide(base.expand(expander).evaluator(toDepth(maxDepth / 2))).endSide(base.expand(expander.reverse()).evaluator(toDepth(maxDepth - maxDepth / 2))).traverse(start, end);
}
use of org.neo4j.graphdb.GraphDatabaseService in project neo4j by neo4j.
the class DijkstraBidirectional method traverser.
private Traverser traverser(Node start, final Node end, PathInterest interest) {
final MutableDouble shortestSoFar = new MutableDouble(Double.MAX_VALUE);
final MutableDouble startSideShortest = new MutableDouble(0);
final MutableDouble endSideShortest = new MutableDouble(0);
PathExpander dijkstraExpander = new DijkstraBidirectionalPathExpander(expander, shortestSoFar, true, startSideShortest, endSideShortest, epsilon);
GraphDatabaseService db = start.getGraphDatabase();
TraversalDescription side = db.traversalDescription().expand(dijkstraExpander, stateFactory).order(new DijkstraSelectorFactory(interest, costEvaluator)).evaluator(new DijkstraBidirectionalEvaluator(costEvaluator)).uniqueness(Uniqueness.NODE_PATH);
TraversalDescription startSide = side;
TraversalDescription endSide = side.reverse();
BidirectionalTraversalDescription traversal = db.bidirectionalTraversalDescription().startSide(startSide).endSide(endSide).collisionEvaluator(Evaluators.all()).collisionPolicy(new BranchCollisionPolicy() {
@Override
public BranchCollisionDetector create(Evaluator evaluator, Predicate<Path> pathPredicate) {
return new DijkstraBranchCollisionDetector(evaluator, costEvaluator, shortestSoFar, epsilon, pathPredicate);
}
});
lastTraverser = traversal.traverse(start, end);
return lastTraverser;
}
Aggregations