Planning Public Transportation with Raku

Railways

by Arne Sommer

Railways

[159.5.2] Published 15. December 2021. (Updated 2. January 2022)

[ Introduction | Oslo Metro | Oslo Tram | Bergen | Misc. ]
[ Misc. Intro | Lisboa | Railways | Reindeer Expressed | Intervals NEW ]

The «networkplanner» program was meant for short routes with short intervals (i.e. frequent departues). But it can it be used on longer routes, as e.g. intercity trains. The normal summary (with minutes past the hour) does not work with an interval of 60 minutes or more, but we can work around that.

Oslo - Göteborg

We can illustrate this with the trains between Oslo (in Norway) and Göteborg (in Sweden), with a very simplified (and unrealistic) stop pattern and travel times:

File: railways/R20.def
#
# R20 Oslo - Göteborg
# --------------------------------------
NT001 17    17:20 Oslo S
NT002 B:22  A:21  Ski
NT003 B:21  A:45  Moss
NT004 B:45  A:90  Halden
ST501 1:90  1     Göteborg C

The platform IDs are generally incorrect. Platform 17 at Oslo S is correct for cercain trains, as is platform 1 in Göteborg.

Let us have a go at a train every third hour (180 minutes):

File: railways/R20.setup
## Networkplanner ##

route add R20 file:R20.def interval:180

summary

vehicles R20-vehicles.def
File: railways/R20-vehicles.def
=2000
R20 D OsloS 20
R20 U GötbC 20

The summary is not possible as the interval is 60 or more, and the program will tell you so:

R20: Summary not possible

The vehicle part looks like this:

	      2001  2002  2003  2004
-------------------------------------
OsloS	dep   0000  0300  0600  0900 
GötbC	arr   0258  0558  0858  1158 
GötbC	dep   0600  0900  1200  1500 
OsloS	arr   0856  1156  1456  1756 
OsloS	dep   1200  1500  1800  2100 

2000: Number of vehicles: 4
---------------------------------------
Total number of vehicles: 4

Let us go overboard, and have an interval of 45 minutes:

File: railways/R20b.setup
## Networkplanner ##

route add R20 file:R20.def interval:45

summary

vehicles R20-vehicles.def

The summary does not cope with different departure times for the second hourm so it is pretty useless. Note that the first column nicely shows off the hour part of the accumulated travel time.

Route R20: Oslo S - Göteborg C
----------------------------------------------------------------
  00  | 00  45  30  15  Oslo S [S]
  22  | 22  07  52  37  Ski [B]
  43  | 43  28  13  58  Moss [B]
1:28  | 28  13  58  43  Halden [B]
2:58  | 58  43  28  13  Göteborg C [1]

Route R20: Göteborg C - Oslo S
----------------------------------------------------------------
  00  | 00  45  30  15  Göteborg C [1]
1:30  | 30  15  00  45  Halden [A]
2:15  | 15  00  45  30  Moss [A]
2:36  | 36  21  06  51  Ski [A]
2:56  | 56  41  26  11  Oslo S [S]

The vehicle part:

	      2001  2002  2003  2004  2005  2006  2007  2008  2009  2010
-------------------------------------------------------------------------
OsloS	dep   0000  0045  0130  0215  0300  0345  0430  0515  0600  0645 
GötbC	arr   0258  0343  0428  0513  0558  0643  0728  0813  0858  0943 
GötbC	dep   0345  0430  0515  0600  0645  0730  0815  0900  0945  1030 
OsloS	arr   0641  0726  0811  0856  0941  1026  1111  1156  1241  1326 
OsloS	dep   0730  0815  0900  0945  1030  1115  1200  1245  1330  1415 

2000: Number of vehicles: 10
---------------------------------------
Total number of vehicles: 10

Oslo - Hamburg

Night trains are on the rebound, after some years with decline due to competition from low cost airlines. Night trains between Oslo (in Norway) and Hamburg (in Germany) is a possibility, eventually.

(See e.g. Kan vi snart sove oss til kontinentet?; in Norwegian.)

The travel time is estimated to be 12 hours, or 720 minutes, in both directions. I have not added any stations en route, but the trains will surely make several stops.

