A 57-mile canal, one anonymous runner's watch data, and a model that tries to answer the only question that matters at mile 40: walk, or keep going?
The Glasgow to Edinburgh Ultra runs 57 miles from the Riverside Museum in Glasgow to Saughton in Edinburgh, along the Kelvin, the Forth & Clyde Canal and the Union Canal. It's flat, which sounds like a mercy and is in fact the cruellest thing about it. There is nowhere to hide, and nothing to walk up as an excuse.
Our runner, played by Ice Bear for reasons of privacy and general cuteness, wanted to know two things: roughly how long it'll take, and which pacing strategy gives the best chance of not spending the second half of the day shuffling past narrowboats. So the bear's years of watch data went into a model. Heart rate, pace, walking and stopping, from every long run and ultra on record.
The short version: the model forecasts about 13:40, likely 13:00–14:30, for its preferred strategy. The strategy matters more than the exact number, and the strategy is not "go out hard and hang on".
The model is personal. It's fitted to one runner, so the numbers won't transfer to you. The method will, and so will most of the lessons.
Like most ultra runners, the bear already walks about 17% of the first half without meaning to: eating, bridges, general faff. A 5:1 run/walk just schedules that walking, and scheduled walking replaces some of the forced walking later. Below 17% there's nothing to gain, because the walking happens anyway. Above it, the bear is adding walking it wouldn't otherwise do. To the model, 5:1, 10:2 and 20:4 are identical, because it only sees the share. In real life, 20:4 lets heart rate drift in the long running bouts and the legs stiffen in the long walks. Pick 5:1 or 10:2.
| Heart-rate cap | Continuous | 5:1 | 5:1, HR offset on |
|---|---|---|---|
| 128–133 all day | 14:09–14:16 | 14:02–14:09 | 14:02–14:07 |
| 133–138 | 14:04–14:11 | 13:56–14:04 | 13:48–13:54 |
| 145–150, hard early | 14:08–14:09 | 14:03–14:05 | 13:50–13:51 |
| Staged 128→138, released after Linlithgow | 13:58–14:06 | 13:49–13:57 | 13:45–13:52 |
| Staged 133→141, released after Linlithgow (the plan) | — | — | 13:37–13:45 |
Ranges are the two versions of the fade model (see below). "HR offset" is explained in part 5: the runner's heart rate currently reads about 6 beats high for the same effort, compared with the races the fade model learned from.
Every ultra over about 45 km in the bear's history ends the same way: a stop-start shuffle, roughly a minute of running and a minute and a half of walking, repeated dozens of times. Crucially, it isn't the heart or lungs. Late-race running pace is perfectly respectable when it happens, and walking heart rate drops well below race effort. The legs simply refuse to hold a running bout for more than a minute or two, even after very gentle starts.
So the limit is leg durability: muscle damage from hours of impact on hard surfaces. The model can't build durability, but it can price the choices that protect it.
Holding 5:1 to the finish is a stretch goal, with roughly a one-in-four chance on current form. Shuffling at 9:30–10:00/km instead of walking at about 11:00/km is far more achievable, and still worth about 10 minutes.
A staged heart-rate cap with 5:1 run/walk from the gun, released after Linlithgow. Clock times are the model's point estimates, assuming a 06:00 start.
| Aid station | HR cap | Running pace | Clock | Time of day |
|---|---|---|---|---|
| 5.3Lambhill | 131–133 | ~6:45 | 1:02 | 07:02 |
| 10.8Barleybank | 133–135 | ~6:55 | 2:12 | 08:12 |
| 17.0Woodend | 136–138 | ~7:05 | 3:31 | 09:31 |
| 25.4Falkirk Wheel | 138–140 | ~7:20 | 5:22 | 11:22 |
| 30.0Polmont | 140–141 | ~7:35 | 6:28 | 12:28 |
| 36.5Linlithgow | 140–141 | ~7:55 | 8:07 | 14:07 |
| 49.7Ratho | released, 143–146 | ~8:20 | 11:31 | 17:31 |
| 57.0Finish | by feel | ~8:40 | 13:28 | 19:28 |
The model simulates the race 100 m at a time. At each step it decides how much time goes to running, planned walking, forced walking and shuffling, and how fast each happens. Everything except a few clearly labelled assumptions is fitted to the runner's own watch history. The race replay runs the same model in your browser; it's checked against the original Python to within a few seconds at every checkpoint.
Fitted on about 12,500 running samples from recent runs of 20 km or more (R² 0.40):
Each beat is worth about 2 s/km, and each hour on the feet costs about 13 s/km at the same heart rate. That second term is the cardiac-drift problem in a single number.
| Quantity | Value | Use |
|---|---|---|
| Unplanned walking in the first 45% of flat ultras | 17% | The floor before any planned run/walk |
| Walking pace | 10:46/km | Speed while walking |
| Heart-rate drop while walking | 12 bpm | Walk breaks lower average early heart rate |
Between 40% and 60% of the distance, walking ramps up to a late share that depends on how hard the first 45% was. There are only a handful of flat ultras to learn from, so the data can't choose between a straight line and a threshold. The model runs both and reports the range:
Planned walk breaks replace some of the forced walking: half, by assumption, varied between a quarter and three-quarters. There's no structured run/walk race in the history yet, so this one can't be measured.
The first version was too optimistic about hard starts and too pessimistic about easy ones, and its errors lined up neatly with early heart rate. That's a polite way of saying it was missing something. A damage term fixes it: late-race running slows by 0.95% for every beat of early heart rate above 130, with no effect below.
Heart rate isn't a fixed measure of effort. Heat, sleep, caffeine and plenty else can shift it. For this runner, the current readings sit about 6 beats higher at a given pace than in the races the fade and damage terms learned from. The pace curve is fitted on recent data, so it already includes the shift. The strain terms judge effort on heart rate minus the offset. That one correction moves the best caps up by about five beats. The slider on the race page lets you change it.
| Setting | What it does | Plan value |
|---|---|---|
| Heart-rate cap per section | Running heart rate for each section; sets running pace through part 1 | 133 rising to 141, released after Linlithgow |
| Run/walk | Planned walking share | 5:1 (17%) |
| Aid station stop | Minutes added per checkpoint | 4 |
| Guard rail | Fastest allowed running pace early on | 6:50/km for 3 h |
| Shuffle rule | The share of forced walking turned into a slow jog | 9:45/km |
Each 100 m takes 100 m ÷ (running share × running speed + walking share × walking speed + shuffle share × shuffle speed). The speeds change with the cap, the clock and the leg damage. The Monte Carlo then reruns the whole race 2,000 times, varying:
| Uncertain input | Distribution |
|---|---|
| Late walking share | ± 9.5 points (normal) |
| Readiness on the day | Pace 0–4% slower (uniform) |
| Day-to-day pace | ± 2.5% (normal) |
| Aid station stops | 4 ± 1 min each |
| Planned walking replacing forced walking | 25–75% (uniform) |
| Leg-damage coefficient | 50–150% of the fitted value |
| Heart-rate offset | 5.8 ± 1.6 bpm |
| Shuffle-rule adherence | Beta(2, 2.5), mean 44% |
| Step | Calculation | Result |
|---|---|---|
| Early intensity | Mean cap over the first 45% (136.5) − walking dilution (17% × 12) − HR offset (5.8) | 128.6 bpm |
| Forced late walking | Straight line 0.142 + 0.0037 × 128.6 − 0.0024 × 2.5, minus half the planned 17% (threshold version: 54% − 8%) | 53% (45%) |
| Leg damage | 128.6 is below 130 | none |
| Running pace | 11.421 − 0.0360 × 145 + 0.210 × 10 | 8:18/km |
| Normal fade | 47% running at 8:18 + 53% walking at 10:46 | 9:27/km |
| Shuffle rule kept | 47% running + 17% planned walking + 36% shuffling at 9:45 | 9:08/km |
| Hold 5:1 | 83% running + 17% planned walking | 8:38/km |
That 49 s/km gap, over the 33 km from Linlithgow, is the 35 minutes in the walking section.
Each past ultra was replayed by a version of the model refitted without it, with the pace curve fitted only on the months before. On flat races, the average error was 2.5%. That's flattering: the damage term was tuned on those same races, so the honest out-of-sample error is probably 3–4%, or about half an hour either way. On mountain races it comes out 10–17% too fast, because the pace curve knows nothing about hills. The canal is flat, so we'll allow it.
Two independent models were built blind as a cross-check. One used Riegel-style scaling and fitness markers; the other used five-minute segments, heart-rate drift, a breakdown threshold and day-to-day heart-rate wobble. Their central forecasts landed about an hour apart, with this model in between. All three agreed that a hard start is fragile, some run/walk beats none, and a fixed low cap all day is too strict.
Course: 57 miles, 231 m of climbing, 16-hour cut-off (organiser).