Class AbstractRanker<V,​E>

  • All Implemented Interfaces:
    IterativeContext
    Direct Known Subclasses:
    BetweennessCentrality, RelativeAuthorityRanker, WeightedNIPaths

    public abstract class AbstractRanker<V,​E>
    extends IterativeProcess
    Abstract class for algorithms that rank nodes or edges by some "importance" metric. Provides a common set of services such as:
    • storing rank scores
    • getters and setters for rank scores
    • computing default edge weights
    • normalizing default or user-provided edge transition weights
    • normalizing rank scores
    • automatic cleanup of decorations
    • creation of Ranking list
    • print rankings in sorted order by rank

    By default, all rank scores are removed from the vertices (or edges) being ranked.

    • Field Detail

      • mGraph

        private Graph<V,​E> mGraph
      • mRankings

        private java.util.List<Ranking<?>> mRankings
      • mRemoveRankScoresOnFinalize

        private boolean mRemoveRankScoresOnFinalize
      • mRankNodes

        private boolean mRankNodes
      • mRankEdges

        private boolean mRankEdges
      • mNormalizeRankings

        private boolean mNormalizeRankings
      • vertexRankScores

        protected com.google.common.cache.LoadingCache<java.lang.Object,​java.util.Map<V,​java.lang.Number>> vertexRankScores
      • edgeRankScores

        protected com.google.common.cache.LoadingCache<java.lang.Object,​java.util.Map<E,​java.lang.Number>> edgeRankScores
      • edgeWeights

        private java.util.Map<E,​java.lang.Number> edgeWeights
    • Constructor Detail

      • AbstractRanker

        public AbstractRanker()
    • Method Detail

      • initialize

        protected void initialize​(Graph<V,​E> graph,
                                  boolean isNodeRanker,
                                  boolean isEdgeRanker)
      • getVertexRankScores

        public java.util.Map<java.lang.Object,​java.util.Map<V,​java.lang.Number>> getVertexRankScores()
        Returns:
        all rankScores
      • getEdgeRankScores

        public java.util.Map<java.lang.Object,​java.util.Map<E,​java.lang.Number>> getEdgeRankScores()
      • getVertexRankScores

        public java.util.Map<V,​java.lang.Number> getVertexRankScores​(java.lang.Object key)
        Parameters:
        key - the rank score key whose scores are to be retrieved
        Returns:
        the rank scores for the specified key
      • getEdgeRankScores

        public java.util.Map<E,​java.lang.Number> getEdgeRankScores​(java.lang.Object key)
      • getVertices

        protected java.util.Collection<V> getVertices()
      • getVertexCount

        protected int getVertexCount()
      • getGraph

        protected Graph<V,​E> getGraph()
      • isRankingNodes

        public boolean isRankingNodes()
        Returns:
        true if this ranker ranks nodes, and false otherwise.
      • isRankingEdges

        public boolean isRankingEdges()
        Returns:
        true if this ranker ranks edges, and false otherwise.
      • setRemoveRankScoresOnFinalize

        public void setRemoveRankScoresOnFinalize​(boolean removeRankScoresOnFinalize)
        Instructs the ranker whether or not it should remove the rank scores from the nodes (or edges) once the ranks have been computed.
        Parameters:
        removeRankScoresOnFinalize - true if the rank scores are to be removed, false otherwise
      • onFinalize

        protected void onFinalize​(java.lang.Object e)
      • getRankScoreKey

        public abstract java.lang.Object getRankScoreKey()
        The user datum key used to store the rank score.
        Returns:
        the key
      • getRankings

        public java.util.List<Ranking<?>> getRankings()
        Retrieves the list of ranking instances in descending sorted order by rank score If the algorithm is ranking edges, the instances will be of type EdgeRanking, otherwise if the algorithm is ranking nodes the instances will be of type NodeRanking
        Returns:
        the list of rankings
      • getRankScores

        public java.util.List<java.lang.Double> getRankScores​(int topKRankings)
        Return a list of the top k rank scores.
        Parameters:
        topKRankings - the value of k to use
        Returns:
        list of rank scores
      • getVertexRankScore

        public double getVertexRankScore​(V v)
        Given a node, returns the corresponding rank score. This is a default implementation of getRankScore which assumes the decorations are of type MutableDouble. This method only returns legal values if setRemoveRankScoresOnFinalize(false) was called prior to evaluate().
        Parameters:
        v - the node whose rank score is to be returned.
        Returns:
        the rank score value
      • getVertexRankScore

        public double getVertexRankScore​(V v,
                                         java.lang.Object key)
      • getEdgeRankScore

        public double getEdgeRankScore​(E e)
      • getEdgeRankScore

        public double getEdgeRankScore​(E e,
                                       java.lang.Object key)
      • setVertexRankScore

        protected void setVertexRankScore​(V v,
                                          double rankValue,
                                          java.lang.Object key)
      • setEdgeRankScore

        protected void setEdgeRankScore​(E e,
                                        double rankValue,
                                        java.lang.Object key)
      • setVertexRankScore

        protected void setVertexRankScore​(V v,
                                          double rankValue)
      • setEdgeRankScore

        protected void setEdgeRankScore​(E e,
                                        double rankValue)
      • removeVertexRankScore

        protected void removeVertexRankScore​(V v,
                                             java.lang.Object key)
      • removeEdgeRankScore

        protected void removeEdgeRankScore​(E e,
                                           java.lang.Object key)
      • removeVertexRankScore

        protected void removeVertexRankScore​(V v)
      • removeEdgeRankScore

        protected void removeEdgeRankScore​(E e)
      • getEdgeWeight

        protected double getEdgeWeight​(E e)
      • setEdgeWeight

        protected void setEdgeWeight​(E e,
                                     double weight)
      • setEdgeWeights

        public void setEdgeWeights​(java.util.Map<E,​java.lang.Number> edgeWeights)
      • getEdgeWeights

        public java.util.Map<E,​java.lang.Number> getEdgeWeights()
        Returns:
        the edgeWeights
      • assignDefaultEdgeTransitionWeights

        protected void assignDefaultEdgeTransitionWeights()
      • normalizeEdgeTransitionWeights

        protected void normalizeEdgeTransitionWeights()
      • normalizeRankings

        protected void normalizeRankings()
      • printRankings

        public void printRankings​(boolean verbose,
                                  boolean printScore)
        Print the rankings to standard out in descending order of rank score
        Parameters:
        verbose - if true, include information about the actual rank order as well as the original position of the vertex before it was ranked
        printScore - if true, include the actual value of the rank score
      • setNormalizeRankings

        public void setNormalizeRankings​(boolean normalizeRankings)
        Allows the user to specify whether or not s/he wants the rankings to be normalized. In some cases, this will have no effect since the algorithm doesn't allow normalization as an option
        Parameters:
        normalizeRankings - true iff the ranking are to be normalized