In two previous two posts we checked whether we were starving our simulated manufacturing line's bottleneck by eyeballing a graph of the bottleneck's queue against a high roll of 6:
A more numerical to judge whether a station is starved is to calculate how much of its capacity it's able to use:
(defn utilization [{:keys [capacities processed stations]}]
(if (and capacities processed)
(map / processed capacities)
(map (constantly 0) stations)))
(-> constrained-steps second utilization)
(1 1 1 4/5 4/5 1)
There were only a few rolls when the bottleneck wasn't able to operate at full capacity. Good! What about the other stations?
They're not working at full utilization. Let's see some averages:
When we think about optimizing the manufacturing line, one of the things we might want to improve is station utilization, but look at utilization under our original scenario, where all the stations are less productive:
Utilization was higher before we boosted productivity. That makes sense, of course, but if we try to increase utilization now that we have improved productivity, we'll have to provide more pennies to the line, which increases work in progress. A drop in utilization may have lower costs associated with it than having too much work in progress, so we might prefer to have stations working below full capacity than to flood the line with work just to keep everyone busy.
In fact, lower utilization is the mechanism by which we reduce work in progress. Less utilization means a station has spare capacity, which is necessary for handling bursts of new work. Because of how we've modified their dice to roll 4 instead of 1, 2, or 3, our non-bottleneck stations can expect to receive 4 pennies two-thirds of the time, but occasionally they'll get 5 or 6 pennies. If those stations didn't have spare capacity, those pennies pile up in their backlog. That would increase utilization, but at the expense of having more work in the line waiting to be finished.
That illustrates some of the danger of evaluating metrics in isolation. If increasing output and decreasing work in progress are the primary measures of revenue and expense, utilization is a secondary measure. Optimizing utilization may actually hamper the line's performance.
This has personal application too. As a software developer, I like to have have enough work to keep busy, but having some slack also means I have spare capacity to fix things when problems arise.
If you have other observations about utilization, feel free to email me.