Обучающее руководство по контролируемому машинному обучению в химической инженерии (на базе TEP)
Видео-туториал решает проблему нехватки практических примеров машинного обучения в химической инженерии. На базе бенчмарка Tennessee Eastman Process демонстрируется полный цикл внедрения ML: от сбора данных до оценки метрик. Инженер освоит методы прогнозирования отказов и предсказательного обслуживания.
Обучающее руководство по контролируемому машинному обучению в химической инженерии (на базе TEP)
Вот развернутый профессиональный перевод и адаптация исходного текста на русский язык. Сохранены все цифры, даты, имена, технические детали, структура заголовков и форматирование. Код и команды оставлены без изменений (как есть), комментарии в коде переведены.
Симулятор процесса Tennessee Eastman (Tennessee Eastman Process Simulator)
🏭
Цвет от: синий
Цвет до: зеленый
SDK: docker
Файл приложения: app.py
Закреплено: false
Лицензия: BSD-3-Clause
Python-интерфейс к симулятору процесса Tennessee Eastman (TEP) с двумя вариантами реализации: чистый Python и опциональный фортрановский бэкенд.
Основан на оригинальном коде на Фортране, написанном Дж.Дж. Даунсом (J.J. Downs) и Э.Ф. Фогелем (E.F. Vogel) в 1993 году, с изменениями, внесёнными Э.Л. Расселлом (E.L. Russell), Л.Х. Чиангом (L.H. Chiang) и Р.Д. Браатцем (R.D. Braatz).
Python-обёртка разработана с помощью Claude Code Джоном Кичином (John Kitchin).
Онлайн-симулятор (Huggingface)
Возможности
- Полная симуляция TEP – все 50 переменных состояния, 41 измерение и 12 управляемых переменных.
- Два бэкенда: чистый Python (по умолчанию, не требует компилятора) или Фортрановский (примерно в 5–10 раз быстрее).
- 20 технологических возмущений (ступенчатые изменения, случайные вариации, медленный дрейф, залипание клапанов).
- Несколько режимов управления: разомкнутый контур, замкнутый контур (децентрализованный PI) и ручной.
- Обнаружение неисправностей в реальном времени – подключаемые модули детекторов и метрики производительности.
- Система плагинов контроллеров для пользовательских стратегий управления.
- CLI для пакетной симуляции (
tep-sim) – генерация данных по сценариям. - Интерфейс потоковой передачи в реальном времени для интеграции с дашбордами.
- Интерактивный веб-дашборд (
tep-webна базе Dash). - Графическое построение результатов симуляции (опциональная зависимость matplotlib).
- Воспроизводимые симуляции с детерминированной генерацией случайных чисел.
Пример вывода
Симуляция с неисправностью IDV(6) – потеря подачи A, возникающая в момент времени t = 1 час. Расход потока A падает до нуля, давление в реакторе растёт, поскольку контроллер компенсирует возмущение.
Быстрый старт
Требования
- Python 3.8+
- NumPy
Установка
## Стандартная установка (Python-бэкенд, компилятор не требуется)
pip install -e .
## С ускорением на Фортране (требуется gfortran, ~5-10x быстрее)
pip install -e . --config-settings=setup-args=-Dfortran=enabled
## С поддержкой веб-дашборда (Dash)
pip install -e .[web]
## Для разработки (включает pytest, matplotlib)
pip install -e .[dev]
Примечание: Стандартная установка использует чистый Python-бэкенд и не требует компилятора. Для ускорения на Фортране сначала установите gfortran:
- На macOS:
brew install gcc - На Linux:
apt install gfortran
Базовое использование
from tep import TEPSimulator
## Создание и инициализация симулятора
sim = TEPSimulator()
sim.initialize()
## Запуск симуляции на 1 час
result = sim.simulate(duration_hours=1.0)
## Доступ к результатам
print(f"Время симуляции: {result.time[-1]:.2f} часов")
print(f"Конечная температура реактора: {result.measurements[-1, 8]:.1f} °C")
print(f"Конечное давление реактора: {result.measurements[-1, 6]:.1f} кПа")
С возмущениями
## Применение возмущения IDV(1) в момент t=0.5 часа
sim.apply_disturbances({1: (0.5, 2.0)}) # {id возмущения: (время, значение)}
Запуск веб-дашборда
Из командной строки:
tep-web
С опциями:
tep-web --no-browser --port 8080
Или из Python:
from tep.dashboard_dash import run_dashboard
run_dashboard()
Веб-дашборд предоставляет:
- Визуализацию процесса в реальном времени
- Интерактивное управление возмущениями
- Ручное изменение клапанов
- Экспорт данных в CSV
Живое демо: https://huggingface.co/spaces/jkitchin/tennessee-eastman-process
Примечание: Демо на Huggingface иногда может показывать ошибки 429 при высокой нагрузке. Обычно они проходят через 5–10 минут.
Фреймворк обнаружения неисправностей
Симулятор включает комплексный фреймворк обнаружения неисправностей:
- Встроенные детекторы – от простых проверок порогов до многомерных методов на основе PCA.
- Система плагинов – регистрация пользовательских детекторов через декоратор
@register_detector. - Метрики производительности (точность, F1, задержка обнаружения) отслеживаются автоматически.
- Управление скользящим окном осуществляется фреймворком.
- Асинхронное обнаружение для вычислительно трудоёмких методов.
from tep import TEPSimulator, FaultDetectorRegistry
## Создание симулятора и детектора
sim = TEPSimulator()
detector = FaultDetectorRegistry.create("pca", window_size=200)
## Запуск симуляции с внесённой неисправностью
sim.apply_disturbances({4: 1.0}) # неисправность охлаждающей воды в t=1 час
result = sim.simulate(duration_hours=8.0)
## Запуск обнаружения по результатам
for i, xmeas in enumerate(result.measurements):
detection = detector.process(xmeas)
if detection.is_fault:
print(f"Шаг {i}: Неисправность обнаружена (класс={detection.fault_class}, уверенность={detection.confidence:.2f})")
Встроенные детекторы
| Детектор | Описание | Ключевые параметры |
|---|---|---|
| threshold | Быстрая проверка превышения порогов | limits, fault_mapping |
| ewma | Экспоненциально взвешенное скользящее среднее | alpha=0.1, threshold=3.0 |
| cusum | Карта кумулятивных сумм | k=0.5, h=5.0 |
| pca | PCA со статистиками T² и SPE | n_components=10, t2_threshold, spe_threshold |
| statistical | Ансамбль статистик (среднее, дисперсия, тренд) | votes_required=2 |
| sliding_window | Сравнение половин окна | |
| composite | Комбинирует несколько детекторов с голосованием | min_votes=2 |
Результаты обнаружения
Каждый детектор возвращает объект DetectionResult с:
step– номер шагаfault_class– -1 = неизвестно, 0 = норма, 1–20 = индекс IDV неисправностиconfidence– от 0.0 до 1.0is_fault– True, если fault_class > 0is_normal– True, если fault_class == 0is_ready– True, если детектор накопил достаточно данныхcontributing_sensors– список индексов XMEAS, вызвавших обнаружениеstatistics– специфичные для детектора статистики (напр., значения T², SPE)
Метрики производительности
Детекторы автоматически отслеживают метрики, если задана эталонная истина:
detector.set_ground_truth(onset_step=3600) # IDV(4) в t=1 час
## После запуска обнаружения...
metrics = detector.get_metrics()
## DetectionMetrics (7200 samples, 100 unknown)
## Accuracy: 0.856
## Fault Detection Rate: 0.923
## False Alarm Rate: 0.034
## Missed Detection: 0.077
## Macro F1: 0.812
## Per-class metrics
print(metrics.per_class[4].precision) # Precision для IDV(4)
print(metrics.per_class[4].recall) # Recall для IDV(4)
print(metrics.mean_detection_delay) # Шагов до первого правильного обнаружения
Пример пользовательского детектора
from tep.detector_base import BaseFaultDetector
from tep.detector_plugins import register_detector
import numpy as np
@register_detector(name="pressure_monitor")
class PressureMonitor(BaseFaultDetector):
"""Отслеживает давление в реакторе для обнаружения неисправностей охлаждающей воды."""
window_size = 60 # 60 секунд истории
detect_interval = 10 # Запускать каждые 10 шагов
def __init__(self, pressure_threshold=2750, **kwargs):
super().__init__(**kwargs)
self.pressure_threshold = pressure_threshold
def _detect_impl(self, window):
if not self.window_ready:
return DetectionResult(step=self.current_step, fault_class=0, confidence=0.0)
# Анализ тренда давления
pressures = window[:, 6] # XMEAS(7) = давление реактора
mean_pressure = np.mean(pressures)
trend = pressures[-1] - pressures[0]
if mean_pressure > self.pressure_threshold and trend > 0 and np.std(pressures) > 50:
# IDV(4) неисправность охлаждающей воды
return DetectionResult(
step=self.current_step,
fault_class=4,
confidence=min(1.0, (mean_pressure - self.pressure_threshold) / 1000 + 0.95),
contributing_sensors=[6], # Датчик давления
statistics={"mean_pressure": mean_pressure, "trend": trend}
)
return DetectionResult(step=self.current_step, fault_class=0, confidence=0.9)
def _reset_impl(self):
pass # Сброс пользовательского состояния при необходимости
## Использование вашего пользовательского детектора
detector = FaultDetectorRegistry.create("pressure_monitor", pressure_threshold=2800)
Композитный детектор (ансамбль)
Комбинируйте несколько детекторов с голосованием:
## Создание отдельных детекторов
det1 = FaultDetectorRegistry.create("threshold", limits=...)
det2 = FaultDetectorRegistry.create("ewma", alpha=0.1)
## Создание композитного детектора с мажоритарным голосованием
composite = FaultDetectorRegistry.create("composite", min_votes=2)
composite.add_detector(det1)
composite.add_detector(det2)
## Используется как любой другой детектор
Полные примеры, включая обучение PCA на нормальных данных и оценку производительности обнаружения, см. в файле examples/fault_detection.py.
CLI для пакетной симуляции
Команда tep-sim запускает пакетные симуляции с настраиваемыми неисправностями, длительностью и форматом вывода:
## Запуск 8-часовой симуляции нормальной работы
tep-sim --duration 8 --output normal.dat
## Запуск с неисправностью 1 (ступенчатое изменение соотношения A/C), начинающейся в 1 час
tep-sim --duration 8 --faults 1 --fault-times 1.0 --output fault1.dat
## Несколько неисправностей с разным временем начала
tep-sim --duration 8 --faults 1,4,7 --fault-times 1.0,2.0,3.0 --output multi_fault.dat
## Использование конкретного зерна случайных чисел для воспроизводимости
tep-sim --duration 8 --seed 12345 --output reproducible.dat
## Вывод в оригинальном многофайловом формате Фортрана (15 .dat файлов)
tep-sim --duration 8 --faults 1 --multi-file --output ./data/
## Отображение результатов графически
tep-sim --duration 2 --faults 1 --plot
## Сохранение графика в файл
tep-sim --duration 2 --faults 1 --plot-save results.png
## Список всех доступных неисправностей
tep-sim --list-faults
Опции CLI
| Опция | Описание |
|---|---|
-d, --duration | Длительность симуляции в часах (по умолчанию: 8.0) |
-f, --faults | ID неисправностей для активации (напр., "1", "1,2,5", "1-5") |
-t, --fault-times | Время начала неисправностей в часах (по умолчанию: 1.0) |
-s, --seed | Зерно случайных чисел для воспроизводимости |
-o, --output | Путь к выходному файлу (по умолчанию: tep_data.dat) |
-m, --multi-file | Вывод в оригинальном многофайловом формате Фортрана |
-r, --record-interval | Интервал записи в секундах (по умолчанию: 180) |
-p, --plot | Показать график |
--plot-save | Сохранить график в файл |
-q, --quiet | Подавить вывод прогресса |
--list-faults | Вывести список доступных неисправностей и завершить |
Документация
- Справочник API – подробная документация API
- Руководство по CLI – документация по пакетной симуляции
- Руководство по дашборду – документация по интерактивному GUI
- Примеры – примеры использования и учебные пособия
Архитектура
tep/
├── __init__.py # Экспорты пакета
├── simulator.py # Высокоуровневый интерфейс TEPSimulator (независим от бэкенда)
├── python_backend.py # Реализация на чистом Python (по умолчанию)
├── fortran_backend.py # Обёртка f2py для фортрановских TEINIT/TEFUNC (опционально)
├── constants.py # Физические константы, начальные состояния, имена переменных
├── controllers.py # PI-контроллеры, децентрализованное управление
├── controller_base.py # Базовые классы системы плагинов контроллеров
├── controller_plugins.py # Встроенные реализации контроллеров
├── detector_base.py # Базовые классы системы обнаружения неисправностей
├── detector_plugins.py # Встроенные реализации детекторов (PCA, EWMA и др.)
├── cli.py # CLI для пакетной симуляции (команда tep-sim)
├── dashboard_dash.py # Веб-дашборд на Dash (команда tep-web)
└── _fortran/ # Скомпилированное фортрановское расширение (опционально)
└── teprob.cpython-*.so
Бэкенд на Python по умолчанию предоставляет чистую Python-реализацию процесса TEP. Опциональный фортрановский бэкенд использует оригинальный код через f2py для ускорения симуляции в 5–10 раз.
Обзор процесса
Процесс Tennessee Eastman – это реалистичная симуляция промышленного химического процесса, включающая:
- Реактор: экзотермические реакции A→G, A→H, A+D→F, 3D→2F
- Сепаратор: разделение продуктов с охлаждающей водой
- Стриппер: колонна очистки с паровым нагревом
- Компрессор: сжатие рециркуляционного газа
Переменные состояния (всего 50)
| Диапазон | Описание |
|---|---|
| 1–3 | Моли компонентов в реакторе (A, B, C) |
| 4–9 | Моли компонентов в реакторе (D, E, F, G, H) + жидкость сепаратора |
| 10–12 | Моли пара в сепараторе |
| 13–17 | Моли жидкости в стриппере |
| 18–30 | Различные давления, уровни, температуры |
| 31–36 | Состояния компрессора |
| 37–50 | Состояния задержки анализатора |
Измерения (всего 41)
| Переменная | Единицы измерения |
|---|---|
| XMEAS(1–6) | Подача и рецикл |
| XMEAS(7–9) | Давление, уровень, температура реактора |
| XMEAS(10–14) | Продувка и сепаратор |
| XMEAS(15–19) | Измерения стриппера |
| XMEAS(20–22) | Энергоносители |
| XMEAS(23–28) | Состав сырья реактора |
| XMEAS(29–36) | Состав газа продувки |
| XMEAS(37–41) | Состав продукта |
Управляемые переменные (всего 12)
| XMV(1) | Расход D (подача) |
|---|---|
| XMV(2) | Расход E (подача) |
| XMV(3) | Расход A (подача) |
| XMV(4) | Расход A и C (подача) |
| XMV(5) | Клапан рециркуляции компрессора |
| XMV(6) | Клапан продувки |
| XMV(7) | Расход жидкости сепаратора |
| XMV(8) | Расход продукта из стриппера |
| XMV(9) | Паровой клапан стриппера |
| XMV(10) | Охлаждающая вода реактора |
| XMV(11) | Охлаждающая вода конденсатора |
| XMV(12) | Скорость мешалки |
Возмущения (всего 20)
| IDV | Тип | Описание |
|---|---|---|
| 1–7 | Шаг | Ступенчатые изменения состава сырья и температуры |
| 8–12 | Случайное | Случайные вариации подачи и охлаждающей воды |
| 13 | Дрейф | Медленное изменение кинетики реакции |
| 14–15 | Залипание | Проблемы с клапанами охлаждающей воды |
| 16–20 | Неизвестно | Резерв для тестирования |
Ссылки
Оригинальный код на Фортране:
- J.J. Downs and E.F. Vogel, "A plant-wide industrial process control problem," Computers and Chemical Engineering, 17:245–255 (1993). DOI
Модифицированное управление с обратной связью:
- E.L. Russell, L.H. Chiang, and R.D. Braatz, Data-driven Techniques for Fault Detection and Diagnosis in Chemical Processes, Springer-Verlag, London, 2000.
- L.H. Chiang, E.L. Russell, and R.D. Braatz, Fault Detection and Diagnosis in Industrial Systems, Springer-Verlag, London, 2001.
Лицензия
Этот проект лицензирован в соответствии с лицензией BSD-3-Clause – см. файл LICENSE и уведомления об авторских правах ниже.
Оригинальная документация на Фортране
Разделы ниже документируют оригинальную фортрановскую реализацию.
Содержимое
Этот каталог содержит коды на Фортране 77 для симуляции процесса Tennessee Eastman (TEP) в разомкнутом и замкнутом контуре, а также файлы обучающих и тестовых данных, используемые для оценки методов, основанных на данных (PCA, PLS, FDA, CVA).
| Имя файла | Описание |
|---|---|
temain.f | Коды симуляции в разомкнутом контуре для TEP |
temain_mod.f | Коды симуляции в замкнутом контуре для TEP |
teprob.f | Подпрограмма для кодов симуляции TEP |
data/ | Каталог эталонных данных с обучающими/тестовыми файлами (см. data/README.md) |
Каждый файл обучающих данных содержит 480 строк и 52 столбца, каждый файл тестовых данных – 960 строк и 52 столбца. Вектор наблюдений в конкретный момент времени задаётся как:
x = [XMEAS(1), XMEAS(2), ..., XMEAS(41), XMV(1), ..., XMV(11)]^T
где XMEAS(n) – n-я измеряемая переменная, XMV(n) – n-я управляемая переменная.
Основная программа для демонстрации применения тестовой задачи управления процессом Tennessee Eastman
Джеймс Дж. Даунс и Эрнест Ф. Фогель
Отдел процессов и систем управления
Компания Tennessee Eastman
П/я 511
Кингспорт, TN 37662
Ссылки
- A Plant-Wide Industrial Process Control Problem, представлено на AIChE 1990 Annual Meeting, сессия Industrial Challenge Problems in Process Control, доклад #24a. Чикаго, Иллинойс, 14 ноября 1990.
- Computers and Chemical Engineering, Vol. 17, No. 3, pp. 245–255 (1993)
Основная программа для демонстрации применения модифицированной тестовой задачи управления процессом Tennessee Eastman.
Эта новая версия представляет собой схему управления всем заводом с обратной связью для процесса Tennessee Eastman. Изменения внесены:
Эван Л. Расселл, Лео Х. Чианг и Ричард Д. Браатц
Лаборатория исследований крупномасштабных систем
Кафедра химической инженерии
Университет Иллинойса в Урбане-Шампейне
600 Южная улица Мэтьюс, Box C-3
Урбана, Иллинойс 61801
http://brahms.scs.uiuc.edu
Оригинальные коды тестовой задачи управления процессом Tennessee Eastman написаны:
Компания Tennessee Eastman
Кингспорт, Теннесси 37662
Уведомление об авторских правах и лицензия
Модифицированный текст защищён авторским правом 1998–2002 Попечительского совета Университета Иллинойса. Все права защищены.
Настоящим предоставляется разрешение, бесплатно, любому лицу, получившему копию этого программного обеспечения и сопутствующих файлов документации («Программное обеспечение»), на использование Программного обеспечения без ограничений, включая, без ограничений, права на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также на разрешение лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
- Распространение исходного кода должно сохранять вышеуказанное уведомление об авторских правах, этот список условий и следующий отказ от ответственности.
- Распространение в двоичной форме должно воспроизводить вышеуказанное уведомление об авторских правах, этот список условий и следующий отказ от ответственности в документации и/или других материалах, поставляемых с распространением.
- Ни названия Large Scale Research Systems Laboratory, University of Illinois, ни имена их участников не могут быть использованы для одобрения или продвижения продуктов, производных от этого Программного обеспечения, без предварительного письменного разрешения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ КОММЕРЧЕСКОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ИНЫЕ ОБЯЗАТЕЛЬСТВА, БУДЬ ТО В РАМКАХ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКШИЕ ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ЕГО ИСПОЛЬЗОВАНИЕМ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С НИМ.
Цитирование
Пользователи должны цитировать оригинальный код, используя следующие ссылки:
- J.J. Downs and E.F. Vogel, A plant-wide industrial process control problem. Представлено на AIChE 1990 Annual Meeting, Session on Industrial Challenge Problems in Process Control, Paper #24a, Chicago, Illinois, November 14, 1990.
- Computers and Chemical Engineering, 17:245–255 (1993)
Модифицированный код:
- E.L. Russell, L.H. Chiang, and R.D. Braatz. Data-driven Techniques for Fault Detection and Diagnosis in Chemical Processes, Springer-Verlag, London, 2000.
- L.H. Chiang, E.L. Russell, and R.D. Braatz. Fault Detection and Diagnosis in Industrial Systems, Springer-Verlag, London, 2001.
- L.H. Chiang, E.L. Russell, and R.D. Braatz. Fault diagnosis in chemical processes using Fisher discriminant analysis, discriminant partial least squares, and principal component analysis, Chemometrics and Intelligent Laboratory Systems, 50:243–252, 2000.
- E.L. Russell, L.H. Chiang, and R.D. Braatz. Fault detection in industrial processes using canonical variate analysis and dynamic principal component analysis, Chemometrics and Intelligent Laboratory Systems, 51:81–93, 2000.
Инструкции по запуску фортрановской программы
- Перейдите к строке 220, измените
NPTSна количество точек данных для симуляции. За каждую минуту работы генерируется 60 точек. - В строке 226 измените
SSPTSна количество точек данных для симуляции в установившемся режиме перед внедрением возмущения. - В строке 367 реализуйте любое из 21 запрограммированных возмущений. Например, для возмущения 2 введите
IDV(2)=1.
Программа сгенерирует 15 выходных файлов; все данные записываются каждые 180 секунд. Подробности см. в Таблице 1.
Путь по умолчанию – домашний каталог. Чтобы изменить имя файла и путь, измените строки 346–360 соответствующим образом.
Чтобы перезаписать уже существующие файлы, измените STATUS='new' на STATUS='old' в строках.
Таблица 1: Содержимое выходных файлов
| Имя файла | Содержимое |
|---|---|
| TE_data_inc.dat | Время (в секундах) |
| TE_data_mv1.dat | Измерения управляемых переменных 1–4 |
| TE_data_mv2.dat | Измерения управляемых переменных 5–8 |
| TE_data_mv3.dat | Измерения управляемых переменных 9–12 |
| TE_data_me01.dat | Измерения переменных 1–4 |
| TE_data_me02.dat | Измерения переменных 5–8 |
| TE_data_me03.dat | Измерения переменных 9–12 |
| TE_data_me04.dat | Измерения переменных 13–16 |
| TE_data_me05.dat | Измерения переменных 17–20 |
| TE_data_me06.dat | Измерения переменных 21–24 |
| TE_data_me07.dat | Измерения переменных 25–28 |
| TE_data_me08.dat | Измерения переменных 29–32 |
| TE_data_me09.dat | Измерения переменных 33–36 |
| TE_data_me10.dat | Измерения переменных 37–40 |
| TE_data_me11.dat | Измерения переменной 41 |
Чтобы обеспечить случайность шумов измерений, случайное число G в подпрограмме (teprob.f, строка 1187) необходимо изменять каждый раз перед запуском.
Сохраните изменения в temain_mod.f и скомпилируйте программу в Unix, набрав:
f77 temain_mod.f teprob.f
Запустите программу, набрав:
a.out
Пересмотрено 4-4-91 для исправления ошибки в документации управляемых переменных.
Подпрограммы
TEFUNC– оценка функций для вызова интеграторомTEINIT– инициализацияTESUBi– вспомогательные подпрограммы (i = 1, 2, ..., 8)
Симуляция процесса имеет 50 состояний (NN=50). Если пользователь хочет добавить дополнительные состояния, NN необходимо соответствующим образом увеличить в вызывающей программе. Дополнительные состояния следует добавлять в конец вектора YY, например YY(51), .... Дополнительные производные следует добавлять в конец вектора YP, например YP(51), ....
Для инициализации новых состояний и расчёта их производных предлагается создать новые подпрограммы оценки функций и инициализации следующим образом:
C -----------------------------------------------
SUBROUTINE FUNC(TIME,YY,YP)
INTEGER NN
DOUBLE PRECISION TIME, YY(NN), YP(NN)
C Вызов подпрограммы оценки функций для процесса
CALL TEFUNC(NN,TIME,YY,YP)
C Расчёт производных для дополнительных состояний
YP(51) = ...
YP(52) = ...
. . .
YP(NN) = ...
RETURN
END
SUBROUTINE INIT(TIME,YY,YP)
INTEGER NN
DOUBLE PRECISION TIME, YY(NN), YP(NN)
C Вызов инициализации для процесса
CALL TEINIT(NN,TIME,YY,YP)
C Инициализация дополнительных состояний
YY(51) = ...
YY(52) = ...
. . .
YY(NN) = ...
RETURN
END
Различия между кодом и его описанием в статье
- Подпрограмма
TEFUNCимеетNNв списке аргументов;TEINITустанавливаетNNв ноль. - Существует 8 вспомогательных подпрограмм (
TESUB1–TESUB8), а не 5. - Технологические возмущения 14–20 НЕ должны использоваться в сочетании с другим возмущением, как указано в статье. Все возмущения можно использовать по отдельности или в любой комбинации.
Управляемые переменные (Фортран)
- Расход D (поток 2) (исправленный порядок)
- Расход E (поток 3) (исправленный порядок)
- Расход A (поток 1) (исправленный порядок)
- Расход A и C (поток 4)
- Клапан рециркуляции компрессора (поток 8)
- Клапан продувки (поток 9)
- Расход жидкости из сепаратора (поток 10)
- Расход жидкого продукта из стриппера (поток 11)
- Паровой клапан стриппера
- Расход охлаждающей воды реактора
- Расход охлаждающей воды конденсатора
Непрерывные измерения процесса (Фортран)
| Переменная | Описание | Единица измерения |
|---|---|---|
| XMEAS(1) | Подача A (поток 1) | kscmh |
| XMEAS(2) | Подача D (поток 2) | кг/ч |
| XMEAS(3) | Подача E (поток 3) | кг/ч |
| XMEAS(4) | Подача A и C (поток 4) | kscmh |
| XMEAS(5) | Рециркуляционный поток (поток 8) | kscmh |
| XMEAS(6) | Скорость подачи в реактор (поток 6) | kscmh |
| XMEAS(7) | Давление в реакторе | кПа (изб.) |
| XMEAS(8) | Уровень в реакторе | % |
| XMEAS(9) | Температура реактора | °C |
| XMEAS(10) | Скорость продувки (поток 9) | kscmh |
| XMEAS(11) | Температура сепаратора продукта | °C |
| XMEAS(12) | Уровень сепаратора продукта | % |
| XMEAS(13) | Давление сепаратора продукта | кПа (изб.) |
| XMEAS(14) | Нижний поток сепаратора (поток 10) | м³/ч |
| XMEAS(15) | Уровень в стриппере | % |
| XMEAS(16) | Давление в стриппере | кПа (изб.) |
| XMEAS(17) | Нижний поток стриппера (поток 11) | м³/ч |
| XMEAS(18) | Температура стриппера | °C |
| XMEAS(19) | Расход пара в стриппер | кг/ч |
| XMEAS(20) | Работа компрессора | кВт |
| XMEAS(21) | Температура охлаждающей воды на выходе реактора | °C |
| XMEAS(22) | Температура охлаждающей воды на выходе сепаратора | °C |
Периодические измерения процесса (Фортран)
Анализ сырья реактора (поток 6)
Частота выборки = 0,1 ч
Время запаздывания = 0,1 ч
Мольные %:
| Переменная | Компонент |
|---|---|
| XMEAS(23) | A |
| XMEAS(24) | B |
| XMEAS(25) | C |
| XMEAS(26) | D |
| XMEAS(27) | E |
| XMEAS(28) | F |
Анализ газа продувки (поток 9)
| Переменная | Компонент |
|---|---|
| XMEAS(29) | A |
| XMEAS(30) | B |
| XMEAS(31) | C |
| XMEAS(32) | D |
| XMEAS(33) | E |
| XMEAS(34) | F |
| XMEAS(35) | G |
| XMEAS(36) | H |
Анализ продукта (поток 11)
Частота выборки = 0,25 ч
Время запаздывания = 0,25 ч
| Переменная | Компонент |
|---|---|
| XMEAS(37) | A |
| XMEAS(38) | B |
| XMEAS(39) | C |
| XMEAS(40) | D |
| XMEAS(41) | E |
Технологические возмущения (Фортран)
| IDV(1) | Ступенчатое изменение соотношения A/C, постоянный состав B (поток 4) |
|---|---|
| IDV(2) | Ступенчатое изменение состава B, постоянное соотношение A/C (поток 4) |
| IDV(3) | Ступенчатое изменение температуры подачи D (поток 2) |
| IDV(4) | Ступенчатое изменение температуры охлаждающей воды на входе реактора |
| IDV(5) | Ступенчатое изменение температуры охлаждающей воды на входе конденсатора |
| IDV(6) | Ступенчатая потеря подачи A (поток 1) |
| IDV(7) | Ступенчатое падение давления в коллекторе C – снижение доступности (поток 4) |
| IDV(8) | Случайные вариации состава A, B, C (поток 4) |
| IDV(9) | Случайные вариации температуры подачи D (поток 2) |
| IDV(10) | Случайные вариации температуры подачи C (поток 4) |
| IDV(11) | Случайные вариации температуры охлаждающей воды на входе реактора |
| IDV(12) | Случайные вариации температуры охлаждающей воды на входе конденсатора |
| IDV(13) | Медленный дрейф кинетики реакции |
| IDV(14) | Залипание клапана охлаждающей воды реактора |
| IDV(15) | Залипание клапана охлаждающей воды конденсатора |
| IDV(16) | (не определено) |
| IDV(17) | (не определено) |
| IDV(18) | (не определено) |
| IDV(19) | (не определено) |
| IDV(20) | (не определено) |
О проекте
Коды на Фортране 77 для симуляции процесса Tennessee Eastman (TEP) в разомкнутом и замкнутом контуре, а также файлы обучающих и тестовых данных, используемые для оценки методов, основанных на данных (PCA, PLS, FDA, CVA).
Ресурсы
- Readme
- Просмотр лицензии
Ой! Произошла ошибка при загрузке. Пожалуйста, перезагрузите эту страницу.
Активность
- Звёзды:
stars - Наблюдатели:
watching - Форки:
forks
Сообщить о репозитории
Релизы: tags
Пакеты
Участники
Языки
- Python – 73.8%
- Fortran – 23.8%
- HTML – 1.6%
- Other – 0.8%
Вы не можете выполнить это действие в данный момент.
Источник
Теги
- #Tutorial
- #MachineLearning
- #TEP
- #PredictiveMaintenance
- #Python
Источник: https://www.youtube.com/watch?v=gz2IDOpCJnQ
#Tutorial #MachineLearning #TEP #PredictiveMaintenance #Python