AI Cycling
019 AI Route Planning And Race Pacing 2,026 words · 9 min

Pacing A Hilly Time Trial With A Physics Model Instead Of A Guess

Most riders pace a rolling 25 the same way they pace a flat one: pick a number, hold the number, hurt. On a course like the Kingsclere-based K25 or any of the drag-infested Welsh Borders circuits, that discipline costs you time. Not a trivial amount either. The gap between constant-power pacing and properly variable pacing on a genuinely lumpy UK 25 sits somewhere between 40 and 90 seconds for a rider in the 4.0 W/kg region, and every second of it is free. You don’t need more fitness. You need to spend the fitness you have in the right places.

This is the case for treating a time trial pacing calculator as a core piece of race prep rather than a novelty, and for understanding the physics well enough that you can tell when the tool is lying to you.

Why constant power is the wrong answer on a rolling course

Steady power is optimal in exactly one situation: a course with constant gradient, constant wind and constant road surface. Nobody in the UK races that course.

The reason variable pacing wins comes down to how your speed relates to the forces opposing it. On the flat, aerodynamic drag dominates and it scales with the cube of velocity in terms of power:

P = (0.5 · ρ · CdA · v³) + (Crr · m · g · v) + (m · g · sin(θ) · v)
     ^ aero                ^ rolling resistance   ^ gravity

Look at what that structure implies. On a flat section at 42 km/h, an extra 20 W buys you maybe 0.5 km/h. On a 5% climb at 18 km/h, the gravity term is linear in velocity, so that same 20 W buys you something like 0.9 km/h. The marginal return on a watt is much higher when you’re going slowly, and you go slowly uphill and into headwinds.

The flip side matters just as much. On a descent where you’re already doing 55 km/h, the aero term is eating almost everything you produce. Pushing 280 W instead of 240 W down a 4% drop might gain you 0.4 km/h and it costs you anaerobic capacity you’ll need at the bottom of the next rise. That’s the trade being made badly by almost everyone riding to a single number on a head unit.

So the rule is simple to say and hard to execute: push harder where you’re slow, ease where you’re fast. How much harder is the question a physics model answers and your intuition doesn’t.

What “how much harder” actually means in watts

The classic reference here is Chris Anderson and Jim Martin’s work on optimal pacing, along with Robert Chung’s analysis on the wattage forums, and the practical version most calculators implement is a variation on: power should vary roughly in proportion to the change in apparent headwind speed relative to your average.

In numbers that a self-coached rider can use, for a 25-mile TT where you’re targeting an average of 270 W:

TerrainGradientTarget powervs. average
Sustained climb+4 to +6%324–338 W+20 to +25%
Drag+1.5 to +3%297–310 W+10 to +15%
Flat, headwind0%289 W+7%
Flat, neutral0%270 W0%
Flat, tailwind0%251 W−7%
False flat down−1 to −2%235 W−13%
Fast descent−4% and steeper189–216 W−20 to −30%

Two things about this table. First, the swing is bigger than most people are comfortable with. Riders who have internalised “don’t blow up” tend to allow themselves maybe ±5% and think they’re pacing variably. They’re not: they’re pacing constantly with noise. Second, the constraint is your anaerobic work capacity (W’), not your legs’ willingness. Going 25% over threshold for four minutes on a climb draws down W’ by a meaningful chunk, and if the course has three such climbs you need the model to check that the account balances.

A worked example: a real UK 25

Take a rolling 25 with 320 m of climbing, run as two laps of a rural circuit plus a spur. Rider profile: 72 kg, bike and kit 9 kg, CdA of 0.235 in a decent TT position, Crr 0.004 on good tarmac, FTP 290 W, target normalised power 272 W for the hour and a bit.

Run the constant-power case at 272 W through a physics model and you get roughly 57:41.

Now run the variable case with the same total energy expenditure. Same kilojoules, distributed according to the gradient table above, with W’ constrained so it never drops below 20% of capacity. Result: 56:48.

Fifty-three seconds. For free. No new wheels, no skinsuit, no extra training block. That’s roughly the same gain as dropping your CdA from 0.235 to 0.220, which for most riders means a position change, a wind tunnel session or a new helmet and a lot of fiddling.

Here’s the breakdown of where it comes from, segment by segment:

SEGMENT              DIST   GRAD    CONST-P    VAR-P    Δ TIME
----------------------------------------------------------------
Start ramp           1.2km  +2.1%   272W 3:04  304W 2:56   -8s
Valley flat          4.8km  +0.2%   272W 6:51  268W 6:53   +2s
Church climb         1.9km  +4.4%   272W 5:12  330W 4:44  -28s
Descent to A-road    2.4km  -3.8%   272W 2:38  212W 2:44   +6s
Main drag N          6.1km  +0.9%   272W 8:29  288W 8:18  -11s
Roundabout turn      0.3km   flat   272W 0:26  272W 0:26    0s
Main drag S          6.1km  -0.9%   272W 7:41  254W 7:47   +6s
Church climb (2)     1.9km  +4.4%   272W 5:14  326W 4:48  -26s
Run-in               5.5km  +0.4%   272W 7:26  278W 7:22   -4s
Finish kick          0.1km   flat   272W 0:40  340W 0:38   -2s
----------------------------------------------------------------
TOTAL               30.3km          272W avg   57:41 → 56:48
                                    NP 272W    NP 279W   -53s