File: railways/N20.def
#
# N20 Oslo S - Hamburg H
# --------------------------------------
NT001 17     17:720 Oslo S
GT001 2:720  2      Hamburg H
File: railways/N20-vehicles.def
=N200
N20 D OsloS 60
N20 U HambH 60

The minimum layover time does not really matter, but I have set it to 1 hour anyway.

Departure is at 1900 (which is 1140 minutes past midnight):

File: railways/N20.setup
## Networkplanner ##

route set N20 file:N20.def interval:1440 down:1140 up:1140

vehicles N20-vehicles.def

Note that the summary does not work, so including it would just be annoying.

The result:

$ networkplanner N20.setup

            N201  N202
----------------------
OsloS dep   1900  4300 
HambH arr   3100  5500 
HambH dep   4300  6700 
OsloS arr   5500  7900 
OsloS dep   6700  9100 

N200: Number of vehicles: 2
---------------------------------------
Total number of vehicles: 2

Time values in excess of 2359 are kind of excessive, but we can fix that.

The input values support the alternate <hour>h<minutes> syntax:

File: railways/N20b.def
#
# N20 Oslo S - Hamburg H
# --------------------------------------
NT001 17      17:12h00 Oslo S
GT001 2:12h00 2        Hamburg H
File: railways/N20b-vehicles.def
=N200
N20 D OsloS 1h00
N20 U HambH 1h00
File: railways/N20b.setup
## Networkplanner ##

route set N20 file:N20b.def interval:24h00 down:19h00 up:19h00

summary

vehicles N20b-vehicles.def

This is just an input format, so the change does not affect the output in any way:

$ networkplanner N20b.setup

            N201  N202
----------------------
OsloS dep   1900  4300 
HambH arr   3100  5500 
HambH dep   4300  6700 
OsloS arr   5500  7900 
OsloS dep   6700  9100 

N200: Number of vehicles: 2
---------------------------------------
Total number of vehicles: 2

Use the «:days» option to the «vehicles» command to nicify the days:

File: railways/N20c.setup
## Networkplanner ##

route set N20 file:N20b.def interval:24h00 down:19h00 up:19h00

summary

vehicles :days N20b-vehicles.def

The result:

$ networkplanner railways/N20b.setup

              N201    N202
--------------------------
OsloS dep     1900  1+1900 
HambH arr   1+0700  2+0700 
HambH dep   1+1900  2+1900 
OsloS arr   2+0700  3+0700 
OsloS dep   2+1900  3+1900 

N200: Number of vehicles: 2
---------------------------------------
Total number of vehicles: 2

1+ means the next day, 2+ the day after that again, and so on.

We have a night train with daily (or nightly) departures, and need two train sets to do so.

Toronto - Vancouver

A more extreme example is «The Canadian», the transcontinental train between Toronto and Vancouver. The distance is 3359 km. (The earth circumference at the equator is 40075 km, and this is a mere 8.3% of that. Or we could compare it to the earth radius, which is 6371 km. So an alternative to going from Toronto to Vancouver and back, is to travel to the centre of the earth. Distance-wise, that is.)

This is the actual travel times (as of 13. December 2021):

