Thanks Michael I will study the info you sent.

On Thursday, June 2, 2016 at 2:14:14 PM UTC-7, John Fry wrote:
>
>
> Hi All,
>
> when creating a custom getCost evaluator for an a* traversal which value 
> is actually accumulated to make the path selection.
> In the examples/docs below it isn't clear to me how 'lengthEvaluator' or 
> 'estimateEvaluator' are used.
>
> I believe that lengthEvaluator specifies the relationship to use and the 
> estimateEvaluator is used to compute the cost from the relationship's 
> start/end nodes.
>
> I also think that for a potential path being evaluated e.g:
> a-->--b-->--c-->--d-->--e-->--f 
> that the estimateEvaluator will evaluate a cost in turn for a-b; b-c; c-d; 
> d-e; e-f in turn. Then the astar function will return the path with the 
> smallest accumulation of each of these cost evaluations.
>
> Is this correct?
>
> My goal is to specify my own cost function where the cost per relationship 
> is computed as a function every relationship's start/end node's in and out 
> degree plus some other properties the relationship has.  The total cost per 
> path then needs to be the sum of these individual costs and i need the n 
> most cheapest paths returned. 
>
> I will post the code as an example once I have this figured out.
>
> Thanks for any guidance, John.
>
>
>
>
>
>
> public static PathFinder 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphalgo/PathFinder.html><WeightedPath
>  
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphalgo/WeightedPath.html>>
>  aStar(PathExpander 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/PathExpander.html>
>  expander,
>                                              CostEvaluator 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphalgo/CostEvaluator.html><Double
>  
> <http://docs.oracle.com/javase/8/docs/api/java/lang/Double.html?is-external=true>>
>  lengthEvaluator,
>                                              EstimateEvaluator 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphalgo/EstimateEvaluator.html><Double
>  
> <http://docs.oracle.com/javase/8/docs/api/java/lang/Double.html?is-external=true>>
>  estimateEvaluator)
>
> Returns an PathFinder 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphalgo/PathFinder.html>
>  which 
> uses the A* algorithm to find the cheapest path between two nodes. The 
> definition of "cheap" is the lowest possible cost to get from the start 
> node to the end node, where the cost is returned from lengthEvaluator and 
> estimateEvaluator. These returned paths cannot contain loops (i.e. a node 
> cannot occur more than once in any returned path). See 
> http://en.wikipedia.org/wiki/A*_search_algorithm for more information.
> Parameters:expander - the PathExpander 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/PathExpander.html>
>  to 
> use for expanding Relationship 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/Relationship.html>s
>  
> for each Path 
> <http://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/Path.html>
> .lengthEvaluator - evaluator that can return the cost represented by each 
> relationship the algorithm traverses.estimateEvaluator - evaluator that 
> returns an (optimistic) estimation of the cost to get from the current node 
> (in the traversal) to the end node.Returns:an algorithm which finds the 
> cheapest path between two nodes using the A* algorithm.
>
> Node nodeA = createNode( "name", "A", "x", 0d, "y", 0d );Node nodeB = 
> createNode( "name", "B", "x", 7d, "y", 0d );Node nodeC = createNode( "name", 
> "C", "x", 2d, "y", 1d );Relationship relAB = createRelationship( nodeA, 
> nodeC, "length", 2d );Relationship relBC = createRelationship( nodeC, nodeB, 
> "length", 3d );Relationship relAC = createRelationship( nodeA, nodeB, 
> "length", 10d );
> EstimateEvaluator<Double> estimateEvaluator = new EstimateEvaluator<Double>()
> {
>     @Override
>     public Double getCost( final Node node, final Node goal )
>     {
>         double dx = (Double) node.getProperty( "x" ) - (Double) 
> goal.getProperty( "x" );
>         double dy = (Double) node.getProperty( "y" ) - (Double) 
> goal.getProperty( "y" );
>         double result = Math.sqrt( Math.pow( dx, 2 ) + Math.pow( dy, 2 ) );
>         return result;
>     }
> };PathFinder<WeightedPath> astar = GraphAlgoFactory.aStar(
>         PathExpanders.allTypesAndDirections(),
>         CommonEvaluators.doubleCostEvaluator( "length" ), estimateEvaluator 
> );WeightedPath path = astar.findSinglePath( nodeA, nodeB );
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to