Notice that the losses are real. You give back six seconds on each descent and two seconds in the valley. But the climbs return 54 seconds between them, and the drag into the northerly section returns another 11. The trade is lopsided in your favour because the gradient-adjusted marginal value of a watt on a 4.4% climb is roughly 1.8 times its value on a −3.8% descent.

Notice too that normalised power rose from 272 to 279 W while average power stayed the same. That’s the physiological cost, and it’s not nothing: 279 W NP for 57 minutes is a harder ride than 272 W steady. If your model spits out a plan with NP 6% above your target, sanity-check it against a recent hard effort before you commit.

Which tools actually do this, and how well

Best Bike Split remains the reference implementation. You upload a course, enter CdA, Crr, mass, FTP and a target intensity factor, and it returns a segment-by-segment power plan you can push to a Garmin as a workout. The model is sound. The catch is that its output quality is entirely bounded by your CdA estimate, and most riders enter a number they read somewhere rather than one they measured. If you feed it CdA 0.21 when you actually ride at 0.245, the plan’s power distribution is still directionally right but the predicted time is fantasy and the pacing on descents will be too conservative.

Intervals.icu doesn’t generate pacing plans, but it’s where you validate them. After the event, the Power Curve and the W’bal chart tell you whether the plan was executable. If W’bal hit zero at the top of the second climb and you limped the run-in, the model was too aggressive and you need a lower intensity cap on the climbs, not a lower average.

MyWindsock is the one most UK riders under-use, and on a British course it’s arguably more important than the gradient model. A 25 on an out-and-back with a 12 mph crosswind that becomes a quartering headwind on the return is a course where wind pacing dominates gradient pacing. MyWindsock will give you a segment-level yaw and apparent wind forecast, and you can layer that on top of the gradient plan: add roughly 5 to 8% on the sections where the apparent headwind is strongest, subtract a similar amount where it’s behind you.

For a broader look at how course intelligence and race-day strategy fit together across disciplines, our AI route planning and race pacing pillar covers the workflow end to end.

Using an LLM to build the plan, and how to stop it inventing numbers

You can get a usable pacing plan out of Claude or ChatGPT, but only if you give it the physics and the data rather than asking it to recall them. The failure mode is obvious once you’ve seen it: ask “how should I pace a hilly 25?” and you’ll get the generic advice you already know, wrapped in confident prose.

What works is handing it the GPX-derived segment table and making it compute. Something like:

You are pacing a 25-mile time trial. Rider mass 72 kg, bike+kit 9 kg, CdA 0.235 m², Crr 0.004, air density 1.225 kg/m³, FTP 290 W, W’ 21.5 kJ, target average power 272 W.

Below is the course split into segments with distance in km and average gradient in percent. For each segment, compute the target power using the principle that marginal time saved per watt scales inversely with velocity, then verify the total energy equals 272 W × predicted duration. Cap any segment at 125% of FTP and model W’bal across the whole ride using the Skiba differential equation. If W’bal drops below 4 kJ at any point, redistribute.

Output a table: segment, distance, gradient, target power, predicted speed, predicted split, cumulative W’bal.

[segment table]

That prompt does three things right. It supplies every physical constant rather than letting the model guess, it names the specific method for W’ tracking, and it demands an internal consistency check on total energy. Ask it to show the intermediate velocity calculation for one segment and you can verify the arithmetic yourself against a simple solver.

Where LLMs genuinely beat a calculator is in the messy bits: “this segment has a 90-degree junction at 18 km with a give-way, adjust for the decel and re-accel.” Best Bike Split handles that crudely. A model you’ve briefed properly will knock 30 W off the approach and add a surge out of the corner, because you told it to.

Getting your CdA honest before you trust any of it

Every number above collapses if your CdA is wrong. The cheap way to fix this is Chung’s virtual elevation method, which you can run with a free copy of Golden Cheetah’s Aerolab or the R implementation floating around GitHub. Ride an out-and-back loop on a still evening, four to six laps, with a power meter and no braking. Feed the file in, adjust CdA and Crr until the virtual elevation profile closes on itself, and you have a figure accurate to about ±0.005 m².

For a 72 kg rider at 270 W, that’s the difference between a predicted 56:48 and a predicted 57:35. Get it right once and every plan you build afterwards inherits the accuracy.

What to actually do on the day

Don’t ride to instantaneous power on a climb: it’s noisy and you’ll chase it. Set a 10-second average field and a 3-second field side by side, and use the lap-average or the Best Bike Split workout target as your anchor. On the descents, the discipline is the hard part. Your legs will want to hold the number. Let them off, tuck, and bank the W’ for the next rise.

The first time you ride a plan like this it will feel wrong. The climbs feel like you’re going too deep and the descents feel like you’re freewheeling out of a race. Then you look at the split and it’s a minute quicker than your last go on the same course, at the same average power, on the same legs.