Computationally optimal arrangements of barbell plates
jacobbrazeal.wordpress.com
jacobbrazeal.wordpress.com
1 https://medium.com/@nessasaurus/only-in-america-fe7d2d5d461e also, I understand there are legitimately people going to gyms to exercise who may not have full use of their legs.
I typically load the bar so that I get my desired weight with the fewest number of plates. This keeps the weight slightly closer to the center of the bar and slightly more stable, also light plates have a tendency to wander around more than heavy plates (Except for deadlifts, I typically don't use clips in case I need to dump the weight).
Optimizing the changing of plates is not really of any interest to me, like you said the whole point of being at the gym is lifting weight, and as far as warmup sets go I never use anything but 45 and 25 lb weights until I get to my working set weight.
From a well-being/philosophical standpoint, maybe it's better to live life relaxed, and not one where you have to micro-manage every minute of your day to squeeze out every inch and penny of efficiency you can. That sounds like a horrible lifestyle, but I guess to each their own :)
The “reps” you get moving the weights don’t conform to any reasonable pattern for making gains. Worse, they’re tiring you out.
Criticizing plate optimization on your grounds sounds like a traditional conservative criticizing a progressive for changing the way things are done for no reason other than it being different. In this case, the difference is better in every way except for being too complicated for lunks.
1: https://github.com/ramity/athena/blob/master/notebooks/plate...
Side note: I've yet to do the calculations for kg sets, but I'm certain something similar to this exists.
Edit: I made a laughably simple mistake interpreting my results and corrected the above. Many thanks to those who replied and brought this to my attention (credited in the commit https://github.com/ramity/athena/commit/4a17a3d16058f850d09e...).
The bar is 20kg.
The weights (pairs of each):
1.25
2.5
5
10
20
you might want some 25kg bumpers for deadlifts
Metric plate math is trivial in comparison.
In the pounds case, dividing the common plate numbers by 5 lb yields:
1/2, 1, 2, 5, 9
Dividing the metric series by 2.5 kg (~5 lb) gives:
1/2, 1, 2, 4, (6), 8, (10)
Sure, if I have 2hrs, no problem - just do whatever is easiest to calculate. But if I only have 30min then I need to be economical with every movement.
Honestly though, the effort of increasing weights between sets is far less important than the effort of removing the weights when done (which some of the bros never bother doing).
When you are exhausted, removing 5s and 10s is practically a joy compared to removing 20s (45lb).
Also, if you want to save time AND if you have a super complicated workout that involves 30 different weights on the bar you are also doing it wrong. for each exercise you should have 2 weights: warmup and the weight you are working on. work with a weight that allows you to do 5 sets of 5 reps (+1 warmpup set). Do: bench press, overhead press, squats, barbell rows. that is all. you will get the workout done in 30 minutes. Compound movements with a barbell are all you need (before you gang up on me, remember we are optimizing for time and the best return for the effort).
Let's say I'm squatting 325lb / 140kg. I'll usually do 5/reps empty bar, 5 reps 135lb, 5 reps 225, 5 reps 275, then 3-5 "working" sets of 325 (3x5 or 5x5).
Do you think all those intermediate warmup reps are a waste of time?
https://athleticsweekly.com/performance/sprinting-warm-cool-....
My squat right now is at 280. I load 1 plate (135) and warm up with that. After that I go to 280 and do 5x5.
For squats I warm up with some body-weight reps, then do one set with empty bar, then ramp up adding 45lb plates until I reach my working weight. I'll do 3 to 5 warmup reps at each weight, with an intense focus on proper form.
OHP also seems to suffer a lot from warmup fatigue. I found that 45,95,135 works better than adding an extra warmup at 110-115, for example.
I do x3-4 on all my final warmup sets now since I'm really just using it to get my body ready to expect the weight, so the extra fatigue from x5 seems pointless.
Regarding OP though, I think it makes sense to just adjust your warmup sets to make loading plates easy. Like I was planning to bench 205 today, so I did 115,165,205 because I could load 35, 25, 2x10 to make that easy. Maybe it'd be better to do 170 instead of 165, but I don't think warm-ups need to be an exact value. You're just getting used to feeling the weight for the day.
DYEL? There is no safe way to have a single warmup set for a high deadlift weight. It feels like you recently discovered Stronglifts.
Let's share some stats here if you want to go that route. tell me how much you lift and I'll do the same.
Classic 5x5 stalls out hard and doesn't really have a plan for progression after that. It's adequate to maintain a decent baseline but the same time commitment had me progressing in strength and conditioning.
I think if you can do bench 2 plates, squat 3 plates and deadlift 4 plates you are already stronger than 90% of all people (including people that do all this crazy programs).
If you can get that done in 30 minutes with 2 workouts per week I am calling it a massive win. It allows you to maintain muscle and bone mass as you age. Hitting a plateau is fine with me.
Now, if your goal is not that it is fine, but ultimately it's about what your goal is.
Consider how the state space is encoded -- it isn't valid to model each node in the graph by total weight, as that erases the detail of which plates are currently equipped, which we need to determine the edge costs. That's shown in the diagrams, where each node is represented as a multiset of plate weights.
Another part of the state space encoding is subtler: it's only valid to visit a node with goal weight W if we have previously visited all goal weights W' with W' < W. This constraint is implicitly encoded by the nodes and edges considered in the transition graph, and the ordering of the nodes from left to right. For this problem there's no need to augment the state space with an extra state variable to track how many goals or which goals we've already achieved, that's implicitly tracked through the total weight and the construction of the transition graph. Nodes and edges that violate this have been excluded from the transition graph, e.g. there's no edge drawn from node {0} to node {10, 25} -- as that transition causes the path to fail to visit a node with total weight 15 and total weight 25.
Suppose we were to change the objective from "visit a sequence of nodes with these specific goal weights [W_1, ..., W_n] in ascending order" to "visit a sequence of nodes with these specific goal weights in _any_ order". The problem becomes _much_ harder, a variation of the traveling salesman problem, and starts to resemble some industrial problems, e.g. some kind of resource constrained vehicle routing delivery problem.
Brute force enumeration for small problem instances is pragmatic. For larger problems, Dijkstra's algorithm would certainly work, and would also work for more general problems where we're given a graph containing cycles.
For this barbell plate problem we could also exploit the acyclic structure and use bottom-up dynamic programming: maintain a table tracking the cost of the cheapest path to each node, and an auxiliary table tracking the predecessor node or incoming edge per node where the cheapest path was attained, then fill out the tables "bottom up" (or left to right per the diagrams). Less general, but it dodges the need to do a bunch of work maintaining a priority queue of partial paths.
Another fun connection is to the Viterbi algorithm - a completely different real world application to barbell plate optimization - decoding a sequence of noisy observations and trying to reconstruct the most probable trajectory of unobserved states - but the abstract mathematical model & way to attack it computationally is very similar -- construct a DAG, a solution is a least-cost path through the DAG (ignoring all the problem-specific details going into the definition of state spaces, transition graphs, edge costs, etc). c.f. "The Viterbi Algorithm at 50 (2017)" from a couple of months ago: https://news.ycombinator.com/item?id=35897851
edit: i guess another connection is the knapsack problem mentioned in this post -- it can also be framed as a least-cost path through a DAG, and computed bottom-up.
For this barbell plate optimisation problem, the acyclic structure comes from the monotonic increasing sequence of goal weights. For the Viterbi algorithm's problem of inferring a most probable sequence, the acyclic structure comes from each observation being ordered by the observation time. For the knapsack problem, there isn't really a natural problem defined ordering of item take/leave decisions, but the decisions can be sequenced in any arbitrary fixed order.
(Of course the optimal path is to round your warmup weights to the next plate in reach. Who cares about dividing warmups into exact tranches?)