What is a bottleneck?


Introduction
The productivity of real-world systems is often limited by bottlenecks. Intuitively, a bottleneck is a component of a system that is used to its capacity, making it impossible to achieve better performance by changing the decision variables.

An example
Let me first give an example of bottlenecks. Assume that you are running a mine operation where you have some trucks moving material from some pits to a stockpile. The material in the pit is dug with the rate of 1,000 tons per hour. Now, assume you have 18 trucks, each may move 50 tons per hour of material from pit to the stockpile. (this is a super simple example, where are the loaders? the capacity of the stockpile?...)

Where is the bottleneck in this system? Look at the problem this way: if you want to invest in something, buy new equipment, what would you buy? A new truck? A new digger? If you buy a new truck, then you may move $19 \times 50=950$ tons per hour, that would actually increase the rate of material movement from $18 \times 50=900$ tons per hour. But if you buy a new digger, you would generate no more material! I mean, nothing. Because you are already using your 18 trucks to their capacity. Hence, your bottleneck is indeed your trucks, therefore, don't waste your money by buying a new digger for now. Interestingly, after adding two trucks to your fleet, your bottleneck moves to the digger!

Importance of bottlenecks
Usually, companies are not only interested in finding the best ways to schedule their current resources so that their benefits are maximized (optimization), but, to increase the productivity, they also conduct some analyses to find "bottlenecks" in their system and eliminate or keep an eye on them. Indeed, if you invest anywhere else on your system than the bottlenecks you are wasting money. Also, your bottleneck is the component that needs the most attention. You will get the most damage if your bottleneck is damaged in some ways, than other parts. So, you need to keep an eye on it.

"An hour lost at a bottleneck is an hour lost for the entire system. An hour saved at a non-bottleneck is a mirage" [1].

There is another opposite argument as well. If you want to save money, find non-bottlenecks and sell/exchange for other equipment that goes better with your bottlenecks! In our previous example, if you sell your digger and buy a cheaper one with the digging rate of 900 t/h, then you still get the same productivity! This, however, tightens the use of another equipment in your system too, that could be alarming. Bottlenecks trigger topics like risk analysis and optimal investment. The risk analysis in this context refers to the analysis of the relationship between equipment shutdown and overall damage. Of course, the bottleneck component is the most sensitive one. Optimal investment is also related to bottlenecks, as discussed earlier.

Why do they exist
In the sense of the real world, constraints are related to resources. Let's have a recap of constraints: constraints formulate limitations in the system, number of trucks, loading rate, so on. There is always a constraint at every activity, as there is always a limitation on every resource.

In a real-world system designed reasonably well, at least one of the resources is used to its capacity (so-called active), meaning that the value of one of the constraints is very close or equal to its boundary. 

For example, all trucks are used in our example (above), hence the constraint "number of trucks <= 18" is fulfilled to its capacity. This is always the case, at least one constraint is used to its boundary because, otherwise, the system involves more resources than it needs OR the market doesn't have the capacity for the designed system; hence, no further margin can be generated because of the market, not the resources. This means that, in the optimization formulation of a system, the bottleneck is actually one of the constraints. You find that constraint, you find your bottleneck. To eliminate that bottleneck, you need to "push" the boundaries of that constraint, e.g., push the boundary value 18 to 19 by buying a new truck. This involves buying stuff (more trucks, or faster trucks) that is basically the investment plan.

Depending on the complexity of the system, finding the bottleneck can be done using different methods. For example, if the whole system has been modeled by a linear or integer program then the means of Average Shadow Price provides a measure for bottlenecks. If not, tools like what-if analysis based on discrete event simulator or other methods like the ones described in [2] and [3] could be useful.

A more abstract example:
Let's assume the objective function is an ellipsoid, and we have two linear constraints, \(g_1\) and \(g_2\) (see the figure below). The darker the area, the better objective value. Also, the feasible are is between the two constraints.



It is clear that moving ("pushing") the constraint \(g_1\) opens new opportunity in a way that better solutions can be found in the feasible regions. However, changes in \(g_2\) do not contribute to finding better solutions. This means \(g_1\) is a bottleneck.

See [2] and [3] on some further theoretical and applied discussions on this topic.


[1] E. M. Goldratt and J. Cox. The goal: a process of ongoing improvement. Gower, 1993
[2] Bonyadi, M. R., & Michalewicz, Z. (2016). Evolutionary computation for real-world problems. In Challenges in Computational Statistics and Data Mining (pp. 1-24). Springer, Cham. Download
[3] Bonyadi, M. R., Michalewicz, Z., & Wagner, M. (2014, December). Beyond the edge of feasibility: analysis of bottlenecks. In Asia-Pacific Conference on Simulated Evolution and Learning (pp. 431-442). Springer, Cham. Download



Like always, this is only my opinion based on my experience and only a point of discussion. I would love to discuss this topic further in the comments.


By R. Bonyadi



Comments

Popular Posts