A few months ago, in some thread somewhere on the board, I briefly wrote about potentially
modifying the Worcester Line from a zonal express model to a skip stop model, and utilize the reallocated time savings to provide
greater frequencies to the Newton stations.
I then went away for a while to try to build out and validate the concept. Unfortunately, this turned into one of those exercises where I did a lot of work but ultimately have less to show for it than I was hoping for. In particular, I was hoping to confirm the (very tantalizing) possibility that a skip-stop model could in fact require
fewer trains than the current schedule. This, of course, required figuring out how many trains the current schedule actually uses, and that was where my efforts ultimately were not fruitful. As it stands, my best guess is that probably today's schedule uses 8 sets; my proposal also likely uses 8 sets, though it may be possible to trim that down to 7. (I'd love to use that extra set to bump the Fairmount's frequencies up to 30 min -- I think it would only take one set to do so.)
In the course of doing this work, I built a
dynamic schedule generator, which was a big headache but honestly is pretty cool now that I've got it working. You'll see that there's a column labeled "Service", with which you can
assign different services to each station, e.g. "
A trains should stop here and here,
B trains should stop there and there, and
C trains should stop everywhere." You can then configure the
departure time from Worcester for the first train of the day, and then the second, and so on, and you can
assign each train a particular service pattern (e.g. A, B or C).
Using the inputted travel times between stations in the
"stopping time" column, the
spreadsheet then dynamically builds a schedule for each train, according to its service pattern -- basically the formula checks each row as it goes down to see whether the train's label at the top matches the station's service list on the left; if so, it adds the "stopping time" to the previous station's departure time to calculate the arrival time; if there's no match, the spreadsheet instead takes the "non-stop time" (which is derived from the "stopping time" value, multiplied by the configurable "time savings" percentage), and passes that value downward until a station with a matching service pattern is reached, at which point all of the "non-stop times" are added up to provide the new arrival time.
(I used 67% at the time savings percentage, as I found that was pretty consistent across various timetables I reviewed. As you'll see in the blog post, I also ran a test, and the 67% figure was able to accurately predict today's official schedule. So I think it's close enough.)
All of this means you can experiment with the time-savings of, for example, a skip-stop vs all-stop service, or a H2H that also stops at the Newtons vs today's H2H.
The spreadsheet will also attempt to
calculate the number of unique trainsets needed to run your schedule. It does this by adding the BOS layover time, the outbound journey time, and the WOR layover time to evaluate when a given set will next be "available" for service (marked in the "
finish layover" row). For each train after the first of the day, the
Set row will check to see if the departure time of that train is later than the "finish layover" time of the day's first train; if it is not, then the
Set value will increment by 1; if the departure
is later, then the counter
resets to 1, and begins incrementing upward again. That reset point tells you how many sets your particular schedule will require (assuming that all services originate in Worcester).
Note that the the trainset calculation is not super robust. In some permutations of the schedule, I had to hardcode the values manually, particularly if I was working with service patterns that had a very large difference in stops, e.g. all stops vs H2H; hardcoding manually is not difficult, just somewhat tedious.
In any case, this is
the proposed schedule:
It is definitely far from perfect. In the middle of the line, Ashland, Framingham, and West Natick all see some non-trivial tradeoffs, though I'd argue that on the balance those tradeoffs are still worthwhile at least for Framingham and West Natick. Ashland unfortunately sees an increase in travel times of 6-7 minutes; most other stations see equal, or slightly faster travel times. West Natick also sees an increase in travel times relative to its fastest trains today, but gets the benefit of doubled frequencies.
I'm not happy with Ashland seeing slightly worse service, but it seemed like the best compromise: 6-7 minutes is not earth-shattering, and the town of Ashland
historically has had the lowest townwide cumulative ridership on the entire line. (The Newtons and two of the Wellesleys individually have lower ridership than Ashland, but both municipalities blow Ashland out of the water when their total ridership across all stations is considered.) Even the Newtons, with their crappy hourly headways, have greater cumulative ridership than Ashland. So, like I said, it seemed like the least bad option. (I am definitely open to alternatives though!)
That all being said -- overall I think this could actually really work:
- The Newtons, Framingham, and Worcester get clockfacing half-hourly peak direction headways.
- Most riders see comparable travel times to today.
- No extra equipment or capital investments are required.
- And no station sees a reduction in service -- the suburban stations between Worcester and Framingham and 128 continue to see hourly peak headways.
As ever,
further details available on my blog.