Replies: 3 comments 2 replies
-
Here's how I'd like things to work. First, some changes:
The process for standalone train simulation goes as follows:
The process for many train simulations would go as follows:
|
Beta Was this translation helpful? Give feedback.
2 replies
-
The way allowances currently works is this:
|
Beta Was this translation helpful? Give feedback.
0 replies
-
This is legacy |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This discussion is meant to explain how speed controllers work, and why we want to use speed envelopes instead.
Here is how things currently work:
TrainState.simulatePhase
callstrainSchedule.trainDecisionMaker.simulatePhase(train, sim)
TrainDecisionMaker.simulatePhase
callstrainState.currentPhaseState.simulate(train, trainState)
SignalNavigatePhase.simulate
:trainState.evolveStateUntilPosition(sim, nextInteraction.position)
TrainState.step(locationChange, timeStep, distanceStep)
are appended to a location changeTrainState.step
callsTrainPhysicsIntegrator.nextStep
TrainPhysicsIntegrator.nextStep
callsiterateFindNextAction
via a callback given fromTrainState.step
iterateFindNextAction
callsfindActionToReachTargetSpeedAtPosition
findActionToReachTargetSpeedAtPosition
callstrainSchedule.trainDecisionMaker.getActiveSpeedControllers(isLate)
getActiveSpeedControllers
usestrainState.trainSchedule.speedInstructions
and getsspeedInstructions.maxSpeedControllers
orspeedInstructions.targetSpeedControllers
depending on isLate, and then adds dynamic speed controllers, which depend on the phaseBeta Was this translation helpful? Give feedback.
All reactions