Class StaticLtmLoadingBushBase<B extends Bush>

    • Constructor Detail

      • StaticLtmLoadingBushBase

        public StaticLtmLoadingBushBase​(IdGroupingToken idToken,
                                        long assignmentId,
                                        StaticLtmSettings settings)
        Constructor
        Parameters:
        idToken - to use
        assignmentId - to use
        settings - to use
    • Method Detail

      • createBushFlowUpdateConsumer

        protected abstract BushFlowUpdateConsumer<B> createBushFlowUpdateConsumer​(boolean updateTurnAcceptedFlows,
                                                                                  boolean updateSendingFlows,
                                                                                  boolean updateOutflows)
        TODO: Create factory class for this

        Factory method to create the right flow update consumer to use when conducting a bush based flow update. We either create one that updates turn accepted flows (and possibly also sending flows), or one that only updates (network wide) link sending flows and/or link outflows. The latter is to be used for initialisation/finalisation purposes only. The former is the one used during the iterative loading procedure.

        Parameters:
        updateTurnAcceptedFlows - flag indicating if the turn accepted flows are to be updated by this consumer
        updateSendingFlows - flag indicating if the link sending flow are to be updated by this consumer
        updateOutflows - flag indicating if the link outflows are to be updated by this consumer
        Returns:
        created flow update consumer
      • networkLoadingTurnFlowUpdate

        protected org.apache.commons.collections4.map.MultiKeyMap<Object,​Double> networkLoadingTurnFlowUpdate()
        Conduct a network loading to compute updated turn inflow rates u_ab: Eq. (3)-(4) in paper. We only consider turns on nodes that are potentially blocking to reduce computational overhead.
        Specified by:
        networkLoadingTurnFlowUpdate in class StaticLtmNetworkLoading
        Returns:
        acceptedTurnFlows (on potentially blocking nodes) where key comprises a combined hash of entry and exit edge segment ids and value is the accepted turn flow v_ab
      • networkLoadingLinkSegmentSendingflowOutflowUpdate

        protected void networkLoadingLinkSegmentSendingflowOutflowUpdate()
        Conduct a network loading to compute updated current sending flow and outflow rates (without tracking turn flows). Used to finalise a loading after convergence to ensure consistency in flows that might be compromised during local updates
        Specified by:
        networkLoadingLinkSegmentSendingflowOutflowUpdate in class StaticLtmNetworkLoading
      • activateEligibleSplittingRateTrackedNodes

        protected void activateEligibleSplittingRateTrackedNodes()
        Initialise tracking of splitting rates and network flows on all nodes that are used by any currently active PAS. This way we are able to ascertain how much total network flow runs through each PAS which in turn is used to determine how much flow we can shift between segments.
        Specified by:
        activateEligibleSplittingRateTrackedNodes in class StaticLtmNetworkLoading
      • setBushes

        public void setBushes​(B[] bushes)
        The bushes to use when a loading update is requested
        Parameters:
        bushes - to use
      • setPasManager

        public void setPasManager​(PasManager pasManager)
        The PasManager to use when we must initialise the tracked network nodes (namely all nodes that are part of a PAS, since we need to know the network flow that passes through them)
        Parameters:
        pasManager - to use
      • activateNodeTrackingFor

        public void activateNodeTrackingFor​(Pas newPas)
        For each PAS we must be able to determine the network level flows along the segments, see computeSubPathSendingFlow(). This requires knowing the network level splitting rates on the network level as well as the sending flows and acceptance factors, otherwise we cannot determine this. Therefore, for each newly identified PAS we activate node tracking for all (eligible) nodes along the segments of this PAS, if not already done so
        Parameters:
        newPas - to activate nodes on segments for