file: railways/ViaRail-12.def
#
# 1/2 Toronto - Winnipeg - Jasper - Vancouver 
# -------------------------------------------
#
ON001 D1      A2:3h30 Toronto, ON
ON002 D1:2h40 D2:2h17 Washoga, ON
ON003 D1:2h02 D2:3h53 Perry Sound, ON
ON004 D1:2h30 D2:22   Sudbury Jvt, ON
ON005 A1:25   D2:40   Capreol, ON
ON005 D1:30   A2:2h14 Capreol, ON
ON006 D1:56   D2:13   Laforest, ON
ON007 D1:13   D2:20   McKee's Camp, ON
ON008 D1:20   D2:8    Felix, ON
ON009 D1:7    D2:17   Ruel, ON
ON010 D1:17   D2:33   Westree, ON
ON011 D1:33   D2:1h35 Gogama, ON
ON012 D1:2h26 D2:1h23 Foleyet, ON
ON013 D1:54   D2:1h34 Elsas, ON
ON014 D1:2h00 D2:51   Oba, ON
ON015 A1:51   D2:55   Hornepayne, ON
ON016 D1:40   A2:2h15 Hornepayne, ON
ON017 D1:56   D2:50   Hillsport, ON
ON018 D1:50   D2:28   Caramat, ON
ON019 D1:39   D2:51   Longlac, ON
ON020 D1:39   D2:1h06 Nakina, ON
ON021 D1:1h06 D2:37   Auden, ON
ON022 D1:37   D2:8    Ferland, ON
ON023 D1:9    D2:32   Mud River, ON
ON024 D1:1h12 D2:31   Armstrong, ON
ON025 D1:30   D2:1h40 Collins, ON
ON026 D1:-21  D2:15   Allanwater Bridge, ON
ON027 D1:16   D2:17   Flindt Landing, ON
ON028 D1:17   D2:1h23 Savant Lake, ON
ON029 A1:1h26 D2:50   Sioux Lookout, ON
ON029 D1:30   A2:1h33 Sioux Lookout, ON
ON030 D1:1h10 D2:37   Richan, ON
ON031 D1:36   D2:28   Red Lake Road, ON
ON032 D1:29   D2:37   Canyon, ON
ON033 D1:37   D2:17   Farlane, ON
ON034 D1:36   D2:26   Redditt, ON
ON035 D1:21   D2:17   Minaki, ON
ON036 D1:17   D2:6    Ottermere, ON
ON037 D1:6    D2:2    Malachi, ON
ON038 D1:2    D2:3    Copelands Landing, ON
ON039 D1:3    D2:14   Rice Lake, ON
MB001 D1:14   D2:5    Winnitoba, MB
MB002 D1:5    D2:18   Ophir, MB
MB003 D1:18   D2:21   Brereton Lake, MB
MB004 D1:21   D2:1h07 Elma, MB
MB005 A1:2h20 D2:1h30 Winnipeg, MB
MB005 D1:2h00 A2:2h45 Winnipeg, MB
MB006 D1:1h34 D2:1h53 Portage la Prairie, MB
MB007 D1:2h27 D2:3h25 Rivers, MB
SK001 A1:4h23 D2:10   Melville, SK
SK001 D1:10   A2:4h21 Melville, SK
SK002 D1:2h50 D2:1h29 Watrous, SK
SK003 A1:1h56 D2:1h00 Saskatoon, SK
SK003 D1:1h00 A2:2h26 Saskatoon, SK
SK004 A1:1h39 D2:10   Biggar, SK
SK004 D1:10   A2:1h34 Biggar, SK
SK005 D1:5    D2:2h33 Unity, SK
SK006 D1:2h49 D2:2h21 Wainwright, AB
AB001 D1:53   D2:2h03 Viking, AB
AB002 A1:3h24 D2:1h00 Edmonton, AB
AB002 D1:3h11 A2:2h22 Edmonton, AB
AB003 D1:1h28 D2:1h09 Evansburg, AB
AB004 D1:1h23 D2:1h34 Edson, AB
AB005 D1:1h06 D2:1h15 Hinton, AB
AB006 A1:2h32 D2:1h30 Jasper, AB
AB006 D1:3h00 A2:3h59 Jasper, AB
BC001 D1:1h20 D2:1h50 Valemount, BC
BC002 D1:2h46 D2:2h13 Blue River, BC
BC003 D1:2h09 D2:2h06 Clearwater, BC
BC004 A1:2h43 D2:35   Kamloops North, BC
BC004 D1:35   A2:1h45 Kamloops North, BC
BC005 D1:1h46 D2:2h46 Ashcroft, BC
BC006 -       D2:2h29 North Bend, BC 
BC007 D1:3h17 -       Boston Bar, BC
BC008 D1:47   -       Chilliwack, BC
BC009 D1:1h55 -       Hope, BC
BC010 -       D2:14   Katz, BC 
BC011 -       D2:28   Agassiz, BC
BC012 D1:1h08 -       Abbotsford, BC
BC013 -       D2:1h35 Mission Harbour, BC 
BC014 A1:4h04 D2      Vancouver, BC

The route does not have a route number, but the Vancouver bound train has train number 1, and the Toronto bound train has number 2.

