Under the hood · 09
Adaptive set planning
How the planner builds your warm-ups and working sets for Strength, Volume, Peak 1RM and Deload: which history it reads, the daily strength recommendation, the volume solver, and how the plan adapts to RPE and your week.
When you add an exercise, Logex proposes a full plan: warm-ups, a top set, back-offs or straight sets. You can edit every number. The plan is built by pure functions, so the same inputs always give the same plan, and every proposed load is a pound value rounded only at the display edge.
In plain terms. Logex looks at your last sessions on this exact lift, works out what weight gives your chosen reps at your chosen effort today, builds sets that lose a realistic amount of strength as you go, and nudges the set count by at most one if your week needs it.
Which choices win
When several sources disagree, the order of precedence (highest first) is:
- Explicit edits in the form.
- The routine’s values.
- Your saved defaults for that exercise and goal (relative loads, stored on the device per account).
- The learned warm-up dose (see Warmups and fatigue).
- Your last confirmed plan.
- Habits learned from history.
- Profile and starter defaults.
Confirming a plan stores it, but does not log any performed sets.
What history is read
Up to 8 prior sessions within 90 days of the exact exercise, excluding the current workout and any future-dated one. Sessions with a comparable rep range are preferred (the planner buckets reps as up to 6, up to 12, and above that). With fewer than 3 comparable sessions, the latest session is used.
Inferred counts are capped for sanity: at most 4 warm-ups and 6 working sets. You can set more yourself, up to 10 warm-ups and 12 working sets. These caps exist because a duplicated-history bug once produced inferred counts of 8.
Strength: today’s load
The Strength goal opens with reps and effort prefilled (editable). The daily recommendation, recommendStrengthDay, starts from your most recent top set (the heaviest normal working, volume or back-off set last time):
- If that top set was at RPE 7.5 or lower, you have at least 2 recent sessions, and it has not been 21 or more days since you did the lift, it suggests one more rep.
- If it has been 21 or more days, the default effort drops to RPE 7.
- Otherwise target RPE is at most 8, lower if your profile’s strength default is lower (a beginner with a strength goal starts at 7 at most).
- A last top set at RPE 9 or higher keeps the reps and eases the load toward RPE 8.
- Reps stay between 3 and 15.
The load is the inverse of the effort-aware Epley formula:
capacity = topWeight × (1 + (topReps + RIR_last) ÷ 30) × (m_today ÷ m_last) RIR_last = min(3, 10 − RPE), 0 if blank
weight = capacity ÷ (1 + (targetReps + (10 − targetRPE)) ÷ 30)
Worked example
Last time your top set was 200 × 5 at RPE 7, and you have trained the lift 3 times recently.
- The set had room left, so target reps become 6 and target RPE stays 8.
- capacity = 200 × (1 + (5 + 3) ÷ 30) = 253.3
- weight = 253.3 ÷ (1 + (6 + 2) ÷ 30) = 200
Same load, one more rep. With no RPE logged, Logex assumes no reps in reserve and never invents extra reps. With no usable history it uses your stored e1RM for today only, and with neither it asks you to enter a working weight rather than guess.
Building the plan
The default Strength structure is warm-ups, then a top set, then back-offs (a ramp or straight sets are one tap away, and the choice is remembered per exercise). History never picks the structure for you.
Back-offs: the first unlearned back-off is about 12% lighter (ratio 0.88). Its reps are what that load allows after one hard set, held between your target and two more. Later sets lose the per-set capacity loss from Warmups and fatigue. Straight sets keep the load and lose reps; ramp sets close to the top lower the whole ramp so the top stays the heaviest.
Rounding is deliberately conservative. A generated work load is rounded to a loadable step (5 lb or 2.5 kg), but never to more than 2.5% above the estimate, and after rounding no set after the top may need more than the capacity fatigue has left (1% tolerance), so Logex trims reps toward your target and then load. Consecutive generated back-offs never repeat the same load.
Worked example
Target 5 reps at RPE 8, top set 200 lb, 2 warm-ups, 3 work sets:
| Set | Load | Reps |
|---|---|---|
| Warm-up | 110 | 8 |
| Warm-up | 140 | 6 |
| Top | 200 | 5 |
| Back-off | 175 | 7 |
| Back-off | 165 | 7 |
Weekly guidance: plus or minus one set
For Strength with an automatic set count, the weekly stimulus can change the count by at most one. It reads the muscles this exercise trains, your logged sets so far (counted as in Weekly volume), the current draft and the working sets of other accepted plans. Warm-up rows reserve nothing, because warm-ups never count as volume.
- If a muscle this exercise trains directly has already reached its target (logged plus reserved at least the target), the count drops by 1, if there is more than one. A synergist at its target never trims a lift: triceps at target does not cut a bench session whose job is the chest.
- Otherwise, if the projection (logged plus reserved plus count × the exercise’s per-set credit, 1 or 0.5) still falls short of a target, it rises by 1, up to 12.
For example, chest at target 10 with 12 already logged gives bench minus 1. Target 10, 2 logged and 3 sets at 1 per set projects 5, which is short, so plus 1. Explicit counts always win, and a failed weekly read changes nothing.
Adapting while you train
After you log a work set with an RPE, the remaining unedited rows are recalibrated:
calibration = clamp( loggedWeight ÷ plannedWeight × (1 + (targetRPE − actualRPE) × 0.035) , 0.9 , 1.1 )
Logging 200 at RPE 9 against a target of 8 gives 1 × (1 − 0.035) = 0.965, so later unedited loads come down about 3.5%, and are rounded to a loadable step. The row is labelled “adjusted from your RPE”. Rows you edited by hand are never touched, and logged sets are facts: the plan never rewrites them. An extra set you add beyond the plan is suggested from your last work set with a fatigue drop, not as a repeat.
Volume: fit a tonnage target
Volume plans aim at working tonnage (weight × reps over work sets, warm-ups excluded). The baseline is either the average of your last 8 sessions in 90 days (“Match average”, default +0%) or your best logged session (“Beat best”, default +3%). Both percentages are editable.
target = baseline × (1 + increase ÷ 100)
The solver then picks reps (inside your range, default 8 to 12), a load and a set count. Every set keeps the same reps. Loads fall set to set by the capacity loss, and the whole thing is scored; the lowest score wins:
score = (shortfall ÷ target) × 3 + (overshoot ÷ target) + |sets − usual sets| × 0.04
+ max(0, 1 − firstLoad ÷ anchor) × 0.3 + |reps − midRange| × 0.002
The anchor is a load that gives mid-range reps at your target RPE (default 8). The plan may go lighter than that (it is a ceiling) but never below half the anchor, stays near your usual set count (up to 12 when you set the count yourself) and reports a shortfall rather than an impossible plan. Weekly stimulus does not add sets to a volume plan.
Worked example
Average of recent sessions 5,000, usual 4 sets, range 8 to 12, a 160 lb anchor: the best-scoring plan is 140 × 9 for three sets, then 135 × 9, a total of 3 × 1,260 + 1,215 = 4,995, within 0.1% of target. If a target is out of reach, you see “Closest realistic plan reaches X% of your target” whenever the plan lands under 97%.
Peak 1RM: ramp to a single
Peak predicts today’s max from the median of up to three recent session-best estimates. Each qualifying set uses the mean of Epley and Brzycki with bounded RIR, and sets above 10 reps, warm-ups, drop sets and future or current sessions are ignored. An actual maximal single stays its actual load. A stored estimate is used only as a fallback for the current day, and missing evidence produces an editable weight entry rather than an invented max.
sessionBest = max over qualifying sets of ((w × (1 + e ÷ 30)) + (w × 36 ÷ (37 − e))) ÷ 2 e = min(10, reps + min(3, 10 − RPE))
peak = median of up to the 3 most recent sessionBest values
The default progression is 50% × 5, 70% × 3, 90% × 1, then one predicted single, based on the bench-press warm-up protocol in a published load-velocity study. Other counts interpolate the ramp, ratio = 0.5 + 0.4 × i ÷ (count − 1), with reps of 5 up to 55%, 3 up to 75%, 2 up to 85% and 1 above. Rests are 60, 120 and 180 seconds (240 for the single). Applying one protocol across exercises is an app heuristic, not something the study validated, and everything stays editable.
Worked example
Three recent sessions: 200 × 3 at RPE 8, 195 × 5 at RPE 8, 190 × 5 at RPE 9. Session bests are 229.2, 237.3 and 224.3, so the median, and the predicted max, is 229.2. The plan is 115 × 5, 160 × 3, 205 × 1 and then a 1RM single at 230.
Deload
A lighter session built from your usual numbers: anchor about 85% of your usual working weight, reps equal to your usual reps limited to 3 to 8, RPE 6, half your usual working sets rounded up and at most 2 warm-ups. These are editable starting points, not a measured recovery prescription. With usual weight 200, 5 reps and 3 sets the deload is 2 sets of 5 around 170.
Bodyweight and assisted lifts
For pull-ups, dips, push-ups and assisted machines the planner works on the load actually moved (a share of your bodyweight plus the added weight, or minus the assistance; see The exercise catalogue, bodyweight and assisted loads). Only at the end is each proposed load turned back into what you type and snapped to the equipment’s step, so cutting assistance reads as progress, not as a lighter session. These plans start with no warm-up rows.
Limits and edge cases
- Conservative on purpose. Rounding, caps and the plus or minus one rule exist so that a plan is always something a person could actually load and lift.
- Duplicate history. An earlier bug duplicated sets in history. Logex now collapses copies of the same logical set (same exercise row, set number, load, reps and type) when it reads, which keeps counts honest.
- The plan does not know your day. It reads only this exercise. Daily advice is a starting point, not a measure of readiness, and weekly coverage never lowers effort.
- Kilograms. Everything is solved in pounds and snapped to steps in your unit, so a kilogram user gets 2.5 kg steps.