这个例子展示了如何使用一个经济的MPC控制器来最大化环氧乙烷工厂的产量以获取利润。该控制器采用带有自定义性能成本函数的非线性MPC控制器实现。
这个例子需要Simulink®软件来模拟Si金宝appmulink中乙烯氧化装置的非线性MPC控制。
如果~ mpcchecktoolboxinstalled (“金宝app模型”)disp (运金宝app行这个例子需要Simulink(R)。)返回结束
该示例使用fsolve
从优化工具箱™命令查找标称平衡工作点和fmincon
方法作为默认的非线性规划求解器。
如果~ mpcchecktoolboxinstalled (“optim”)disp (“必须安装优化工具箱才能运行此示例。”)返回结束
乙烯(C2H4)转化为环氧乙烷(C2H4O)发生在一个冷却的气相催化反应器中。三种反应在反应器内混合良好的气相中同时发生:
C2H4 + 0.5*O2 -> C2H4O
C2H4 + 3*O2 -> 2*CO2 + 2*H2O
C2H4O + 2.5*O2 -> 2*CO2 + 2*H2O
第一种反应是需要的,另外两种是不需要的,因为它们减少了C2H4O的生成。空气和乙烯的混合物不断地进入反应器。反应器的第一原理非线性动力学模型被实现为一组常微分方程(ode)oxidationPlantCT
函数。有关更多信息,请参见oxidationPlantCT.m
。
工厂有四个州:
堆内气体密度()
反应器中C2H4浓度()
反应器内C2H4O浓度()
反应堆温度()
工厂有三个投入:
饲料中C2H4浓度()
反应堆冷却套温度()
C2H4进给速度()
模型中的所有变量都按无量纲和统一顺序缩放。基本的植物方程和参数是从[1]得到的,在输入/输出定义和排序上做了一些改变。
该装置是渐近开环稳定的。
主要的控制目标是最大限度地提高环氧乙烷(C2H4O)的产量(这反过来又使利润最大化)在任何稳态操作点,给定的可用性的C2H4在饲料流。
所述C2H4O生产速率被定义为C2H4O浓度在反应器(产品)和出反应器的总容积流量()。
三个输入有效地确定了工作点。是C 2 H 4浓度在饲料中,该MPC控制器可以操纵。为冷却夹套温度,保持温度稳定。为C2H4进料速率,表示来自上游流程的可用乙烯。较高的进料速度提高了可实现的C2H4O产率。在这个例子中,两者都有和测量干扰。
在初始条件下,冷却夹套温度是1.1
C2H4的可用性是0.175
。
TC = 1.1;C2H4Avalability = 0.175;
通过扫描饲料中C2H4浓度的操作范围()使用fsolve
。
uRange = 0.1:0.1:3;EORate = 0(长度(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)包含(饲料中C2H4浓度)ylabel(“灭菌产量”)
C2H4O的最佳产率为0.0156= 1.6。换句话说,如果工厂最初在饲料中以不同的C2H4浓度运行,您期望经济MPC控制器将其提高到1.6,从而达到最佳的C2H4O产量。
经济MPC可以用非线性MPC控制器来实现。预测模型有四个状态和三个输入(一个MV和两个MDs)。在本例中,由于不需要输出函数,假设y = x。
nlobj = nlmpc (4 4“MV”,1'MD'3 [2]);nlobj.States (1)。Name =“窝”;nlobj.States (1)。Name =“C2H4”;nlobj.States (1)。Name =“灭菌”;nlobj.States (1)。Name =“锝”;nlobj.MV。Name =“CEin”;nlobj.MD(1)请将.Name =“锝”;nlobj.MD (2)。Name =“可用性”;
在标准成本函数中,默认情况下对一个或多个OVs应用零权值,因为与OVs相比,MVs更少。
定义了非线性植物模型oxidationPlantDT
。它是一个离散时间模型,采用多步显式欧拉方法进行积分。虽然本例使用的是非线性工厂模型,但您也可以使用线性工厂模型实现经济MPC。
nlobj.Model。StateFcn =“oxidationPlantDT”;nlobj.Model。IsContinuousTime = false;
一般来说,为了提高计算效率,最好是为预测模型提供一个解析的雅可比函数。在本例中,由于模拟足够快,所以没有提供。
相对较大的采样时间25
这里使用的秒是适当的,当工厂是稳定的,主要目标是经济优化。预测地平线2
,因此预测时间为50秒。
Ts = 25;nlobj。Ts = t;% 采样时间nlobj。PredictionHorizon = 2;%的预测范围nlobj。ControlHorizon = 1;%控制地平线
基于第一性原理,预测模型中的所有状态必须为正。因此,指定所有状态的最小界为0。
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 /情况* * x0 x0 (3) (4);
验证初始条件下的状态函数和成本函数。
validateFcns (nlobj x0,情况,[Tc C2H4Avalability]);
Model.StateFcn是OK。无输出函数指定。假设“Y = X”中的预测模型。Optimization.CustomCostFcn是OK。用户提供的模型,成本和约束函数的分析完成。
你可以计算出第一步nlmpcmove
函数。它返回的MV值为1.0,这表明受MVRate约束的限制,经济MPC会将MV值从0.5增加到1。
MV = nlmpcmove(nlobj,X0,U0,零(1,4),[TC C2H4Avalability]);
打开Simulin金宝appk模型。
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秒内,在相同的冷却套温度和C2H4可用性约束下,经济性MPC控制器逐渐将工厂移动到真正的最优状态。提高了C2H4O的产率:
在大规模生产中,每年可能价值数百万美元。
在接下来的100秒内,冷却套的温度从1.1
来1.15
。经济MPC控制器移动顺利厂到新的最优条件0.0135
像预期的那样。
在接下来的100秒内,C2H4的可用性从0.175
来0.25
。经济MPC控制器能够再次工厂移到新的最优稳态0.0195
。
关闭Simulink金宝app模型。
bdclose (mdl)
[1] H. Durand, M. Ellis, P. D. Christofides。经济模型预测控制设计用于输入变化率约束处理和保证经济性能。计算机与化学工程。第92卷,2016年,第18-36页。