Этот пример показов, как максимизировать производство этиленоксида объекта для получения прибыли с помощью экономического контроллера MPC. Этот контроллер реализован с использованием нелинейного контроллера MPC с пользовательской функцией затрат на производительность.
Этот пример требует программного обеспечения Simulink ® для моделирования нелинейного управления MPC объекта окисления этилена в Simulink.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink(R) is required to run this example.') return end
В примере используется fsolve
команда из Optimization Toolbox™, чтобы найти номинальную рабочую точку равновесия и fmincon
метод как метод нелинейного программирования по умолчанию решатель.
if ~mpcchecktoolboxinstalled('optim') disp('Optimization Toolbox must be installed to run this example.') return end
Превращение этилена (C2H4) в этиленоксид (C2H4O) происходит в охлажденном газофазном каталитическом реакторе. Три реакции происходят одновременно в хорошо смешанной газовой фазе внутри реактора:
C2H4 + 0.5*O2 -> C2H4O
C2H4 + 3*O2 -> 2*CO2 + 2*H2O
C2H4O + 2.5*O2 -> 2*CO2 + 2*H2O
Первая реакция желательна, а две другие нежелательны, потому что они снижают C2H4O выработку. Смесь воздуха и этилена непрерывно подают в реактор. Первичный нелинейная динамическая модель реактора реализована как набор обыкновенных дифференциальных уравнений (ОДУ) в oxidationPlantCT
функция. Для получения дополнительной информации смотрите oxidationPlantCT.m
.
У объекта четыре состояния:
Плотность газа в реакторе ()
C2H4 концентрация в реакторе ()
C2H4O концентрация в реакторе ()
Температура в реакторе ()
Объект имеет три входа:
C2H4 концентрация в сырье ()
Температура рубашки охлаждения реактора ()
C2H4 подачи ()
Все переменные в модели масштабируются, чтобы быть безразмерными и иметь порядок единиц. Основные уравнения и параметры объекта получают из [1] с некоторыми изменениями в определениях входа/выхода и упорядоченном расположении.
Объект асимптотически разомкнут стабильно.
Основной целью управления является максимальное увеличение дебита этиленоксида (C2H4O) (что, в свою очередь, максимизирует прибыль) в любой установившейся рабочей точке, учитывая наличие C2H4 в потоке сырья.
Скорость производства C2H4O определяется как продукт концентрации C2H4O в реакторе () и общей объемной скорости потока жидкости, выходящего из реактора ().
Рабочая точка эффективно определяется тремя входами. - C2H4 концентрация в подаче, которой может управлять контроллер MPC. температура охлаждающей рубашки, которая сохраняет температуру стабильной. - C2H4 скорость подачи, которая указывает на доступный этилен, поступающий от вышестоящего процесса. Более высокая скорость подачи увеличивает достижимую скорость производства C2H4O. В этом примере оба и являются измеренными нарушениями порядка.
При начальном условии температура охлаждающей рубашки 1.1
и доступность C2H4 0.175
.
Tc = 1.1; C2H4Avalability = 0.175;
Вычислите оптимальный дебит C2H4O путем пролистывания рабочей области значений концентрации C2H4 в сырье () с помощью fsolve
.
uRange = 0.1:0.1:3; EORate = zeros(length(uRange),1); optimopt = optimoptions('fsolve','Display','none'); for ct = 1:length(uRange) xRange = real(fsolve(@(x) oxidationPlantCT(x,[uRange(ct);Tc;C2H4Avalability]),rand(1,4),optimopt)); EORate(ct) = C2H4Avalability/uRange(ct)*xRange(3)*xRange(4); end figure plot(uRange,EORate) xlabel('C2H4 concentration in the feed') ylabel('C2H4O Production Rate')
Оптимальный темп производства C2H4O 0,0156 достигается при = 1,6. Другими словами, если объект первоначально работает с другой концентрацией C2H4 в сырье, вы ожидаете, что экономический контроллер MPC доведет его до 1,6, так что достигается оптимальный уровень производства C2H4O.
Экономический MPC может быть реализован с нелинейным контроллером MPC. Модель предсказания имеет четыре состояния и три входа (один MV и два MD). В этом примере, поскольку вам не нужна выходная функция, примите y = x.
nlobj = nlmpc(4,4,'MV',1,'MD',[2 3]); nlobj.States(1).Name = 'Den'; nlobj.States(1).Name = 'C2H4'; nlobj.States(1).Name = 'C2H4O'; nlobj.States(1).Name = 'Tc'; nlobj.MV.Name = 'CEin'; nlobj.MD(1).Name = 'Tc'; nlobj.MD(2).Name = 'Availability';
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than OVs.
Нелинейная модель объекта управления задана в oxidationPlantDT
. Это модель в дискретном времени, где для интегрирования используется многоступенчатый явный метод Эйлера. Хотя в этом примере используется нелинейная модель объекта управления, можно также реализовать экономический MPC с помощью линейных моделей объекта управления.
nlobj.Model.StateFcn = 'oxidationPlantDT';
nlobj.Model.IsContinuousTime = false;
В целом, для улучшения вычислительной эффективности лучшей практики обеспечить аналитическую якобианскую функцию для модели предсказания. В этом примере вы не предоставляете его, потому что симуляция достаточно быстрая.
Относительно большой шаг расчета 25
секунды, используемые здесь, подходят, когда объект является стабильным, и основной целью является экономическая оптимизация. Горизонт предсказания 2
, что дает время предсказания 50 секунд.
Ts = 25; nlobj.Ts = Ts; % Sample time nlobj.PredictionHorizon = 2; % Prediction horizon nlobj.ControlHorizon = 1; % Control horizon
Все состояния в модели предсказания должны быть положительными, основанными на первых принципах. Поэтому задайте минимальную границу нуля для всех состояний.
nlobj.States(1).Min = 0; nlobj.States(2).Min = 0; nlobj.States(3).Min = 0; nlobj.States(4).Min = 0;
Вход объекта должен оставаться в пределах насыщения между 0.1
и 3
.
nlobj.MV.Min = 0.1; nlobj.MV.Max = 3;
Скорости изменения также ограничены +/- 0.02
/ сек.
nlobj.MV.RateMin = -0.02*Ts; nlobj.MV.RateMax = 0.02*Ts;
Вместо использования стандартной квадратичной целевой функции в качестве замены используется пользовательская функция затрат. Необходимо максимизировать скорость добычи C2H4O в конце горизонта предсказания.
f = -(u3/u1*x3*x4)
Отрицательный знак в f
используется для максимизации производительности, поскольку контроллер минимизирует f
во время оптимизации. Для получения дополнительной информации смотрите oxidationCostFcn.m
.
nlobj.Optimization.CustomCostFcn = 'oxidationCostFcn';
nlobj.Optimization.ReplaceStandardCost = true;
Предположим, что объект первоначально работает в u1 = 0.5
.
u0 = 0.5;
Найдите состояния в установившемся состоянии, используя fsolve
.
x0 = real(fsolve(@(x) oxidationPlantCT(x,[u0;Tc;C2H4Avalability]),rand(1,4),optimopt));
Скорость производства C2H4O составляет 0,0138, далеко от оптимального условия 0,0156.
EORate0 = C2H4Avalability/u0*x0(3)*x0(4);
Проверьте функцию состояния и функцию стоимости при начальном условии.
validateFcns(nlobj,x0,u0,[Tc C2H4Avalability]);
Model.StateFcn is OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
Вы можете вычислить первое перемещение, используя nlmpcmove
функция. Это возвращает MV 1,0, что указывает на то, что экономический MPC увеличит MV с 0,5 до 1, ограниченный ограничением MVRate.
mv = nlmpcmove(nlobj,x0,u0,zeros(1,4),[Tc C2H4Avalability]);
Откройте модель Simulink.
mdl = 'mpc_economicEO';
open_system(mdl)
Температура охлаждающей рубашки первоначально 1.1
и остается постоянным в течение первых 100 секунд. Затем он увеличивается до 1.15
и, следовательно, снижает оптимальный темп производства C2H4O от 0.0156
на 0.0135
.
Доступность C2H4 первоначально 0.175
и остается постоянным в течение первых 200 секунд. Затем он увеличивается до 0.25
и, следовательно, увеличивает оптимальный темп производства C2H4O от 0.0135
на 0.0195
.
Модель включает постоянные (нулевые) ссылки для четырех выходов объекта. Блок Контроллер нелинейного MPC требует этих опорных сигналов, но они игнорируются в пользовательской функции затрат.
Подсистема Plant вычисляет состояния объекта путем интеграции ОДУ в oxidationPlantCT.m
. Предположим, что все состояния измеримы таким образом, что вам не нужно реализовывать нелинейную оценку состояния в этом примере. The C2H4O
выход объекта - это мгновенный темп производства C2H4O, который используется в целях отображения.
Запустите симуляцию.
open_system([mdl '/MV']); open_system([mdl '/C2H4O']); sim(mdl)
Поскольку C2H4O объект, работающий в начальном условии, не оптимален, его прибыль может быть улучшена. В первые 100 секунд экономичный контроллер MPC постепенно переводит объект в истинно оптимальное условие при той же температуре охлаждающей рубашки и C2H4 ограничениях доступности. Он улучшает C2H4O производительность за счет:
который может стоить миллионы долларов в год в крупном производстве.
В течение следующих 100 секунд температура охлаждающей рубашки увеличивается с 1.1
на 1.15
. Экономический контроллер MPC плавно перемещает объект к новому оптимальному условию 0.0135
как и ожидалось.
За следующие 100 секунд доступность C2H4 увеличивается с 0.175
на 0.25
. Экономический контроллер MPC снова способен переместить объект в новое оптимальное установившееся состояние 0.0195
.
Закройте модель Simulink.
bdclose(mdl)
[1] H. Durand, M. Ellis, P. D. Christofides. «Прогнозирующие системы управления экономической модели для входа ограничения скорости изменения и гарантированной экономической эффективности». Компьютеры и химическая техника. Том 92,2016, стр. 18-36.