Про правильный кокс, ИТ и эксперименты с ним
Наша планета состоит из железа на 34,6%, но оно в основном спрятано довольно глубоко. Большая часть доступного — в рудах в виде оксидов. При обработке руды происходит два процесса: нагрев (который переводит металл в жидкое агрегатное состояние) и связывание кислорода чем-то с более сильной химической связью, например, углеродом. Для этих целей идеально подходит уголь: он позволяет получить в простой печи нужную температуру и сам по себе во многом состоит из углерода. Сжигая оксиды железа внутри кучи угля, мы можем выплавлять металл чуть ли не в ямах в земле.
Увы, но для промышленного применения просто уголь не подходит. Ямы в земле обладают очень низким КПД. Для того чтобы повысить КПД, нужно увеличивать геометрический размер печи, а при увеличении её размера растёт высота столба топлива-восстановителя. В современных доменных печах у нас она может достигать 18 метров. А это очень толстый слой, но если этот слой не будет газопроницаем, то нарушатся конвекционные процессы, позволяющие происходить нагреву и восстановлению железа. И нарушится ещё несколько процессов, в частности, не будет правильного горения из-за отсутствия отвода газов.
Важна способность топлива восстанавливать CO2. Если она станет высокой, то углерод будет восстанавливать не металл, а превращать перегоревшую CO2 в CO, что резко ухудшит процесс выплавки. Кокс помогает и горению и восстановлению. Он делается нагревом смеси углей при
1 000+ °C без доступа кислорода, когда смесь сначала переходит в пластическое состояние, а потом частицы начинают спекаться между собой.
Проблема только в том, что кокс исторически готовился на основании экспертного мнения технологов (основанного на опыте и не всегда системного с точки зрения математики). Примерная формула есть, а точная — только в голове у технолога с 40-летним стажем в виде интуитивного понимания.
Мы придумали способ, как соединить экспертное знание с математикой.
И превратить это в цифровой сервис.
Доменная печь
В чём сложность
Для производства кокса нужны определённые угли, которые обладают коксующими свойствами. Просто любой не подойдёт, нужны именно конкретные химический состав и структура: даже в одном месторождении на метр ниже или метр выше можно разрабатывать других динозавров другой слой, который будет отличаться на сотню тысяч лет по возрасту и по условиям формирования вроде температуры, доступа кислорода и влаги.
Из каменного угля делается другой вид топлива — кокс. Он обеспечивает газопроницаемость шихты в доменной печи (за счёт того, что имеет так называемую горячую прочность — способность кусков сохранять форму длительное время при высоких температурах). Металлургическим называется кокс с размером куска от 25 мм и выше.
Коксующиеся угли намного дороже, чем просто угли (например, энергетические — использующиеся как топливо в котельных). Более того, не все коксующиеся угли совместимы между собой: может быть так, что частицы разных марок не могут хорошо спекаться между собой, и при дальнейшем тушении кокса его куски будут разрушаться. В результате кокс уже не сможет обеспечивать газопроницаемости в доменной печи (а в худшем случае вообще разрушится ещё при транспортировке).
Доменная печь
В итоге для производства кокса используется смесь нескольких сортов угля. Эта смесь называется шихта. Самое сложное в коксохимической отрасли — это балансировка состава шихты между её стоимостью и способностью породить качественный кокс. Но, прежде чем мы перейдём к тому, как мешать тесто для будущего правильного кокса, нужно рассказать про техпроцесс на реальном производстве.
Техпроцесс
На производство со всей страны приезжают вагоны с углём. Это как минимум несколько десятков шахт и обогатительных производств в обычном наборе запасов.
Промежуточное хранение
Если вагоны приходят зимой, то они отогреваются, чтобы из них можно было высыпать уголь (используется открытый вагон, поэтому уголь смерзается). Летом можно высыпать сразу. Уголь через конвейеры поступает в штабеля. Каждая марка угля хранится в отдельном штабеле. Затем несколько разных марок можно погрузить в дозировочные бункеры, после чего специальный аппарат может делать из них различные смеси.
Краеугольный камень процесса — определение состава смеси. В идеальном мире нужно взять одну часть коксующегося угля и добавить к нему другой, куда более дешёвый уголь, который снизит итоговую стоимость шихты и добавит нужных свойств (или не уменьшит их ниже допустимых в зависимости от смешиваемых марок). Количество серы, содержание золы и другие параметры итоговой смеси определят качество шихты.
Грубо говоря, специалист, смешивающий уголь, решает две задачи:
- Сделать подходящее топливо для печи.
- По возможности использовать наиболее дешёвую комбинацию углей.
Как вы, возможно, догадываетесь, до второй задачи человек-специалист либо доходит редко, либо решает её не очень оптимально. Почему — чуть ниже. Сейчас важно то, что при нынешних ценах на уголь себестоимость чугуна сильно зависит от стоимости угля.
После того как мы смешиваем в определённых пропорциях несколько марок угля (речь идёт про работу разных дозаторов, создающих единый поток угля), шихта уходит на молотковую дробилку.
Это огромный аппарат, который дробит всё поступающее в мелкую фракцию. Оттуда уголь выходит уже не кусками, а мелкими частицами, качественная мельница даёт фракцию от 0 до 3 мм не менее 70–80% массы.
Далее эти частицы поступают в угольную башню, она же — накопительный бункер. Из неё углезагрузочная машина берёт шихту и грузит её в печь коксовой батареи.
Угольная башня
Печи коксовой батареи
Коксовая батарея — это промышленный агрегат, состоящий из нескольких десятков печей (высоких, узких и длинных камер, где происходит коксование). Между камерами коксования находятся обогревающие простенки, где горит коксовый или природный газ и которые греют печи с боков. Сверху над батареей находится угольная башня. По верху батареи ездит специальный вагон — углезагрузочная машина. Он подъезжает под угольную башню, берёт порцию шихты, потом едет к нужной печи, встаёт над ней, открывает люки и загружает шихту в печь. Также к коксовой батарее прилагаются дополнительные машины: коксовыталкиватель, двересъёмная машина и т. д.
Коксовая печь — это прямоугольная высокая камера, где доступа кислорода нет. Шихта греется в ней от обогревающих простенков до середины примерно в течение 15–25 часов — до тех пор, пока в середине коксового пирога температура не достигнет около 1 000 градусов Цельсия.
Внутри коксового пирога происходят очень разные процессы. Шихта переходит сначала в пластическое состояние, а далее — в твёрдое, это и будет кокс.
В среднем около 25% массы угля в процессе коксования становится коксовым газом и проходит через цех улавливания химических продуктов. Они делятся на фракции: тяжёлые вроде смолы или сырого бензола продаются другим производствам (производить продукты разделения смолы, сырого бензола и так далее), а метан, водород и моноксид углерода (СО) используются как топливо для коксовой батареи (обогревающих простенков). То есть после запуска коксовая печь топит сама себя.
Кокс выдан в тушильный вагон
Затем кокс выдают (коксовыталкиватель выдавливает коксовый пирог из печи), тушат (водой или в камере установки сухого тушения кокса циркуляционным газом [N2COCO2]) и рассеивают на разные фракции. Самый крупный кокс, от 80 миллиметров, — литейный. От 25 до 80 мм — металлургический, он для нас наиболее ценен. И есть совсем мелкие фракции — они идут или на сторону, или спекаются с железной рудой в агломерат для доменной печи.
В домну загружаются агломерат руды и металлургический кокс слоями. Снизу идёт горячее дутьё разогретым воздухом. Кокс в домне, во-первых, — топливо, во-вторых, восстановитель. Он начинает окисляться, выделяет тепло, помогает плавить руду. Параллельно он отбирает кислород у железа, то есть восстанавливает оксид до железа. В-третьих, обеспечивающий газопроницаемость компонент загрузки доменной печи.
От газопроницаемости зависит, как будут уходить газы. Газопроницаемость зависит не только непосредственно от химического состава угля, но и от его механических свойств. Поскольку перегрузка производится через бункеры, механическая прочность важна на всех этапах: частицы соударяются и могут измельчаться. Они не должны рассыпаться в пыль или труху, и это важно прогнозировать при смешивании шихты.
И вот в этом месте появляется задача.
Задача
На входе есть набор углей, свойства каждого отдельного примерно известны или их можно измерить. Каждый уголь плавает в пределах допусков в зависимости от партии, поскольку шахты выдают то сырьё, которое в разрезе (помните про метр выше-ниже и другую эпоху?).
Нам нужно составить шихту, чтобы:
- Качество кокса из неё соответствовало требованиям доменного производства.
- Она была самой дешёвой из доступных комбинаций углей.
То есть у нас есть оптимизационная задача, где целевая функция — цена, а ограничение — минимальные требования к коксу от производства. Небольшие подвижки между углями в составе шихты могут давать очень значительные изменения цены. Экономический эффект огромный!
Шихта обычно состоит из нескольких углей. В основе — коксующийся, самый ценный и редкий. А ценный он, в частности, ещё и из-за логистики. Есть страны, где коксующегося угля вообще нет, и тогда его могут везти аж из Австралии: там месторождений с нужными свойствами много. Есть добавки из отходов нефтяного производства, которые позволяют немного поменять качества угля и условно превратить «пограничный» в коксующийся.
Итак, основа шихты — уголь марки К, то есть коксовый. Это угли, которые сами по себе коксуются очень хорошо, дают качественный кокс, но могут стоить дороже углей других марок — газовых или коксовых отощённых. Моношихта из них всегда получается хорошей и запредельно дорогой.
Эти угли можно комбинировать с некоксующимися или, условно, слабококсующимися. Более дешёвые угли ухудшают шихту, но наша задача — оптимизироваться не по её качествам, а попасть в допуск производства — в ту самую границу, где газопроницаемость уже достаточна, механическая прочность хороша, куски кокса получаются нужного размера.
Мы не предсказываем КПД доменной печи от шихты (это слишком сложная задача на будущее), а просто используем ТУ на шихту как границы. Да, там тоже можно решать оптимизационную задачу, но это вопрос будущего.
В оптимизации мы работаем 10-дневными циклами. На начало каждого цикла есть набор марок углей, запасы углей в штабеле и план поставок (то, что уже выехало к нам). Задача — оптимально распорядиться имеющимися углями и теми, которые приедут в рамках 10-дневного цикла. Опять же для компании актуально долговременное планирование, но этот уровень оптимизации, где будут участвовать обе площадки — и Липецк, и Алтай-кокс, — мы сделаем позже. Пока сосредоточились на локальной задаче — декадной производственной карте.
Если сырьё отправляется поставщиком ритмично и предсказуемо, а качество стабильно, то можно вставать на одну шихту и стоять на ней несколько декад. Но такое возможно только в идеальном мире.
Почему нельзя делать это по формуле
Казалось бы, для решения достаточно отследить влияние каждой марки угля на шихту и затем составить формулы для определения оптимальных. Это действительно делается: берётся моношихта, замеряются её свойства, затем в неё добавляются разные пропорции разного угля. В итоге получается некоторая зависимость. Тем не менее пока на практике она только приближается к фактической, но очень редко в неё попадает. Причина в том, что физико-химические свойства шихты меняются в зависимости от объёма коксового пирога и процессов в нём. То есть в маленькой экспериментальной установке можно получить примерное соответствие, но проверить его можно будет только в большой. И вообще существуют обзорные научные работы, показывающие, что формул, позволяющих рассчитывать качество кокса для широкой ресурсной базы, не существует.
Опытно-промышленное коксование на Липецкой площадке требует 160 тонн шихты минимум для опыта, на Алтае — вообще 400 тонн. То есть мы не можем позволить себе так делать специально. Все опыты — это история предыдущих подшихтовок с момента основания предприятия: у нас есть результаты лабораторий на исходные угли, есть пропорции и есть анализ после коксования.
Как вы можете догадаться, в этом месте мы решили обучать модель на этих самых данных. Причём, что важно, за многие годы шихт с плохим качеством достаточно мало (в компании работают профессионалы), но эти «плохие» данные для обучения модели являются самыми ценными, поскольку могут позволить выявить закономерности, при которых снижается качество кокса.
Выданный кокс
Как работает оптимизатор
Сам по себе алгоритм в основе — обычное квадратичное приближение (SLSQP). Но на входе у оптимизатора — данные модели, предсказывающие качество кокса. У нас есть отдельная подсистема обучения, есть платформа для датасайнтистов, где модельки разрабатываются, контролируются на предмет деградации качества и т. п. Мы строим постоянно обучающий модель пайплайн: каждая новая шихта добавляет данные в модель. Вторая наша сила — возможность вливать научные знания в прогноз, то есть мы также дополняем модель и данными экспериментов на малых печах (где эти эксперименты можно проводить быстрее и в десятки раз чаще), и уже известными данными по физике и химии процесса. Просто нейросеть не даёт практически применимого результата, выборки недостаточно, слишком мало данных для обучения. «Деревянные» модели (градиентный бустинг, экстремальные деревья) тоже не очень подходят: решения, которые они дают, являются «ломаными», т. е. не отвечают требованиям алгоритма оптимизации к гладкости функций, задающих нелинейные ограничения. К тому же такие модели при выходе за известные области вырождаются в константу, а для нас важна правильная экстраполируемость, иначе модель не будет чувствовать «направлений», в которых качество кокса снижается и будет давать неприменимые результаты. Поэтому мы пошли по пути использования линейных моделей (в широком смысле: строится пайплайн из генерации фичей полиномиальным способом, нелинейных преобразований целевой переменной, различных видов регуляризации и кросс-валидации (защиты от переобучения).
Алгоритм AutoML перебирает множество вариантов моделей линейной регрессии. Дальше сверяется на тестовой выборке (которая в обучении не участвует) и сравнивает метрики, потом выбирает, какая модель лучше. Этот цикл мы можем делать очень часто — фактически при каждом поступлении новых данных. На практике достаточно делать его раз в квартал, когда набирается заметная на фоне нашего исторического массива новая выборка данных.
Внедрение
Первая модель выглядела просто ужасно: мы собрали прототип пользовательского интерфейса в XLS-таблице, в которой привык работать технолог коксохима, а уже из таблицы данные отправлялись в сервис, где работала модель. Если вы внедряете что-то на реальном производстве, то по возможности никогда так не делайте. Некоторые люди до сих пор не понимают того, какую огромную систему мы построили, и думают, что там считает «пара формул в Экселе».
Почему MS Excel? Потому что была очень простая интеграция (как показал опыт, средств Excel VBA оказывается достаточно, чтобы на основе данных листа сформировать JSON, который можно отдать сервису через Web API). Мы тогда жили в MS Azure, они давали готовый autoML, и туда можно было очень удобно отдать данные из витрины. Трижды чёрт побери! В общем, работающий прототип сервиса (тот самый пресловутый MVP по методологии Agile) мы собрали и отдали пользователю за три дня. Технолог — опытный пользователь Excel, ему нужно было досчитывать и ковыряться. Мы сделали так, что он вбивает состав шихты, нажимает кнопку, состав отдаётся сервису, оттуда приходит прогноз качества. Дальше технолог в привычной ему таблице играл шихтовкой. Технологу было очень понятно, что происходит. Модель работала, чего раньше никогда не случалось. И до сих пор используется!
Более поздняя модель уже получила фронт с нормальным интерфейсом и оптимизатор: как раз получив одну нормальную шихту, оптимизатор начинает «гонять» её состав до тех пор, пока не получит оптимальную исходя из запасов.
Модель не заменяет технолога. Собственно, технолог воспринимает модель как помощника — поначалу местами глуповатого, делающего очевидные ошибки новичка. Нам было, кстати, довольно приятно слушать диалоги технолога с таблицей: ну, знаете, как люди разговаривают с навигатором в машине, так же он спорил с моделью. В итоге через несколько итераций она стала предлагать варианты всё более и более правильно, а он уже смотрел на результат и хвалил её. Либо говорил, что ему что-то не нравится, он нутром чует, что что-то не так. И менял шихту, добавляя новые знания в модель.
Параллельно шли опытно-промышленные испытания. При вводе новых марок угля делается серия экспериментов. Мы смешивали шихты с новыми углями и получали всё больше и больше новых данных. Сначала делается ящичное коксование: по нескольку десятков килограммов шихты в ящике вручную забрасывается в середину печи. При вываливании или выталкивании кокса этот ящик ловят, снимают пробу, смотрят. Но в ящике процессы коксования идут не так, как в большой коксовой камере. Есть карботест — маленькая экспериментальная печь. С её помощью нельзя подготовить пробу для измерения механической прочности (недостаточный объём), но можно грубо оценить реакционную способность и горячую прочность. Без модели эти данные близки к гаданию, с моделью их можно использовать для предсказания сложных составов шихт.
Сейчас мы интегрируем оптимизатор в MES: оптимальная шихта с учётом корректировок технолога и с его одобрения превращается в производственную карту. Сейчас карта — это подписанный документ, передающийся на бумаге оператору дозировочного отделения. Когда она станет электронной сущностью, можно будет отследить ещё, правильно ли сработали дозаторы (а то бывает, что какой-нибудь один не может вовремя выйти на режим, тогда дозировка останавливается, но часть шихты уже в шахте, а достать её уже нельзя), или можно понять, насколько качество угля изменилось от измеренного в начале партии. Ожидаемый результат — сотни миллионов рублей в год для производства, но мы считаем экономический эффект как снизу вверх, так и сверху вниз (системно по итогам большого периода), поэтому пока деталей сказать не могу: ещё нет подтверждений по фактическим расходам за год.
Ещё в перспективе можно оптимизировать закупку угля. Для закупщиков оптимизатор может стать инструментом ситуативного анализа, когда они могут вести переговоры с поставщиками, поглядывая в результаты: за такую цену, такой объём можно брать. Если цена выше — сокращаем объём.
Мы в середине пути, который стоит пройти. Мы используем и Data Science, и классический научный подход, и экспериментальный. Задача раньше считалась если не невозможной, то очень тяжёлой, а теперь она просто повышенной сложности, требующая не совсем привычных подходов.
Батарея и коксовыталкиватель
Напоследок вы, наверное, можете спросить, нет ли другого способа получать железо из оксидов в руде. Есть. Это электрометаллургия (например, Оскольский электрометаллургический комбинат). И водородные печи: они в разработке, промышленной эксплуатации пока нет. В промышленных масштабах других процессов с рудой вообще нет. Мы на передовом крае науки и техники, например, производство в Европе потеряло в конкурентоспособности и почти закрыто (там была проблема с углеродным следом и квотами). А у нас тут, конечно, — металлургия, но металлургия очень интересная. И, конечно, что очень радует, нам всё больше и больше верят мужики с производства и технологи. Они видят всё больше примеров ассистирующих систем, понимают, что они их страхуют и помогают, и осознают, что они не вытесняют их с производства. Если вы знакомы со спецификой Data Science в металлургии и вообще тяжёлой промышленности, то можете представить, насколько их знания важны нам для работы с как бы неалгоритмизируемыми задачами.