I have used the platform ID D1 (Departure, direction 1) towards Vancouver, and D2 (Departure, direction 2) towards Toronto. There are (more or less) extensive waiting times on several stations en route. I have handled this by using platforms A1 (arrival, direction 1) and A2 (arrival, direction 2) for the arrival time, before the usual departure from D1 or D2.

The vehicle definition file is easy to set up:

File: railways/ViaRail-12-vehicles.def
=0000
1 D Toronto   60
1 U Vancouver 60

The layover time at the terminals does not really matter.

The trains are running once weekly for the time beeing, with departure on Monday.

File: ViaRail-12.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval:168h00 down:9h45 up:15h00

summary :raw

vehicles :days ViaRail-12-vehicles.def

The vehicles part of the output is as expected:

                  0001    0002
------------------------------
Toronto   dep     0945  7+0945 
Vancouver arr   4+0800  11+0800 
Vancouver dep   7+1500  14+1500 
Toronto   arr   11+1429  18+1429 
Toronto   dep   14+0945  21+0945 

0000: Number of vehicles: 2
---------------------------------------
Total number of vehicles: 2

The «4+» part means four days later.

The normal summary is not available as the interval is >= 60 minutes, but we can use the «:raw» argument to get a (for want of a better word) raw version. [v.0.0.3: The «raw» version will be used automatically, when the interval >= 60 minutes. So you do not have to specify it.)

The result:

Route 1: Toronto, ON - Vancouver, BC 
----------------------------------------------------------------
    9:45  | Toronto, ON [D1]
   12:25  | Washoga, ON [D1]
   14:27  | Perry Sound, ON [D1]
   16:57  | Sudbury Jvt, ON [D1]
   17:22  | Capreol, ON [A1]
   17:52  | Capreol, ON [D1]
   18:48  | Laforest, ON [D1]
   19:01  | McKee's Camp, ON [D1]
   19:21  | Felix, ON [D1]
   19:28  | Ruel, ON [D1]
   19:45  | Westree, ON [D1]
   20:18  | Gogama, ON [D1]
   22:44  | Foleyet, ON [D1]
   23:38  | Elsas, ON [D1]
+1  1:38  | Oba, ON [D1]
+1  2:29  | Hornepayne, ON [A1]
+1  3:09  | Hornepayne, ON [D1]
+1  4:05  | Hillsport, ON [D1]
+1  4:55  | Caramat, ON [D1]
+1  5:34  | Longlac, ON [D1]
+1  6:13  | Nakina, ON [D1]
+1  7:19  | Auden, ON [D1]
+1  7:56  | Ferland, ON [D1]
+1  8:05  | Mud River, ON [D1]
+1  9:17  | Armstrong, ON [D1]
+1  9:47  | Collins, ON [D1]
+1  9:26  | Allanwater Bridge, ON [D1]
+1  9:42  | Flindt Landing, ON [D1]
+1  9:59  | Savant Lake, ON [D1]
+1 11:25  | Sioux Lookout, ON [A1]
+1 11:55  | Sioux Lookout, ON [D1]
+1 13:05  | Richan, ON [D1]
+1 13:41  | Red Lake Road, ON [D1]
+1 14:10  | Canyon, ON [D1]
+1 14:47  | Farlane, ON [D1]
+1 15:23  | Redditt, ON [D1]
+1 15:44  | Minaki, ON [D1]
+1 16:01  | Ottermere, ON [D1]
+1 16:07  | Malachi, ON [D1]
+1 16:09  | Copelands Landing, ON [D1]
+1 16:12  | Rice Lake, ON [D1]
+1 16:26  | Winnitoba, MB [D1]
+1 16:31  | Ophir, MB [D1]
+1 16:49  | Brereton Lake, MB [D1]
+1 17:10  | Elma, MB [D1]
+1 19:30  | Winnipeg, MB [A1]
+1 21:30  | Winnipeg, MB [D1]
+1 23:04  | Portage la Prairie, MB [D1]
+2  1:31  | Rivers, MB [D1]
+2  5:54  | Melville, SK [A1]
+2  6:04  | Melville, SK [D1]
+2  8:54  | Watrous, SK [D1]
+2 10:50  | Saskatoon, SK [A1]
+2 11:50  | Saskatoon, SK [D1]
+2 13:29  | Biggar, SK [A1]
+2 13:39  | Biggar, SK [D1]
+2 13:44  | Unity, SK [D1]
+2 16:33  | Wainwright, AB [D1]
+2 17:26  | Viking, AB [D1]
+2 20:50  | Edmonton, AB [A1]
+3  0:01  | Edmonton, AB [D1]
+3  1:29  | Evansburg, AB [D1]
+3  2:52  | Edson, AB [D1]
+3  3:58  | Hinton, AB [D1]
+3  6:30  | Jasper, AB [A1]
+3  9:30  | Jasper, AB [D1]
+3 10:50  | Valemount, BC [D1]
+3 13:36  | Blue River, BC [D1]
+3 15:45  | Clearwater, BC [D1]
+3 18:28  | Kamloops North, BC [A1]
+3 19:03  | Kamloops North, BC [D1]
+3 20:49  | Ashcroft, BC [D1]
+4  0:06  | Boston Bar, BC [D1]
+4  0:53  | Chilliwack, BC [D1]
+4  2:48  | Hope, BC [D1]
+4  3:56  | Abbotsford, BC [D1]
+4  8:00  | Vancouver, BC  [A1]

Route 1: Vancouver, BC  - Toronto, ON
----------------------------------------------------------------
   15:00  | Vancouver, BC  [D2]
   16:35  | Mission Harbour, BC  [D2]
   17:03  | Agassiz, BC [D2]
   17:17  | Katz, BC  [D2]
   19:46  | North Bend, BC  [D2]
   22:32  | Ashcroft, BC [D2]
+1  0:17  | Kamloops North, BC [A2]
+1  0:52  | Kamloops North, BC [D2]
+1  2:58  | Clearwater, BC [D2]
+1  5:11  | Blue River, BC [D2]
+1  7:01  | Valemount, BC [D2]
+1 11:00  | Jasper, AB [A2]
+1 12:30  | Jasper, AB [D2]
+1 13:45  | Hinton, AB [D2]
+1 15:19  | Edson, AB [D2]
+1 16:28  | Evansburg, AB [D2]
+1 18:50  | Edmonton, AB [A2]
+1 19:50  | Edmonton, AB [D2]
+1 21:53  | Viking, AB [D2]
+2  0:14  | Wainwright, AB [D2]
+2  2:47  | Unity, SK [D2]
+2  4:21  | Biggar, SK [A2]
+2  4:31  | Biggar, SK [D2]
+2  6:57  | Saskatoon, SK [A2]
+2  7:57  | Saskatoon, SK [D2]
+2  9:26  | Watrous, SK [D2]
+2 13:47  | Melville, SK [A2]
+2 13:57  | Melville, SK [D2]
+2 17:22  | Rivers, MB [D2]
+2 19:15  | Portage la Prairie, MB [D2]
+2 22:00  | Winnipeg, MB [A2]
+2 23:30  | Winnipeg, MB [D2]
+3  0:37  | Elma, MB [D2]
+3  0:58  | Brereton Lake, MB [D2]
+3  1:16  | Ophir, MB [D2]
+3  1:21  | Winnitoba, MB [D2]
+3  1:35  | Rice Lake, ON [D2]
+3  1:38  | Copelands Landing, ON [D2]
+3  1:40  | Malachi, ON [D2]
+3  1:46  | Ottermere, ON [D2]
+3  2:03  | Minaki, ON [D2]
+3  2:29  | Redditt, ON [D2]
+3  2:46  | Farlane, ON [D2]
+3  3:23  | Canyon, ON [D2]
+3  3:51  | Red Lake Road, ON [D2]
+3  4:28  | Richan, ON [D2]
+3  6:01  | Sioux Lookout, ON [A2]
+3  6:51  | Sioux Lookout, ON [D2]
+3  8:14  | Savant Lake, ON [D2]
+3  8:31  | Flindt Landing, ON [D2]
+3  8:46  | Allanwater Bridge, ON [D2]
+3 10:26  | Collins, ON [D2]
+3 10:57  | Armstrong, ON [D2]
+3 11:29  | Mud River, ON [D2]
+3 11:37  | Ferland, ON [D2]
+3 12:14  | Auden, ON [D2]
+3 13:20  | Nakina, ON [D2]
+3 14:11  | Longlac, ON [D2]
+3 14:39  | Caramat, ON [D2]
+3 15:29  | Hillsport, ON [D2]
+3 17:44  | Hornepayne, ON [A2]
+3 18:39  | Hornepayne, ON [D2]
+3 19:30  | Oba, ON [D2]
+3 21:04  | Elsas, ON [D2]
+3 22:27  | Foleyet, ON [D2]
+4  0:02  | Gogama, ON [D2]
+4  0:35  | Westree, ON [D2]
+4  0:52  | Ruel, ON [D2]
+4  1:00  | Felix, ON [D2]
+4  1:20  | McKee's Camp, ON [D2]
+4  1:33  | Laforest, ON [D2]
+4  3:47  | Capreol, ON [A2]
+4  4:27  | Capreol, ON [D2]
+4  4:49  | Sudbury Jvt, ON [D2]
+4  8:42  | Perry Sound, ON [D2]
+4 10:59  | Washoga, ON [D2]
+4 14:29  | Toronto, ON [D2]

