java.lang.Object
org.jgrapht.alg.shortestpath.BaseMultiObjectiveShortestPathAlgorithm<V,E>
org.jgrapht.alg.shortestpath.MartinShortestPath<V,E>
- Type Parameters:
V
- the vertex typeE
- the edge type
- All Implemented Interfaces:
MultiObjectiveShortestPathAlgorithm<V,
E>
Martin's algorithm for the multi-objective shortest paths problem.
Martin's label setting algorithm is a multiple objective extension of Dijkstra's algorithm, where the minimum operator is replaced by a dominance test. It computes a maximal complete set of efficient paths when all the cost values are non-negative.
Note that the multi-objective shortest path problem is a well-known NP-hard problem.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate class
A node label.private class
Lexicographic comparator of two node labels.Nested classes/interfaces inherited from interface org.jgrapht.alg.interfaces.MultiObjectiveShortestPathAlgorithm
MultiObjectiveShortestPathAlgorithm.MultiObjectiveSingleSourcePaths<V,
E> -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final org.jheaps.Heap
<MartinShortestPath<V, E>.Label> private final Map
<V, LinkedList<MartinShortestPath<V, E>.Label>> private final int
Fields inherited from class org.jgrapht.alg.shortestpath.BaseMultiObjectiveShortestPathAlgorithm
graph, GRAPH_MUST_CONTAIN_THE_SINK_VERTEX, GRAPH_MUST_CONTAIN_THE_SOURCE_VERTEX
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuildPaths
(V source) Build the actual paths from the final labels of each node.private static boolean
dominates
(double[] a, double[] b) Return whether a vector dominates another.Compute all shortest paths starting from a single source vertex.Get a shortest path from a source vertex to a sink vertex.private void
runAlgorithm
(V source) Execute the main algorithmprivate static double[]
sum
(double[] a, double[] b) Compute the sum of two vectorsprivate int
validateEdgeWeightFunction
(Function<E, double[]> edgeWeightFunction) Check the validity of the edge weight functionMethods inherited from class org.jgrapht.alg.shortestpath.BaseMultiObjectiveShortestPathAlgorithm
createEmptyPath
-
Field Details
-
edgeWeightFunction
-
objectives
private final int objectives -
nodeLabels
-
heap
-
-
Constructor Details
-
MartinShortestPath
Create a new shortest path algorithm- Parameters:
graph
- the input graphedgeWeightFunction
- the edge weight function
-
-
Method Details
-
getPaths
Description copied from interface:MultiObjectiveShortestPathAlgorithm
Get a shortest path from a source vertex to a sink vertex.- Parameters:
source
- the source vertexsink
- the target vertex- Returns:
- a shortest path or null if no path exists
-
getPaths
Description copied from interface:MultiObjectiveShortestPathAlgorithm
Compute all shortest paths starting from a single source vertex.- Specified by:
getPaths
in interfaceMultiObjectiveShortestPathAlgorithm<V,
E> - Overrides:
getPaths
in classBaseMultiObjectiveShortestPathAlgorithm<V,
E> - Parameters:
source
- the source vertex- Returns:
- the shortest paths
-
runAlgorithm
Execute the main algorithm -
buildPaths
Build the actual paths from the final labels of each node.- Parameters:
source
- the source vertex- Returns:
- the paths
-
sum
private static double[] sum(double[] a, double[] b) Compute the sum of two vectors- Parameters:
a
- the first vectorb
- the second vector- Returns:
- the sum
-
dominates
private static boolean dominates(double[] a, double[] b) Return whether a vector dominates another.- Parameters:
a
- the first vectorb
- the second vector- Returns:
- true if the first vector dominates the second
-
validateEdgeWeightFunction
Check the validity of the edge weight function- Parameters:
edgeWeightFunction
- the edge weight function- Returns:
- the number of dimensions
-