这个例子显示了如何使用经济MPC控制器最大限度的生产利润环氧乙烷工厂。这种控制器是采用与基于性能的自定义的成本函数非线性的MPC控制器实现。
此示例需要的Simulink软件来模拟在Si万博1manbetxmulink乙烯氧化植物的非线性MPC控制。
如果~ mpcchecktoolboxinstalled (“万博1manbetx模型”)DISP(运万博1manbetx行这个示例需要Simulink(R)。)返回结束
该示例使用fsolve
从优化工具箱™命令查找标称平衡工作点和fmincon
方法作为默认非线性规划解算器。
如果~ mpcchecktoolboxinstalled (“optim”)DISP('必须安装优化工具箱才能运行此示例。')返回结束
乙烯(C2H4)转化为环氧乙烷(C2H4O)在一个冷却的气相催化反应器中发生。反应器内混合良好的气相中同时发生三个反应:
C2H4 + 0.5 * O2 - > C2H4O
C2H4 + 3 * O2 - > 2 * CO 2 + 2 * H 2 O
C2H4O + 2.5*O2 -> 2*CO2 + 2*H2O
第一反应就是想因为他们减少C2H4O生产其他两个是不必要的。空气和乙烯的混合物连续地供入反应器。将反应器的第一原理非线性动态模型被实现为一组在普通微分方程(常微分方程)的oxidationPlantCT
函数。有关更多信息,请参见oxidationPlantCT.m
。
该工厂有四个州:
反应堆内气体密度()
C2H4浓度在反应器()
反应器内C2H4O浓度()
反应堆温度()
该工厂有三个输入:
C2H4浓度在饲料中()
反应器冷却夹套温度()
C2H4进给速度()
模型中的所有变量都缩放为无量纲的统一秩序和。基本植物方程和参数是从[1],在输入/输出定义和订货一些变化而获得。
该装置是渐近开环稳定的。
主控制目标是最大化的环氧乙烷(C2H4O)生产速率(其进而最大化利润)在任何稳态工作点,给定的C 2 H 4进料流中的可用性。
所述C2H4O生产速率被定义为C2H4O浓度在反应器(产品)和出反应堆的总容积流量()。
操作点实际上是由三个输入决定的。是C 2 H 4浓度在饲料中,该MPC控制器可以操纵。是冷却夹套温度,这使温度稳定。为C2H4进料速率,表示可用乙烯来自上游工艺。较高的进给率可以提高C2H4O的可实现产量。在本例中,两者都是和测量干扰。
在初始条件下,冷却夹套温度是1.1
和C2H4可用性0.175
。
TC = 1.1;C2H4Avalability = 0.175;
通过扫描进料中C2H4浓度的工作范围,计算出最佳C2H4O产量()使用fsolve
。
uRange = 0.1:0.1:3;EORate =零(长度(uRange),1);optimopt = optimoptions(“fsolve”,'显示','没有');为CT = 1:长度(uRange)XRANGE =实际(fsolve(@(X)oxidationPlantCT(X,[uRange(CT);锝; C2H4Avalability]),兰特(1,4),optimopt));EORate(CT)= C2H4Avalability / uRange(CT)* XRANGE(3)* XRANGE(4);结束图图(uRange,EORate)xlabel(“饲料中C2H4的浓度”)ylabel(“C2H4O生产率”)
在at时,C2H4O的最佳产率为0.0156= 1.6。换句话说,如果工厂最初在饲料中使用不同的C2H4浓度,你可以期望经济MPC控制器将其控制在1.6,从而达到最佳的C2H4O产量。
经济MPC可以用非线性MPC控制器来实现。预测模型具有四个状态和三个输入(一个MV和两个MD)。在这个例子中,因为你并不需要一个输出功能,假设Y = X。
nlobj = nlmpc (4 4“MV”1,'MD'3 [2]);nlobj.States(1)。Name =“窝”;nlobj.States(1)。Name =“C2H4”;nlobj.States(1)。Name ='C2H4O';nlobj.States(1)。Name =“锝”;nlobj.MV.Name =“CEin”;nlobj.MD(1)请将.Name =“锝”;nlobj.MD(2)。Name =“可用性”;
在标准的成本函数,零个权重是通过默认,因为有比的MV OVS少施加到一个或多个OVS。
文中定义了非线性对象模型oxidationPlantDT
。它是一种离散时间模型,采用多步显式欧拉法进行积分。虽然本例使用非线性植物模型,但您也可以使用线性植物模型实现经济的MPC。
nlobj.Model。StateFcn ='oxidationPlantDT';nlobj.Model。IsContinuousTime = false;
一般来说,为了提高计算效率,它是提供一种用于预测模型的分析雅可比功能最佳实践。在这个例子中,你不提供一个因为模拟是速度不够快。
的样本时间比较大25
当工厂是稳定的,主要目标是经济优化时,使用秒是合适的。预测地平线2
,这获得了预测时间是50秒。
Ts = 25;nlobj。Ts = t;% 采样时间nlobj。PredictionHorizon = 2;%的预测范围nlobj。ControlHorizon = 1;%控制范围
在预测模型中的所有国家都必须根据第一原则是积极的。因此,指定所有国家必然为零的最小值。
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。最小值= 0.1;nlobj.MV。Max = 3;
的变化率也限制在+/-0.02
/秒。
nlobj.MV。杀鼠灵= -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
。
情况= 0.5;
使用查找状态在稳定状态fsolve
。
X0 =实际(fsolve(@(X)oxidationPlantCT(X,[U0;锝; C2H4Avalability]),兰特(1,4),optimopt));
C2H4O的产率为0.0138,与0.0156的最佳条件相差甚远。
EORate0 = C2H4Avalability / U0 * X0(3)* X 0(4);
在初始条件下验证状态函数和代价函数。
validateFcns (nlobj x0,情况,[Tc C2H4Avalability]);
Model.StateFcn是OK。无输出函数指定。假设“Y = X”中的预测模型。Optimization.CustomCostFcn是OK。用户提供的模型,成本和约束函数的分析完成。
你可以计算第一步nlmpcmove
函数。它返回1.0的MV,这表明经济MPC将增加MV为0.5至1,由MVRate约束限制。
MV = nlmpcmove(nlobj,X0,U0,零(1,4),[TC C2H4Avalability]);
打开Simulin万博1manbetxk模型。
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控制器需要这些参考信号,但在自定义代价函数中被忽略。
植物子系统通过集成ode来计算植物状态oxidationPlantCT.m
。假设所有的状态是可测量的,这样你就不需要实现这个例子非线性状态估计。该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万博1manbetx模型。
bdclose(MDL)
[1] H.杜兰德,M.埃利斯,P. D.赫里斯托菲。“经济模型预测控制设计了变化率输入的制约处理和保证经济的表现。”计算机与化学工程。卷。92,2016,第18-36。