The «+4» part means four days later. Note that this is the opposite of what is used in the vehicles part, which uses «4+».

We can use the route ID 1 on the first one, and 2 on the return trip, by setting up separate routes for each direction:

File: railways/ViaRail-12b.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval:168h00 down:9h45 up:off
route set 2 file:ViaRail-12.def interval:168h00 down:off up:15h00

summary :raw

vehicles :days ViaRail-12b-vehicles.def
File: railways/ViaRail-12b-vehicles.def
=0000
1 D Toronto   60
2 U Vancouver 60

The summary (the raw version) will now use the correct train numbers, even if it calls them «route» and not «train». Which may actually be correct, as there are bound to be several of them en route at the same time when the full timetable is in operation.

Daily departures look like this:

File: railways/ViaRail-12c.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval:24h00 down:9h45 up:off
route set 2 file:ViaRail-12.def interval:24h00 down:off up:15h00

summary :raw

vehicles :days ViaRail-12b-vehicles.def

The result, which tells us that this requires 9 trains:

                  0001    0002    0003    0004    0005    0006    0007    0008    0009
--------------------------------------------------------------------------------------
Toronto   dep     0945  1+0945  2+0945  3+0945  4+0945  5+0945  6+0945  7+0945  8+0945 
Vancouver arr   4+0800  5+0800  6+0800  7+0800  8+0800  9+0800  10+0800  11+0800  12+0800 
Vancouver dep   4+1500  5+1500  6+1500  7+1500  8+1500  9+1500  10+1500  11+1500  12+1500 
Toronto   arr   8+1429  9+1429  10+1429  11+1429  12+1429  13+1429  14+1429  15+1429  16+1429 
Toronto   dep   9+0945  10+0945  11+0945  12+0945  13+0945  14+0945  15+0945  16+0945  17+0945 

0000: Number of vehicles: 9
---------------------------------------
Total number of vehicles: 9

Every second day is just a matter of replacing the «24h00» with «48h00»:

File: railways/ViaRail-12d.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval:48h00 down:9h45 up:off
route set 2 file:ViaRail-12.def interval:48h00 down:off up:15h00

summary :raw

vehicles :days ViaRail-12b-vehicles.def

The result, which tells us that this requires 5 trains:

                  0001    0002    0003    0004    0005
------------------------------------------------------
Toronto   dep     0945  2+0945  4+0945  6+0945  8+0945 
Vancouver arr   4+0800  6+0800  8+0800  10+0800  12+0800 
Vancouver dep   4+1500  6+1500  8+1500  10+1500  12+1500 
Toronto   arr   8+1429  10+1429  12+1429  14+1429  16+1429 
Toronto   dep   10+0945  12+0945  14+0945  16+0945  18+0945 

0000: Number of vehicles: 5
---------------------------------------
Total number of vehicles: 5

The problem with trains every second day, from a passenger point of view, is that the train will depart on Monday, Wednesday, Friday and Sunday on week 1, and Tuesday, Thursday and Saturday on week 2. And which week is it now?

