Про теорию ограничений

Кто фанат теории ограничений? Я фанат теории ограничений. Поэтому пост кратко про суть теории ограничений.

Возьмем за данное, что многие процессы сводятся к минимизации некого функционала. Соответственно, сами процессы можно рассматривать как те или иные методы поиска минимума. Также вспомним, что задачи минимизации и максимизации эквивалентны и нет разницы, какую именно рассматривать.

Так вот, для целей обьяснения ограничимся одной областью, которая используется и в самой книге Элияху Голдратта (создателя теории ограничений): производством. Применить теорию для других областей уже дело техники и аналогии. Конечной целью производственного процесса является получение прибыли, значит процесс производства - процесс максимизации количества полученной прибыли.

Далее, лично я выделю два фактора, которые в книге не выделялись, и которые я не видел, чтобы прям использовали, хотя может быть и используют под другими названиями, но все же: последовательность и повторяемость. В процессе производства (глобально, включая транспорт, продажу и тд и тп) - для получения прибыли нужно продать готовый продукт - для получения продукта нужно собрать его из составных частей - составные части нужно получить из промежуточных продуктов - ... - первые промежуточные продукты нужно сделать из исходных материалов - исходные материалы нужно купить В упрощенном виде процесс производства выглядит так. Хоть тут и есть некоторая доля, допускающая распараллеливание (детали для финального продукта можно делать параллельно), все равно бОльшая часть процесса строго последовательна и эту последовательность необходимо соблюдать. Продолжая эту идею, можно обобщить ее на зависимость задач, представляемых ациклическим графом, тогда порядок будет топологической сортировкой (если не рассматривать параллелизм) или критический путь (если рассматривать неограниченный параллелизм). Первый фактор - последовательность, присутствует. Второй фактор - повторяемость, так же есть: во-первых, редко продукты заказывают поштучно, чаще целыми партиями, а значит промежуточных частей тоже нужно несколько. Во-вторых, после реализации одного заказа, поступят новые заказы, производство не будет останавливаться (ну если только не обанкротится завод), возможно даже, что завод выполняет несколько задач параллельно (ну или номинально параллельно). Тем самым последовательность задач выполняется не один раз, а много, значит есть повторяемость.

Из этих двух факторов можно выделить следующую плюс-минус общую модель. Во-первых, вспомним, как загружается "параллельно" последовательность станков, то есть, есть n станков, m деталей и каждую деталь нужно обработать на каждом станке, причем строго в порядке с первого до последнего. Тогда делаем следующее: 1. на первом станке обрабатываем первую деталь, назовем ее d1 2. d1 обрабатываем на втором станке, d2 (новая деталь) обрабатываем на первом станке 3. d1 - третий станок, d2 - второй, d3 - первый (надеюсь понятна закономерность, если нет, стоит это аккуратно нарисовать на листочке или почитать про https://en.wikipedia.org/wiki/Instruction_pipelining ) x. и так далее Через n шагов все станки будут загружены, через m+n(плюсминусодин) все детали будут готовы. Гораздо лучше, чем за mn шагов обрабатывать каждую деталь по очереди на всех станках. В реальности оказывается, что прогресс не стоит на месте, и на станках можно обрабатывать несколько деталей. Но вот проблема - сколько деталей можно обрабатывать зависит от станка. Пусть на первом станке можно обработать 9 деталей за раз, на втором 10, на третьем 8, а вместо четвертого станка стоит слесарь дядя Вася, который обрабатывает 3 детали за раз. Тогда наш план сверху такой: 1. обработать 9 деталей (d1) на первом станке 2. обработать 9 деталей (d2) на первом станке, 9 (d1) обработать на втором станке 3. обработать 9 деталей (d3) на первом станке, 9 (d2) обработать на втором станке, 8 (d1) обработать на третьем станке, 1 (d1) ждет перед третьим станком 4. обработать 9 деталей (d4) на первом станке, 9 (d3) обработать на втором станке, 1 (d1) и 7 (d2) обработать на третьем станке, 2 (d2) ждет перед третьим станком, 3 (d1) обрабатывает Вася, 5 (d1) ждут Васю 5. обработать 9 деталей (d5) на первом станке, 9 (d4) обработать на втором станке, 2 (d2) и 6 (d3) обработать на третьем станке, 3 (d3) ждет перед третьим станком, 3 (d1) обрабатывает Вася, 3 (d1) и 7 (d2) ждут Васю x. и так далее Оказывается перед третьим станком медленно накапливается очередь, а перед Васей очередь накапливается еще больше. Более того: за раз Вася обрабатывает максимум 3 детали, а значит на все станки после него максимум пойдет 3 детали за раз, а значит за раз вся система (!) выдаст не более 3 товаров за раз (когда до них вообще дойдет дело). По другому это можно представить как трубы воды разной ширины (да, очень похоже на самом деле). На первой картинке ниже есть трубы с разной шириной: 9, 10, 8 и 3, как производительности наших станков. Трубы находятся в строго таком порядке и, если налить в них воду, то она будет течь, как показано красным цветом на второй картинке ниже: сначала будет течь 9 единиц воды, через вторую трубу тоже 9, из этих 9 единиц воды через третью трубу будет успевать протекать 8 единиц воды за единицу времени, а из этих 8 через четвертую трубу в итоге будет выливаться только 3 единицы воды за раз. Опять имеем >последовательность< труб, через которые >потоком< течет вода и производительность всей системы ограничена последним узким узлом.

Получаем, что производительность системы (при допущениях, указанных выше) обусловлена исключительно самым медленным звеном в последовательности. Время терминологии: в теории ограничений такое звено называется узким звеном или просто узким местом. Другими словами, узкое звено »>ограничивает«< систему. В примере выше, можно не теряя абсолютно ничего в производительности сбора итогового продукта, на всех станках до Васи делать не по 9, 9 и 8 продуктов за раз, а по 3, 3 и 3: больше просто не успеет пройти дальше!

Это краткое описание теории ограничений, без деталей про получающиеся метрики оценки производства и способы управления производством в свете полученных знаний. Что хочется привести в пример, это третью картинку в приложении к посту (да, картинки две, но выше вы поверили, что первая картинка это на самом деле две картинки). Не совсем, конечно, про то, что описывалось до этого, но что-то близкое.