Class StaticLtmLoadingBushBase<B extends Bush>
- java.lang.Object
-
- org.goplanit.assignment.ltm.sltm.loading.StaticLtmNetworkLoading
-
- org.goplanit.assignment.ltm.sltm.loading.StaticLtmLoadingBushBase<B>
-
- Direct Known Subclasses:
StaticLtmLoadingBushConjugate
,StaticLtmLoadingBushRooted
public abstract class StaticLtmLoadingBushBase<B extends Bush> extends StaticLtmNetworkLoading
The bush based network loading scheme for sLTM - base class- Author:
- markr
-
-
Field Summary
-
Fields inherited from class org.goplanit.assignment.ltm.sltm.loading.StaticLtmNetworkLoading
convergenceAnalyser, flowAcceptanceGapFunction, inFlowOutflowData, networkLoadingFactorData, prevIterationFinalSolutionScheme, receivingFlowData, receivingFlowGapFunction, sendingFlowData, sendingFlowGapFunction, settings, solutionScheme, splittingRateData
-
-
Constructor Summary
Constructors Constructor Description StaticLtmLoadingBushBase(IdGroupingToken idToken, long assignmentId, StaticLtmSettings settings)
Constructor
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
activateEligibleSplittingRateTrackedNodes()
Initialise tracking of splitting rates and network flows on all nodes that are used by any currently active PAS.void
activateNodeTrackingFor(Pas newPas)
For each PAS we must be able to determine the network level flows along the segments, see computeSubPathSendingFlow().protected abstract BushFlowUpdateConsumer<B>
createBushFlowUpdateConsumer(boolean updateTurnAcceptedFlows, boolean updateSendingFlows, boolean updateOutflows)
TODO: Create factory class for thisprotected void
networkLoadingLinkSegmentSendingflowOutflowUpdate()
Conduct a network loading to compute updated current sending flow and outflow rates (without tracking turn flows).protected void
networkLoadingLinkSegmentSendingFlowUpdate()
Conduct a network loading to compute updated current sending flow rates (without tracking turn flows): Eq.protected org.apache.commons.collections4.map.MultiKeyMap<Object,Double>
networkLoadingTurnFlowUpdate()
Conduct a network loading to compute updated turn inflow rates u_ab: Eq.void
setBushes(B[] bushes)
The bushes to use when a loading update is requestedvoid
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)-
Methods inherited from class org.goplanit.assignment.ltm.sltm.loading.StaticLtmNetworkLoading
activateAllUsedNodeSplittingRates, activateNextExtension, getActivatedSolutionScheme, getCurrentFlowAcceptanceFactors, getCurrentInflowsPcuH, getCurrentOutflowsPcuH, getOdDemands, getSettings, getSplittingRateData, getSupportedMode, getTransportNetwork, getUsedNetworkLayer, initialiseInputs, isConverging, isIterativeSendingFlowUpdateActivated, isTrackAllNodeTurnFlows, performNodeModelUpdate, reset, resetIteration, stepFiveCheckNetworkLoadingConvergence, stepFourOutflowReceivingFlowUpdate, stepOneSplittingRatesUpdate, stepSixFinaliseForPersistence, stepThreeSplittingRateUpdate, stepTwoInflowSendingFlowUpdate, stepZeroIterationInitialisation, updatePotentiallyBlockingNodes, validateInputs
-
-
-
-
Constructor Detail
-
StaticLtmLoadingBushBase
public StaticLtmLoadingBushBase(IdGroupingToken idToken, long assignmentId, StaticLtmSettings settings)
Constructor- Parameters:
idToken
- to useassignmentId
- to usesettings
- to use
-
-
Method Detail
-
createBushFlowUpdateConsumer
protected abstract BushFlowUpdateConsumer<B> createBushFlowUpdateConsumer(boolean updateTurnAcceptedFlows, boolean updateSendingFlows, boolean updateOutflows)
TODO: Create factory class for thisFactory 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 consumerupdateSendingFlows
- flag indicating if the link sending flow are to be updated by this consumerupdateOutflows
- 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 classStaticLtmNetworkLoading
- 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
-
networkLoadingLinkSegmentSendingFlowUpdate
protected void networkLoadingLinkSegmentSendingFlowUpdate()
Conduct a network loading to compute updated current sending flow rates (without tracking turn flows): Eq. (3)-(4) in paper- Specified by:
networkLoadingLinkSegmentSendingFlowUpdate
in classStaticLtmNetworkLoading
-
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 classStaticLtmNetworkLoading
-
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 classStaticLtmNetworkLoading
-
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
-
-