Departures every Monday, Wednesday and Friday (from Toronto) and Saturday (from Vancouver) will solve this problem:

The Saturday from Toronto (instead of Friday) is caused by the arrival of the Monday train from Vancouver after the departure time on Friday. So we need an extra day (or night). This is not a problem in Vancouver.

The route setup is incredible hard to get right. This is my «best effort» as of v.0.0.1, using a list of intervals:

File: railways/ViaRail-12e.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval:48h00;72h00;48h00 down:102h45 up:off
route set 2 file:ViaRail-12.def interval:48h00;72h00;48h00 down:off up:15h00

summary :raw

vehicles :days ViaRail-12b-vehicles.def

This is the result, which is wrong:

                  0001    0002    0003
--------------------------------------
Toronto   dep     0645  2+0645  5+0645 
Vancouver arr   4+0500  6+0500  9+0500 
Vancouver dep   4+1500  6+1500  9+1500 
Toronto   arr   8+1429  10+1429  13+1429 
Toronto   dep   9+0645  11+0645  14+0645 

0000: Number of vehicles: 3
---------------------------------------
Total number of vehicles: 3

Update 31. December 2021 [v.0.0.3]

There are multiple issues here. The most obvious is error #012 (Wrong numer of vehicles). This issue hide the more fundamental error #001 (The code does not respect interval values after the first row). Issue #001 has been resolved.

Error #012 is not solved yet, but adding additional interval values (in this case just one suffices) is a workaround. (The problem is the way it uses the intervals to compute the required number of vehicles.)

File: railways/ViaRail-12f.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval:48h00;72h00;48h00;48h00 down:6h45 up:off
route set 2 file:ViaRail-12.def interval:72h00;48h00;48h00;48h00 down:off up:111h00

vehicles :days ViaRail-12b-vehicles.def

Note the location of the 72 hour interval value in the Up direction. Up front, as it is the first interval. Just as you would expect.

We get the correct result:

                  0001     0002     0003     0004
-------------------------------------------------
Toronto   dep     0645   2+0645   5+0645   7+0645
Vancouver arr   4+0500   6+0500   9+0500  11+0500
Vancouver dep   4+1500   7+1500   9+1500  11+1500
Toronto   arr   8+1429  11+1429  13+1429  15+1429
Toronto   dep   9+0645  12+0645  14+0645  16+0645 

0000: Number of vehicles: 4
---------------------------------------
Total number of vehicles: 4

Note that I have manually fixed the columns in the output, as the program does not handle tabulation of two-digit day values.

We can use the new «interval-up» and «interval-down» arguments and treat the route as a single route (as it is one in the first place):

File: railways/ViaRail-12g.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval-down:48h00;72h00;48h00;48h00 down:6h45 \
                                interval-up:72h00;48h00;48h00;48h00   up:111h00

vehicles :days ViaRail-12-vehicles.def

Note the use of \ as the last character on a line, to tell the program to continue with the following line. This is available for all input files, from [v.0.0.3], but is only useful in the Network setup files.

Update 2. January 2021 [v.0.0.4]

Issue #012 has been resolved, so we can go back to three intervals (with the 72 hours just where you would expect them to be):

File: railways/ViaRail-12h.setup
## Networkplanner ##

route set 1 file:ViaRail-12.def interval:48h00;72h00;48h00 down:6h45 up:off
route set 2 file:ViaRail-12.def interval:72h00;48h00;48h00 down:off up:111h00

vehicles :days ViaRail-12b-vehicles.def

The result:

                  0001    0002    0003    0004
----------------------------------------------
Toronto   dep     0645  2+0645  5+0645  7+0645 
Vancouver arr   4+0500  6+0500  9+0500  11+0500 
Vancouver dep   4+1500  7+1500  9+1500  11+1500 
Toronto   arr   8+1429  11+1429  13+1429  15+1429 
Toronto   dep   9+0645  11+0645  14+0645  16+0645 

0000: Number of vehicles: 4
---------------------------------------
Total number of vehicles: 4

[ Introduction | Oslo Metro | Oslo Tram | Bergen | Misc. ]
[ Misc. Intro | Lisboa | Railways | Reindeer Expressed | Intervals NEW ]