Оптимизация завода делается на разных уровнях. Вот пост про 48-недельное планирование (верхнеуровневая кластеризация заказов в серии) с посуточным планированием и графикованием цеха (что и в какой последовательности производить, чтобы потребовался минимум переналадок) с шагом планирования 10 минут.
Я занимался графикованием одного станка, правда, размером с огромный цех в несколько футбольных полей. Таких задач на заводе сотни, и вот я один из тех айтишников, кто их решал. Верхнеуровнево про работу цеха проката есть тут, поэтому сразу без вступлений давайте я расскажу про оптимизацию.
Прокат
На входе — сляб: это огромный слиток прямоугольного сечения, пролившийся через ручей выплавки стали и ставший твёрдым.
На выходе — этот же сляб, только в виде длинного листа, скатанного в рулон. Это называется «горячекатаный рулон» (нагретый до высокой температуры сляб после пластической деформации). Тот агрегат, для которого я писал модель, — это «Стан-2000». Он, собственно, прокатывает, через него проходит практически весь металл производства, кроме тех слябов, которые кому-то продаются готовыми.
На вход стана подаются предварительно нагретые слябы, проходящие через множество валков (имеют форму цилиндра, сделаны из обычного чугуна — гораздо твёрже, чем горячая сталь слябов, чтобы её можно было раскатывать), которые сжимают сляб и превращают в горячекатаный рулон. Причём сляб очень сильно сжимается: максимальная его толщина — 250 миллиметров, а толщина горячекатаного рулона может быть меньше полутора миллиметров.
Схема процесса проката металла
Задача планировщика стана — соблюдать последовательность прокатки слябов исходя из доступного наличия на складах. При этом требуется соблюдать технологию производства и порядок следования заказов. Стан не может непрерывно прокатывать металл: со временем валки изнашиваются, и их требуется менять на вновь подготовленные. Считается, что до смены валков можно прокатать не более 3,5–5 тысяч тонн металла. Конечно, можно и больше, но всегда есть риск, что что-то пойдёт не так и процесс производства притормозится на несколько часов.
Учитывая, что весь металл проходит через стан, такой казус приведёт как минимум к сдвигу дат отгрузки всех заказов. Поскольку склады имеют ограниченную вместимость, то придётся сокращать выплавку слябов в конвертерных цехах, а это приведёт к необходимости останавливать агрегаты.
Получается следующий циклический процесс: прокатываем металл -> перевалка (замена) валков -> прокатываем металл -> перевалка (замена) валков и т. д. Последовательность слябов, которые прокатываются между двумя перевалками, называется монтажом. В связи с этим графикователь и назвали Оптимизатор монтажей.
Существует два типа валков: рабочие и опорные. Рабочие валки меняются после каждого монтажа, опорные — раз в две недели (после очередного монтажа). Упрощая: опорные просто держат полосу, а рабочие её формируют и от этого изнашиваются куда сильнее. Замена рабочих валков происходит за 10–12 минут, опорных — за семь часов. Во время переналадки валков «Стан-2000» останавливается.
Планировщик составляет монтажи, которые отображаются на диаграмме Ганта следующим образом: слева от оранжевой вертикальной линии — прокатанные монтажи, справа — плановые. Переналадка валков прерывает прокатанные монтажи, а в плановых она отображается как жёлтый прямоугольник в начале каждого монтажа (строка «Прокатка слябов»).
Последовательность монтажей на диаграмме Ганта
Изначально планировалось, что Оптимизатор монтажей будет строить несколько монтажей за один расчёт. Но в процессе анализа выяснилось, что планировщики стана продумывают и планируют свою работу на два-три монтажа вперёд. Получается, что суммарно в системе как плановые находятся четыре-пять монтажей: один из них прокатывается, другой нагревается в печах, для третьего крановщики собирают слябы со склада по уже сформированному заданию, а остальные ждут своей очереди.
Последовательность монтажей в рабочей системе
Конечно, планировщики могут составить больше монтажей, но есть перечень требований к слябам. Они должны находиться на складе ЦГП (перед станом), быть аттестованными, зарезервированными под заказ, мобильными (чтобы к ним можно было подобраться на кране). Кроме того, есть возможность использовать слябы «с передачи» (находящиеся в пути с других складов на склад ЦГП), но это всегда риск. Склад ЦГП вмещает примерно 40 тысяч тонн металла, но доступно для планирования — около 20 тысяч тонн (это суточный объём прокатки стана). Кажется, что раз в монтаже может быть в среднем четыре тысячи тонн металла, а доступно — 20 тысяч тонн, то всегда можно составить минимум пять монтажей. Но не всё так просто!
Существует несколько причин. Во-первых, вследствие износа валков нельзя во всём монтаже прокатывать только узкий металл или только широкий: валки не выдержат, нужно нагружать их относительно равномерно, иначе пойдёт брак. Во-вторых, существует перечень правил, согласно которым можно сделать вывод о возможной последовательности прокатки металла. Исходя из этого может так оказаться, что из 20 тысяч тонн получится максимум два-три монтажа. Учитывая, что они должны следовать календарному плану, а также не должны перегружать последующие цеха, может получиться и меньшее количество монтажей.
То есть в идеальном мире мы делали бы монтажи только после полного износа валков. В реальном же нужны два условия:
- Слябы для следующего цикла доступны.
- Ширина готового изделия соответствует состоянию валков.
Уже многие годы эта задача решается вручную работниками цеха более-менее успешно, но не всегда оптимально. Поскольку «Стан-2000» — «бутылочное горлышко» всего огромного производства, мы хотим как минимум знать, что решения оптимальны, а ещё лучше — гарантировать их оптимальность. Выигрыш даже нескольких минут в день даёт, например, пару дополнительных подъёмных кранов для страны.
Составление монтажа
На входе в оптимизатор:
- Номер плавки. Плавка — группа слябов с одинаковыми химическим составом и геометрической формой. В случае разливки слябов на установке непрерывной разливки слябов (УНРС) в два ручья с разным сечением их геометрическая форма в плавке может быть разной. Тогда говорят, что плавка состоит из двух полуплавок с разным сечением разливки.
- Номер серии. Серия — группа плавок с одинаковым химическим составом.
- Геометрические характеристики сляба (ширина/толщина/длина).
- Масса сляба.
- Марка металла.
- Склад, на котором находится сляб.
Перечень слябов в рабочей системе
- Плановая дата начала прокатки (приходит из мастер-системы).
- Маршрут (через какие агрегаты проходит металл данной потребности).
- Открытый объём (разница между плановым и прокатанным объёмами металла).
Перечень потребностей в рабочей системе
- Сляб, который прокатываем.
- Потребность, под которую прокатываем сляб.
- Геометрические характеристики прокатки (ширина/толщина/длина).
- Марка металла (по прокатке, по жёсткости, по нагреву и т. д.).
- Цех (для части цехов есть несколько подуровней).
- Объём металла в монтаже (минимальный и максимальный).
Перечень направлений в рабочей системе
И ещё одно — приоритетный или запретный металл. Не все ограничения и правила можно заложить в оптимизационной модели. Иногда это технически трудно, иногда это невозможно ввиду человеческого фактора приёма решения. Поэтому было решено дать возможность пользователю указывать приоритетный и запретный металл.
Приоритетный металл — тот, который желательно добавить в монтаж. Например, это металл, который должны были прокатать в прошлом монтаже, но по какой-то причине не успели, поэтому его срочно нужно запланировать в текущем монтаже.
Запретный металл — тот, который нельзя прокатывать в монтаже. Например, из-за пересортицы: данный металл случайно прокатали под другую потребность, а из-за задержки в обратной связи в исходной системе мы не сразу это увидим. Либо произошла поломка клетей на стане, временно заблокирован пролёт на складе — может возникнуть ситуация, когда какой-то металл сейчас нельзя прокатывать, а возможности исходной системы не позволяют ввести такое ограничение.
Характеристики металла:
- Максимальный объём прокатки в монтаже (для приоритетного металла). Иногда нужно прокатывать не весь приоритетный металл, поэтому вводится такое ограничение.
Форма задания приоритетного и запретного металла
- Параметры расчёта.
Форма задания параметров расчёта
- Неизменяемые параметры монтажа.
- Допустимые перестройки в монтаже.
- Группы металла по легированию, переходы между группами.
- Группы металла по жёсткости, переходы между группами.
- Группы металла по нагреву, переходы между группами.
- Группы металла по прокатке, переходы между группами.
- Правила прокатки.
- Максимизация обязательного горячего посада (ОГП). Динамная, или трансформаторная сталь не должна остывать на складах (иначе она потеряет качество), поэтому её нужно прокатывать сразу же, как только она выплавлена.
- Достижение минимального объёма «особого» металла (легированный/тончайший/рифлёный металл и т. д.).
- Минимизация некомплектных полуплавок. Нельзя оставлять полуплавку частично «распечатанной» (по возможности прокатываем всю полуплавку).
- Минимизация незакрытых потребностей. Часть потребностей нужно планировать в монтаже полностью (обычно это потребности с открытым объёмом до 200 тонн).
- Следование направлениям.
- Максимизация приоритетного металла.
- Следование целевому весу монтажа.
- Максимизация объёма «особого» металла.
- Минимизация незакрытых потребностей (до 400 тонн).
- Минимизация перестроек в монтаже.
- Максимизация срочных потребностей.
- Следование календарному плану.
- Минимизация переходов по группам жёсткости, толщине проката, плавкам.
Это основные КПЭ, всего в оптимизационной модели их 25 штук.
Построение математической модели
Данную задачу мы решали, используя подход constraint programming (CP). Здесь можно прочитать про то, как он работает, на простом примере. Конечно, внутри не всё так просто устроено, но в базовом варианте именно так всё и работает.
Саму задачу определили как задачу теории расписаний.
Существуют и другие подходы к описанию задачи, например, MIP (mixed-integer programming), MILP (mixed-integer linear programming). Однако при описании правил и ограничений возникают сложности, например, учёт ограничений по очерёдности прокатки металла (переходы между группами металла, необходимость определённой прослойки металла).
Добавлю: мы не претендуем на то, что наш подход к решению задачи — единственно верный. Это было комплексное решение, которое также включало в себя быстроту разработки оптимизационной модели, сложность добавления нового правила/ограничения, скорость нахождения решения и качество самого решения. Мы не следовали критерию «получить лучшее решение» — так называемому глобальному оптимуму. Основная задача — составить черновик монтажа, чтобы планировщик мог внести в него изменения.
Кстати, эти изменения не всегда доступны оптимизатору, например, может возникнуть ситуация, когда определённый переход по толщине запрещён для оптимизатора, но планировщик его запланировал. Это могут быть невнимательность планировщика (тогда исходная система уведомит его об этом) или острая нехватка металла (металл требуется срочно запланировать, но на складе нет настроечного металла для перехода на данный сортамент, поэтому планировщик по согласованию с группой проката может запланировать такой переход).
При написании математической модели необходимо определить следующее: переменные, ограничения, целевую функцию оптимизации (КПЭ определили ранее как возможные компоненты целевой функции оптимизации). При решении задачи теории расписаний удобно оперировать переменными, которые имеют начало, окончание и длительность действия.
При использовании подхода CP мы можем создать такого рода переменные, они называются интервальными. У них можно задать длину (фиксированную или динамическую), начало и окончание (фиксированное или зависящее от условий), интенсивность (например, в будни задача выполняется за два часа, а в выходные — за четыре) и ресурс (фиксирован или нет). В нашей задаче в качестве интервальной переменной взяли операцию горячей прокатки.
Решать полученную задачу «в лоб» — достаточно трудоёмкое занятие с вычислительной точки зрения. Приходится в одну модель вносить много специфичных бизнес-требований, из-за которых она становится большой, и для решения поставленной задачи потребуется потратить значительное время. Причём не всегда помогает добавление вычислительных мощностей — так называемое вертикальное масштабирование.
Применительно к нашей задаче постоянное увеличение количества задействованных потоков/процессов не приводит к постоянному увеличению производительности. Рано или поздно мы достигаем ситуации, когда дальнейшее увеличение вычислительных ресурсов приводит к ухудшению производительности, поэтому для каждой задачи мы отдельно определяем оптимальное количество потоков/процессов.
Нашу задачу мы решаем не с помощью одной «большой» оптимизационной модели, а с помощью пяти последовательных оптимизационных моделей. Каждая отдельная модель использует решение, полученное предыдущей моделью, и пытается его улучшить. Давайте кратко рассмотрим каждую из них последовательно:
- Первая оптимизационная модель использует агрегированные операции горячей прокатки. Агрегация производится по нескольким параметрам: это геометрические характеристики сляба и операции горячей прокатки, группы марок по выплавке, прокатке, жёсткости и т. д. В некоторых случаях мы рассчитываем усреднённый вес и длину сляба, а также длину операции горячей прокатки в каждой плавке: эти манипуляции позволяют сократить количество переменных без существенного нарушения ограничений при переходе на новые величины (заранее определяем допустимое отклонение). Также агрегация до групп операций горячей прокатки позволяет решить проблему симметричности решения: мы избавляемся от необходимости учитывать точное положение сляба в цепочке одинаковых слябов.
- Первая модель — самая большая изо всех. На вход подаётся весь доступный для планирования металл, поэтому эта модель решается дольше остальных. Задача первой модели — собрать черновик монтажа, который на последующих этапах будет дополняться и детализироваться. Если общее время решения всех оптимизационных моделей взять за 100 %, то первая модель занимает примерно 85 % общего времени расчёта.
- Вторая оптимизационная модель старается улучшить результат первой, поэтому она «стартует» с решения первой оптимизационной модели. На вход подаётся уже не полный набор данных, а усечённый по определённым правилам: в отдельном блоке определяется металл, который может быть добавлен в текущее решение и должен улучшить его. Ограничения и компоненты целевой функции второй модели схожи с предыдущей. Можно сказать, что данная модель отличается от предыдущей тем, что она «стартует» с определённого исполнимого решения и работает на усечённом наборе данных. Эта модель занимает примерно 7 % общего времени расчёта.
- Третья модель работает с полученным решением из предыдущей модели и старается перестановкой переменных улучшить предыдущее решение. Для чего это требуется? Как упоминалось ранее, в исходной задаче достаточно много компонентов целевой функции, которые сложно уместить в рамках одной модели. Поэтому в предыдущих расчётах часть низкоприоритетных компонентов целевой функции моделировалась условно, а в третьей модели — уже детально, например, перестройки в монтаже. Можем сказать, что по итогам работы третьей модели мы получаем итоговую структуру монтажа, но с некоторыми оговорками, о которых расскажем дальше. Третья модель занимает примерно 2-3 % общего времени расчёта.
- Четвёртая оптимизационная модель не меняет структуру монтажа — она детализирует группы операций горячей прокатки до операций. Если раньше в целях улучшения производительности решения мы агрегировали часть переменных, то на данном этапе нужно выполнить обратную задачу. Причём для этого необходимо было написать отдельную модель: простой постобработкой поставленная задача не решается. Дело в том, что часть операций горячей прокатки относится к так называемому объединённому стандартному продукту: это когда один и тот же сляб может быть прокатан под разные потребности. Иными словами, обычно при резервировании сляб назначают на одну потребность (прокатывают под одну толщину), но в случае объединённого стандартного продукта он может быть прокатан под несколько толщин (от 16 миллиметров до 1,5 миллиметра с определённым шагом). Поэтому один и тот же сляб может иметь различное множество операций горячей прокатки (их количество равно количеству потребностей, под которые он может быть прокатан). Отсюда делаем вывод, что просто детализировать группу операций горячей прокатки до совокупности операций горячей прокатки не выйдет: нужно контролировать, что один и тот же сляб не будет использован в разных группах. Данная модель занимает примерно 5 % общего времени расчёта.
- Пятая модель — самая простая, она занимает меньше 1 % общего времени расчёта (менее одной секунды). Её задача — детализировать операции горячей прокатки до слябов. Сложность вызывают лишь слябы объединённого стандартного продукта: на них ставим ограничение, что один и тот же сляб может быть использован только один раз. Так как в предыдущих моделях мы проконтролировали слябы объединённого стандартного продукта, то пятая модель всегда будет иметь решение.
Мы обратили внимание, что монтажи бывают разными по сложности:
- Простые — используется стандартный металл, который практически всегда совместим между собой.
- Сложные — используется легированный металл, тончайший металл и т. д., который трудносовместим с остальным металлом.
- Комбинированные — может быть комбинация «сложный + сложный», например, или «легированный + тончайший».
Применительно ко времени расчёта монтажа получаем, что простые могут быть решены за меньшее время, нежели сложные и комбинированные.
Для некоторых типов монтажей можно без потери качества решения сократить общее время выполнения расчёта. В связи с этим мы начали собирать статистику, в которую входят время выполнения расчёта, время последнего найденного решения, значения компонентов целевой функции и т. д.
По итогам анализа данной статистики мы корректируем время работы каждой модели, фиксируем чувствительные для оптимизационных моделей параметры расчёта. Всё это позволяет гибко настраивать наше решение: мы не только совершенствуем оптимизационные модели, но и определяем дополнительные возможности для улучшения быстродействия нашего решения.
Оценка качества решения
В роли метрики качества полученного оптимизационного решения была согласована следующая метрика: процент строк монтажа из Оптимизатора. Давайте дадим определение строке монтажа.
Строка монтажа — это объём металла с одинаковыми характеристиками, а именно:
- Геометрические характеристики сляба (толщина и ширина).
- Геометрические характеристики операции горячей прокатки (толщина и ширина).
- Марка металла.
- Цех отгрузки металла.
- Потребность и т. д.
Всего — больше 10 характеристик. Это своего рода перестройка в монтаже (именно в монтаже, а не на стане: там перестройка происходит, если меняется ширина или толщина прокатки).
Пользователь в окне заказа монтажа выбирает все необходимые для него параметры и запускает расчёт. Когда приходит результат, он перетаскивает монтаж в окно, в котором корректирует полученный из Оптимизатора монтаж. Он может сократить или увеличить объём металла в строке, удалить ненужную строку: метрика «Процент строк монтажа из Оптимизатора» не ухудшится. Если же пользователь добавит новую строку, то метрика ухудшится.
Кажется, что есть лазейка, позволяющая обойти данную метрику: Оптимизатор будет планировать весь металл, то есть создавать большое количество строк в монтаже, а пользователь просто удалит лишние, и получится итоговый монтаж со 100 % строк монтажа из Оптимизатора.
Но мы предусмотрели такой вариант и стали фиксировать не только вышеописанную метрику, но и другие параметры монтажа, а именно его вес и метрику «Следование календарному плану». Если у пользователей возникают вопросы/претензии/предложения, то тогда они указывают их дополнительно.
В итоге на ежедневной основе формируется Excel-файл, в котором отражается информация по каждому созданному монтажу. Всю полученную обратную связь команда поддержки анализирует и ежедневно обсуждает на общем статусе. Если требуются доработки решения, то вначале они добавляются в бэклог, а затем часть из них приоритизируется и добавляется в релиз, который выходит раз в две недели.
Оптимизатор монтажей уже почти два года находится в стадии промышленной эксплуатации и постоянно дорабатывается с учётом замечаний/предложений от пользователей. За это время средний показатель строк монтажа из Оптимизатора составил более 80 % и постоянно увеличивается. Дополнительно мы стараемся более детально погрузить пользователей в процесс планирования, объясняем тонкости работы с Оптимизатором, совместно добавляем аналитические панели для удобства анализа доступного металла, прорабатываем гибкие и управляемые настройки Оптимизатора, позволяющие точнее описывать структуру монтажа в тех случаях, когда этого потребует пользователь.
В этом году проект «Оптимизатор монтажей» вошёл в шорт-лист с главными претендентами на победу в премии RB Digital Awards-2024 в категории «Промышленность».
Комментарии (7)
Ydhduucyw
23.07.2024 11:00А разве валки в стане изнашиваются равномерно?по идее первые валки должны изнашиваться больше.
rust_salikhov Автор
23.07.2024 11:00Валки изнашиваются неравномерно, причем чем ближе к концу стана — тем сильнее.
Есть черновая и чистовая группа клетей, причем металл проходит сначала через черновую группу клетей, а затем через чистовую. В черновой группе клетей находятся опорные валки, которые держат полосу, в чистовой — рабочие валки, которые формируют полосу и изнашиваются сильнее. Причем чем ближе к концу — тем больше нагрузка, тем сильнее изнашиваются валки. Это обусловлено, в том числе, толщиной профиля металла, который заходит в клети — чем он тоньше, тем сильнее нагрузка.
fivlabor
23.07.2024 11:00А у вас GUI на чем сделан? Симпатично выглядит. На чем, вообще, такие системы в 2024 делают? Математика на c++ через dll? Или это под Linux и что-то менее популярное, типа rust и wxWidget?
rust_salikhov Автор
23.07.2024 11:00Скрины сделаны с производственной системы, которая реализована на базе Quintiq. Сам Оптимизатор реализован в виде микросервиса и написан на Python.
Javian
Ретро 55 летней давности.
8street
Так его модернизировали тыщу раз, наверное. Это как танк Т-72, который до сих пор не потерял актуальности.
Javian
Судя по фото можно сказать, что точно его красили только в 1969 году :)