Обучать reinforcement learning на живой доменной печи — это гарантированный способ сжечь миллионы долларов и сесть в тюрьму.
Вы можете бесконечно тренировать нейросеть на исторических логах. Но supervised learning способен лишь скопировать действия среднего оператора смены. Исторические логи показывают, как система работала, а не как она отреагирует на нестандартные управляющие воздействия. Чтобы найти глобальный оптимум, алгоритм обязан исследовать среду — выкручивать уставки до предела, смотреть на реакцию, получать штрафы.
В цифровом мире агент может миллион раз разбить машину об стену. В MOFU-индустрии (металлургия, химия, энергетика) цена одной ошибки — остановка цеха или экологическая катастрофа. Плюс колоссальные задержки обратной связи: вы изменили пропорции реагентов в химическом реакторе сейчас, а падение выхода целевого продукта зафиксировали через четыре часа. Алгоритму не выжить без песочницы. Отсюда базовое правило: цифровой двойник техпроцесса как тренажёр для ИИ: на чём учить оптимизатор, если на живом производстве нельзя — это не визионерство, а жёсткое инженерное требование.
— Скептик: У нас уже куплен цифровой двойник. Вендор внедрил красивый дашборд с 3D-моделью цеха. Пусть ИИ учится на нём.
Дашборды не обучают агентов. То, что менеджмент называет цифровым двойником, в 90% случаев — просто BI-система поверх SCADA. Красивая 3D-модель, показывающая температуру в реальном времени — это мониторинг. Нам нужен математический движок. Вычислительная среда, которая на любой, даже абсурдный вектор действий ИИ, честно рассчитает физическое состояние системы на следующем шаге.
Уровни верности: цена и галлюцинации
Разработка симулятора — это 80% бюджета и времени всего проекта. Сам ИИ — оставшиеся 20%. Не каждый процесс в принципе поддаётся моделированию за вменяемые деньги.
- First-principles (чистая физика и химия). Термодинамика и уравнения Навье-Стокса. Работает железно. Проблемы: инференс такой модели требует кластера, вычисления идут медленнее реального времени. Главное — физика описывает идеальный процесс. Она не знает, что на третьем клапане накипь, а датчик давления врёт на 2%.
- Data-driven (чёрный ящик). Обучаем LSTM или трансформер предсказывать следующий стейт по историческим логам. Дёшево, летает на одном CPU. Проблема: как только RL-агент подаст на вход комбинацию уставок, которой не было в обучающей выборке, нейросеть начнёт галлюцинировать и выдавать физически невозможные состояния.
- Гибридные модели (PINN). Физический движок считает базу, а легкая нейросеть предсказывает «остатки» — нелинейные эффекты износа и шума. Тяжело балансировать, долго разрабатывать. Единственный рабочий вариант для сложного продакшена.
— Скептик: Окей, мы наймём математиков, они напишут гибридный симулятор. Агент натренируется в нём до максимума метрик. Катим в бой?
И получаем остановку конвейера. Добро пожаловать в sim-to-real gap.
Любой симулятор утрирует реальность. RL-агент — это не интеллектуал, это идеальный эксплуататор багов среды. Если в формулах двойника есть уязвимость, при которой понижение тяги на 1% магически сжигает на 10% меньше газа без потери качества руды — агент не просто найдёт эту дыру. Он построит вокруг неё всю стратегию.
Мы проходили это, когда мы в Morana Labs катили RL-оптимизатор для обжиговой машины: на тестах алгоритм показывал небывалую экономию топлива, загоняя температурный режим в такие зоны, где у гибридной модели просто отсутствовали данные о турбулентности. Агент выучил фантомы. Плохой двойник хуже его отсутствия.
Лечится это внедрением domain randomization. Во время обучения мы намеренно расшатываем симулятор.
class SmelterEnv(gym.Env):
def __init__(self, base_physics_model):
self.base = base_physics_model
self.nom_capacity = 1200.0
self.nom_delay = 2 # шаги задержки отклика
def reset(self):
# Вбрасываем шум в физику при каждом сбросе среды.
# Агент обязан выучить робастную политику, а не зазубрить константы.
self.capacity = self.nom_capacity * np.random.uniform(0.85, 1.15)
self.delay = self.nom_delay + np.random.randint(-1, 2)
self.state = self.base.get_initial_state()
return self._apply_delay(self.state)
def step(self, action):
# Инференс физики с искажёнными параметрами износа оборудования
next_state, reward = self.base.forward(self.state, action, self.capacity)
self.state = next_state
return self._apply_delay(self.state), reward, False, {}
Агент, выживший в среде с плавающими задержками и случайными деградациями, на реальном заводе воспринимает изношенный насос или забитую форсунку просто как очередную флуктуацию. Стратегия становится консервативнее, пиковые показатели падают, зато алгоритм перестаёт ломать железо.
Не одноразовая песочница: предиктив и обучение смены
— Скептик: Отдавать десятки миллионов за математический движок только ради того, чтобы один скрипт поигрался в песочнице? ROI никогда не сойдётся.
Справедливо. Если симулятор делается исключительно для инференса одного RL-агента, экономика проекта, скорее всего, мертва. Но высокоточный математический движок, способный считать сценарии быстрее реального времени, не должен пылиться в одном репозитории.
Среда переиспользуется. Тот же движок ложится в основу системы предиктивной аналитики: прогоняем текущие параметры с датчиков на восемь часов вперёд и видим, что при текущей нагрузке кристаллизатор гарантированно уйдёт в перегрев.
Второй сценарий — тренажёры для операторов. Вы сажаете человека за пульт, под капотом которого крутится та же самая гибридная модель. Пусть живой оператор попытается стабилизировать давление при имитации отказа двух газоанализаторов из трёх. Обучать людей на цифровых моделях, где всё может взорваться без реальных жертв — это база. Затраты на R&D двойника окупаются именно здесь, распределяясь между предиктивным обслуживанием, оптимизатором и HR.
Создание надёжного ИИ-советника в отрыве от физики — самообман. Либо вы платите за честный симулятор сейчас, либо расплачиваетесь запоротыми партиями металла и простоями завтра. Чудес в инженерии не бывает.