How are the training zones used during plan generation?

Sometimes I get a notification that my training zones have been updated and it suggests changing the plan. Why does it suggest a new plan instead of updating the pace/power within the existing plans, has it determined a better plan already exists, if so why does it run the plan search instead of offering a preview of it?

It’s a bit peculiar to our algorithm: we actually train digital twin in a space of absolute power zones and then translate to your zone values. So when your zones deviate too much from original plan we have to redo the plan (Endurance won’t be Endurance anymore for example).

I’m not sure I fully get it. This is my understanding:

The digital twin (individualized model) is created using pace/power over time, and presumably has as inputs heart rate, dfa-alpha 1, respiration rate, hrv, ess/iss, ‘pre-training’ [secondary layer], volume, etc. and machine learning magic is used to individualize these in creating the per-individual model (digital twin). The model has constraints put around it based on ‘actual’ values from the athlete, such as race performance. Implying doing some regular ‘tune-up’ races will help ensure the model is less likely to deviate too much from actual performance.

This digital twin is then used to produce a training plan. An optimization effort is run to predict optimal performance for a given distance on a certain date. Constraints will be used like time per week to train, availability per day, previous volume, etc.. To reduce the complexity of the search it is reduced from an ‘infinite’ space (eg: searching all possible combinations of workout types from on a per daily basis with up to three sports to train for) into bi-weekly distributions for each sport: eg: running x minutes at pace A, y minutes at pace B, z minutes at pace C, etc.). This is split into daily loads for each day using Gemini (maybe originally a non-ML/LLM algorithm) as this lets the constraints added to the plan prompt be added: eg “don’t schedule bike workouts on back to back days” or “for endurance workouts increase the variety of paces”.

There is probably some cycling back where several different loads between running/cycling/swimming are used to get the optimal outcome (lowest time) for the given event, and predict race times for each couple weeks along the plan (this is the predicted performance graph on the Dashboard).

After the optimal distribution has been found, the daily loads from the ML are grouped based on ‘workout types’ (endurance, tempo, threshold, vo2max, anaerobic). This is where the training zones are used. The zones are determined using a different model (either algorithmic or ML). The workout type, duration and zones are will be fed into the workout generator. The workout generator which produces an interval (or maybe not if endurance) based workout to create a workout which is added to the calendar & a .fit file prepared for sending to a training platform.

Because of the workout generation step which has clamped intensities to zones this is why when training zones change the workouts need to be re-created.

After this stage runs (could be during the daily load generation phase), another generation is run where strength/cross training is requested from Gemini (using a prompt you have pre-created / possibly individualized based on athlete profile) and translated back into strength workouts (eg: warm-up using hip circles, set 1 is goblet squats & renegade rows, cool-down is bird-dogs & fire hydrants) and these are added to the plan based on available remaining time.

This is similar to how the V.DOT tables produced by Daniels & Gilbert are used to make Daniels running plans. This requires the reader to ensure they’re choosing the correct plan and perform the field tests to determine their VDOT, and after that the correct pre-computed plan is selected (the athlete reads the book to figure out which plan to select). The pre-computed plans may be adjusted by a Coach (VDOT Coach) / ML (Athletica.ai) depending on athlete feedback.

I’m sure many of those steps/sequences/etc. are wrong..

1 Like

A lot of things you said are roughly true but maybe I wasn’t clear enough when answering your question:

At its core a training plan is a sequence of (in our case 2 week) distributions of time in given power/pace zones (+ additional constraints like workout spacing, recovery, Gemini/plan prompt, strength, … but lets forget about these for this argument) that optimizes performance at selected goal event on race date. Like you say how you can train/a training plan is in principle an infinite space but we make it finite by creating power/pace bins: how much time do you spend in a given 2 week block between 200 - 210 W, between 210 - 220 W, … (those are not the exact bins but you get the gist)

Now the zones come in: say your Tempo zone is between 200 and 220 W: so we take all those power bins that fall into the Tempo zone so we know how many Tempo workouts (rather how much Tempo time) we have to create in that time frame. All this is at plan creation

Now your zones change: they change a little, no problem it’s still approximately the same bin times we have assigned to Tempo and hence constructed your amount of Tempo workouts. They change a lot and it’s a different story: What we assigned to Tempo during plan creation is really not Tempo anymore now, Tempo corresponds to different bins.

We could either

  • re-create all the workouts from that ‘training plan core’ sequence of times at various power bins, meaning most of the workouts change but underlying time at different power values distribution stays the same or
  • take opportunity to re-calculate optimal plan entirely

Since so much is going to change anyways for the rest of the plan till the goal event, we choose the latter.

2 Likes

Thank you for such a detailed explanation!