Как я смоделировал сортировочный центр OZON (ч.2)
В прошлом посте рассказал, как вообще оказался на Робозоне и дошёл до финала. Теперь про сам проект. Задача была связана с сортировочным процессом. И мне не хотелось просто написать программу, которая на вход получает данные, а на выходе выдаёт какой-то результат. Хотелось понять сам процесс. Поэтому я решил сделать имитационную модель. Если совсем просто — я сделал виртуальную версию системы, в которой можно запускать разные сценарии и смотреть, что с ней происходит. В модели было 15 связанных операций, очереди, ограниченные ресурсы, маршрутизация и управление WIP. Например, возьмём один заказ. Он поступает в систему и начинает проходить последовательность операций: поступление → обработка → сортировка → ожидание → следующая операция → маршрутизация → дальнейшая обработка → выход из системы. На каждом этапе происходит одно из двух: заказ либо сразу обрабатывается, либо встаёт в очередь, если нужный ресурс занят. Допустим, заказ дошёл до операции сортировки. Свободный ресурс есть — заказ сразу идёт дальше. Если оба ресурса заняты — заказ остаётся в очереди. Через некоторое время ресурс освобождается, заказ забирают в обработку, после чего он продолжает свой маршрут. И так заказ проходит через связанные между собой операции, пока не выйдет из системы. При этом рядом с ним всё время находятся другие заказы. Поэтому изменение одного этапа влияет не только на конкретный заказ. Если какая-то операция начинает работать медленнее, очередь перед ней растёт, заказы дольше находятся внутри системы, а нагрузка начинает смещаться на другие участки. И вот здесь можно запускать эксперименты. Например: что будет, если на операции сортировки добавить ещё один ресурс? Или: что произойдёт, если увеличить скорость одной из операций? Модель прогоняет сценарий и позволяет сравнить результат с исходным состоянием. Для этого я и сделал сценарное моделирование What-If. При этом модель должна была не просто что-то считать, но и контролировать корректность расчёта: воспроизводимость, материальный баланс, процессы и состояния системы. А сверху я сделал визуализацию, чтобы можно было видеть, как заказы проходят через систему и где именно начинают появляться очереди и ограничения. По сути, я построил виртуальную систему, в которой можно взять поток заказов, пропустить его через связанные операции и проверить, как изменение отдельных условий повлияет на весь процесс. И именно вокруг этого я строил весь проект. В следующем посте могу показать, как эта модель была устроена технически и как один заказ проходил через расчётное ядро.