Skip to content

vtfanta/OptimalTrainControl.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OptimalTrainControl

Dev Build Status Coverage

Installation

The package can be installed by entering

using Pkg; Pkg.add(url="https://github.com/vtfanta/OptimalTrainControl.jl")

to the Julia REPL.

Time-Optimal Train Control (TOTC) Example

Consider the problem of finding the time-optimal speed profile on a flat track of length $3\ \mathrm{km}$. At first we need to define a Train and a Track which will form the basis of our problem.

Each Train has upper and lower limit of its traction capabilites (specified as a Julia function of speed) and coefficients of a quadratic representing the speed-dependent train's mechanical and aerodynamical resistance.

train = Train(
    v ->  3/v,
    v -> -3/v,
    (6.75e-3, 0., 5e-5)
)

The only required argument for a Track is its length, however one can also specify its altitude and points of changing track grade.

track = Track(
    length = 3e3,
    altitude = 100.,
    x_gradient = [0.0, 1e3, 1.7e3],
    gradient = [2e-3, 0., 1e-3]
)

We are now ready to construct a time-optimal train control problem and solve it!

prob = TOTCProblem(train, track)
sol = solve(prob)
plot(sol)
plot!(twinx(), track)

TOTC Solution

The colours are showing the control mode which is currently engaged (green for maximum traction, red for maximum braking).

Energy-efficient Train Control Problem Example

In contrast to the previous example, energy-efficient train control (EETC) problems minimize the criterion

$$\mathrm{min}\ J=\mathrm{min} \int\limits_0^X \left( \frac{u+|u|}{2} + \rho\frac{u-|u|}{2} \right)\mathrm{d}x,$$

where $x$ is the distance along the track, $u$ is traction effort of the train and $\rho\in[0,1]$ is the proportion of mechanical energy recovered during braking. The problem is to minimize the functional $J$ while also satisfying the requirement of the total journey time.

Let's construct a $5\ \mathrm{km}$ flat track,

track = Track(
    length = 5e3
)

and a train (the fourth argument is $\rho$):

train = Train(
    v -> 1/v,
    v -> -1/v,
    (1e-2, 0., 1.5e-5),
    0.6
)

Suppose, we want to arrive at our destination after $T=800\ \mathrm{s}$ and so we plug this requirement into our definition of an EETC problem:

T = 800.
prob = EETCProblem(T, train, track)
sol = solve(prob)
plot(sol)

EETC Solution

The colours specify the currently engaged control mode (green for maximum traction, blue for cruising, gray for coasting and red for maximum braking).

One can also inspect the optimal control signal throughout the trip:

plot(sol.control, 0, track.length)

Optimal control

About

Energy efficient speed profile planning for trains and other rail vehicles.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages