Class StaticLtmLoadingBush
- java.lang.Object
-
- org.goplanit.assignment.ltm.sltm.loading.StaticLtmNetworkLoading
-
- org.goplanit.assignment.ltm.sltm.loading.StaticLtmLoadingBush
-
public class StaticLtmLoadingBush extends StaticLtmNetworkLoading
The bush based network loading scheme for sLTM- 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 StaticLtmLoadingBush(IdGroupingToken idToken, long assignmentId, StaticLtmSettings settings)
Constructor
-
Method Summary
All Methods Instance 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, seecomputeSubPathSendingFlow(DirectedVertex, DirectedVertex, EdgeSegment[])
.double
computeSubPathSendingFlow(DirectedVertex startVertex, DirectedVertex endVertex, EdgeSegment[] subPathArray)
Determine the sending flow between origin,destination vertex using the subpath given by the subPathArray in order from start to finish.protected void
networkLoadingLinkSegmentInflowUpdate(double[] linkSegmentFlowArrayToFill)
Conduct a network loading to compute updated inflow rates (without tracking turn flows): Eq.protected Map<Integer,Double>
networkLoadingTurnFlowUpdate()
Conduct a network loading to compute updated turn inflow rates u_ab: Eq.void
setBushes(Bush[] originBushes)
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, populateForPersistence, reset, resetIteration, stepFiveCheckNetworkLoadingConvergence, stepFourOutflowReceivingFlowUpdate, stepOneSplittingRatesUpdate, stepThreeSplittingRateUpdate, stepTwoInflowSendingFlowUpdate, stepZeroIterationInitialisation, updatePotentiallyBlockingNodes, validateInputs
-
-
-
-
Constructor Detail
-
StaticLtmLoadingBush
public StaticLtmLoadingBush(IdGroupingToken idToken, long assignmentId, StaticLtmSettings settings)
Constructor- Parameters:
idToken
- to useassignmentId
- to usesettings
- to use
-
-
Method Detail
-
networkLoadingTurnFlowUpdate
protected Map<Integer,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
-
networkLoadingLinkSegmentInflowUpdate
protected void networkLoadingLinkSegmentInflowUpdate(double[] linkSegmentFlowArrayToFill)
Conduct a network loading to compute updated inflow rates (without tracking turn flows): Eq. (3)-(4) in paper- Specified by:
networkLoadingLinkSegmentInflowUpdate
in classStaticLtmNetworkLoading
- Parameters:
linkSegmentFlowArrayToFill
- the inflows (u_a) to update
-
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
-
computeSubPathSendingFlow
public double computeSubPathSendingFlow(DirectedVertex startVertex, DirectedVertex endVertex, EdgeSegment[] subPathArray)
Determine the sending flow between origin,destination vertex using the subpath given by the subPathArray in order from start to finish. We utilise the initial sending flow on the first segment as the base flow which is then followed along the subpath through the network splitting rates up to the final link segment- Parameters:
startVertex
- to useendVertex
- to usesubPathArray
- to extract path from- Returns:
- sendingFlowPcuH between start and end vertex following the sub-path
-
setBushes
public void setBushes(Bush[] originBushes)
The bushes to use when a loading update is requested- Parameters:
originBushes
- 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, seecomputeSubPathSendingFlow(DirectedVertex, DirectedVertex, EdgeSegment[])
. 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
-
-