主要内容

优化和控制使用非线性MPC馈料式反应堆

这个例子展示了如何使用非线性模型预测控制优化批量反应堆操作。示例还显示了如何运行一个非线性MPC控制器作为自适应MPC控制器和一个时变MPC控制器快速比较它们的性能。

馈料式化学反应器

下面的不可逆和放热反应发生在批量反应堆[1]:

A + B = > C(所需产品)C = > D(不受欢迎的产品)

批处理开始反应堆部分充满了已知反应物的浓度一个B。批处理反应0.5小时,在此期间,额外的B可以添加和反应堆温度可以改变。

批处理反应堆的非线性模型中定义的fedbatch_StateFcnfedbatch_OutputFcn功能。该系统具有以下输入、状态和输出。

被操纵的变量

  • u1=u_B的流量B饲料

  • u2=茶匙,反应堆温度设定值,摄氏度

测量的干扰

  • u3=c_Bin的浓度,BB饲料流

  • x1=V * c_A摩尔的一个在反应堆

  • x2=V * (c_A + c_C)摩尔的A + C在反应堆

  • x3=V液体体积的反应堆

  • x4=T,反应堆温度,K

输出

  • 日元=V * c_C数量的产品C在反应堆,相当于x2-x1

  • y2=q_r,除热率,一个非线性函数的状态

  • y3=V在反应堆液体体积

我们的目标是最大化的生产C(日元)的批处理过程。在批处理过程中,必须满足以下操作约束:

  1. 硬上限取热率(y2)。否则,温度控制失败。

  2. 在反应堆硬上限液体体积(y3)安全。

  3. 艰难的上界和下界B进给速率(u_B)。

  4. 硬上界和下界反应堆温度设定值(茶匙)。

指定名义操作条件在批处理过程的开始。

c_A0 = 10;c_B0 = 1.167;c_C0 = 0;= 1;T0 = 50 + 273.15;c_Bin = 20;

指定的名义。

x0 = 0 (3,1);x0 (1) = c_A0 *半;x0 x0 (2) = (1) + c_C0 *半;x0(3) =半;x0 (4) = T0;

指定的名义投入。

情况= 0 (3,1);情况(2)= 40;情况(3)= c_Bin;

指定额定输出。

y0 = fedbatch_OutputFcn (x0,情况);

非线性MPC设计优化批量操作

创建一个非线性MPC对象4州,3输出,2操纵变量,1测量干扰。

nlmpcobj_Plan = nlmpc (4 3“MV”(1、2),“医学博士”3);
零权重应用于一个或多个ov因为有MVs比ov少。

考虑到预期的批处理时间特遣部队,选择控制器样品时间Ts和预测地平线。

Tf = 0.5;N = 50;Ts = Tf / N;nlmpcobj_Plan。Ts = t;nlmpcobj_Plan。PredictionHorizon = N;

如果你设置控制地平线等于预测地平线,将有50个免费的控制措施,从而导致100决策变量,因为工厂有两个操纵变量。减少决策变量的数量,您可以指定使用阻塞移动控制地平线。预测地平线划分为8块,代表8自由控制动作。的前七块持续七个预测步骤。这样做减少了决策变量的数量到16岁。

nlmpcobj_Plan。ControlHorizon = [7 7 7 7 7 7 7 1];

指定控制器的非线性模型。这个函数fedbatch_StateFcnDT将连续时间模型转换为离散时间使用多步向前欧拉积分公式。

nlmpcobj_Plan.Model。StateFcn = @ (x, u) fedbatch_StateFcnDT (x, u, Ts);nlmpcobj_Plan.Model。OutputFcn = @ (x, u) fedbatch_OutputFcn (x, u);nlmpcobj_Plan.Model。IsContinuousTime = false;

指定的进给速率范围B

nlmpcobj_Plan.MV (1)。最小值= 0;nlmpcobj_Plan.MV (1)。Max = 1;

指定范围的反应堆温度设定值。

nlmpcobj_Plan.MV (2)。Min = 20;nlmpcobj_Plan.MV (2)。Max = 50;

指定除热率的上界。真正的约束是1.5 e5。因为非线性MPC只能执行在采样时刻的约束,使用的安全裕度0.05 e5为了防止采样瞬间之间的约束违反。

nlmpcobj_Plan.OV (2)。Max = 1.45 e5;

指定上限液体体积的反应堆。

nlmpcobj_Plan.OV (3)。Max = 1.1;

因为我们的目标是最大化日元,的数量C在反应堆的批处理时间,指定一个自定义代价函数替换默认的二次成本。自日元= x2-x1,定义自定义成本最小化x1, x2)使用一个匿名函数。

nlmpcobj_Plan.Optimization。CustomCostFcn = @(X,U,e,data) X(end,1)-X(end,2); nlmpcobj_Plan.Optimization.ReplaceStandardCost = true;

配置操纵变量随时间线性变化在每个块,选择分段线性插值。默认情况下,非线性MPC不断操纵变量在每个块,使用分段常数插值,这可能太严格的最优轨迹规划问题。

nlmpcobj_Plan.Optimization。MVInterpolationOrder = 1;

使用默认的非线性规划求解器进行求解fmincon货币政策委员会来解决非线性的问题。对于这个示例,将宽容有助于达到一阶最优求解步骤。

nlmpcobj_Plan.Optimization.SolverOptions。StepTolerance = 1 e-8;

在进行优化之前,检查是否所有的定制函数满足NLMPC需求使用validateFcns命令。

validateFcns (x0, nlmpcobj_Plan情况(1:2),情况(3));
模型。StateFcn就可以了。模型。OutputFcn就可以了。优化。CustomCostFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.

优化结果分析

找到最优轨迹的操纵变量的生产C是最大化的批处理过程。为此,使用nlmpcmove函数。

流(“\ nOptimization开始…\ n”);[~,~,信息]= nlmpcmove (x0, nlmpcobj_Plan情况(1:2),0(1、3)情况(3));流(预计生产的C (y1) % g摩尔。\ n”Info.Yopt(结束,1));流(“一阶最优性是满足(信息。ExitFlag = % i)。\ n ',Info.ExitFlag);流(“优化完成…\ n”);
优化开始……松弛变量未使用或zero-weighted定制成本函数。所有约束将是非常困难的。预计生产C (y1)是2.02353摩尔。一阶最优性满足(信息。ExitFlag = 1)。优化完成…

离散模型使用一个简单的欧拉积分,这可能是不准确的。检查这一点,使用集成模型ode15sMV命令计算最优轨迹。

Nstep =大小(Info.Xopt, - 1) - 1;t = 0;X = x0 ';t0 = 0;i = 1: Nstep u_in = [Info.MVopt(我,1:2)”;c_Bin];ODEFUN = @ (t, x) fedbatch_StateFcn (x, u_in);TSPAN = (t0, t0 + Ts);Y0 = X(最终:)”;[吹捧,你]= ode15s (ODEFUN TSPAN, Y0);t = [t;宣传(2)):;X = [X;你(2:,:)]; t0 = t0 + Ts;结束nx =大小(X, 1);Y = 0 (nx、3);i = 1: nx Y(我:)= fedbatch_OutputFcn (X(我,:),u_in);结束流(' \ n实际生产的C (y1) % g摩尔。\ n 'X (, 2) - X (, 1));流(的排热率(y2)满足上界。\ n”);
实际生产的C (y1)是2.0228摩尔。除热率(y2)满足上界。

在顶部的情节图后,实际的生产C同意预期的生产C计算从nlmpcmove。在底部的阴谋,除热率从来没有超过它的硬约束。

图次要情节(2,1,1)情节(t、Y (: 1), (0: Nstep) * Ts, Info.Yopt (: 1),‘*’0.5)轴([0 0 Y(结束,1)+ 0.1])传说({“实际”,“预期”},“位置”,“西北”)标题(“反应堆(y1)摩尔C”次要情节(2,1,2)tTs = (0: Nstep) * Ts;t(结束)= 0.5;情节(t Y (:, 2),“- - -”[0 tTs(结束)],1.5 e5 *的(1、2),“r——”e5)轴([0 0.5 0.8,1.6 e5])传说({“q_r”,“上界”},“位置”,“西南”)标题(“除热率(y2)”)

仔细检查的排热率表明,它可以表现出高峰和低谷之间采样瞬间作为反应物成分变化。因此,除热率超过了指定的最大值1.45 e5(约0.35 t = h)但保持低于真实的最多1.5 e5

下图显示了最优轨迹的调整计划B进给速率(u1)和反应器温度(x4)及其定位点(u2)。

图次要情节(2,1,1)楼梯(tTs, Info.MVopt(: 1)标题(B (u1)的进给速率次要情节(2,1,2)情节(tTs, Info.MVopt (:, 2),‘*’、t、-273.15 X (:, 4),“- - -”,20 0.5 [0]、[20],“r——”,0.5 [0],[50 50],“r——”轴([0 0.5 15 55])标题(“反应堆温度及其选点”)({传奇“选点”,“实际”},“位置”,“东南”)

轨迹开始于一个相对较高的进给速率,从而增加c_B以及由此产生的C生产速度。为了防止超过热移除率约束,反应堆温度和加料速度必须减少。最终温度达到下界,保持直到反应堆几乎是完整的和B进给速率必须为零。然后增加到最大值(温度增加C生产),最后会略微下降(减少D生产,有利于在更高的温度)。

顶部的情节下图显示了消费c_A,这往往会减少C生产。补偿,该计划第一次增加c_B不再是可能的,当(反应器液体体积不得超过1.1),该计划使最佳使用温度。在底部的情节图后,液体体积不超过其上限。

图次要情节(2,1,1)c_A = X (: 1)。/ X (:, 3);c_B = (c_Bin * X (:, 3) + X (: 1) + V0 * (c_B0 - c_A0 c_Bin)) / X (:, 3);情节(t [c_A c_B])传说({“c_A”,“c_B”},“位置”,“西方”次要情节(2,1,2)情节(tTs, Info.Yopt(:, 3)标题(液体体积的)

非线性MPC设计跟踪C产品最优轨迹

跟踪产品的最优轨迹C计算上面,你设计的另一个非线性MPC控制器相同的预测模型和约束。然而,使用标准的二次成本和违约视野跟踪目的。

为了简化控制任务,假设的最优轨迹B进给速率实现植物和认为它是一个测量干扰跟踪控制器。因此,控制器使用反应堆温度设定值作为它唯一的操纵变量跟踪所需的日元概要文件。

创建跟踪控制器。

nlmpcobj_Tracking = nlmpc (4 3“MV”2,“医学博士”[1,3]);nlmpcobj_Tracking。Ts = t;nlmpcobj_Tracking。模型= nlmpcobj_Plan.Model;nlmpcobj_Tracking。MV = nlmpcobj_Plan.MV (2);nlmpcobj_Tracking。OV = nlmpcobj_Plan.OV;nlmpcobj_Tracking.Weights。OutputVariables = (1 0 0);%跟踪y1只nlmpcobj_Tracking.Weights。ManipulatedVariablesRate = 1 e-6;%进取MV
零权重应用于一个或多个ov因为有MVs比ov少。

获得C生产(日元)参考信号的最优轨迹规划。

Cref = Info.Yopt (: 1);

获得的进给速率B(u1从最优轨迹规划。饲料的浓度B(u3)是一个常数。

MD = [Info.MVopt (: 1) c_Bin *的(N + 1, - 1)];

首先,货币政策委员会在非线性跟踪控制器模式下运行。

(X1, Y1, 1/2 MV1 et1] = fedbatch_Track (x0, nlmpcobj_Tracking情况(2),N, Cref, MD);流(' \ nNonlinear MPC:运行时间= % g交会。生产的C = % g摩尔\ n '、et1 Y1(结束,1));
非线性MPC:运行时间= 5.98252秒。生产的C = 2.01754摩尔

第二,运行控制器作为自适应MPC控制器。

nlmpcobj_Tracking.Optimization。RunAsLinearMPC =“自适应”;(X2, Y2、MV2 et2] = fedbatch_Track (x0, nlmpcobj_Tracking情况(2),N, Cref, MD);流(' \ nAdaptive MPC:运行时间= % g交会。生产的C = % g摩尔\ n ',et2, Y2(结束,1));
自适应MPC:运行时间= 3.0612秒。生产的C = 2.01567摩尔

第三,作为一个时变MPC控制器运行控制器。

nlmpcobj_Tracking.Optimization。RunAsLinearMPC =“TimeVarying”;[X3, Y3, MV3 et3] = fedbatch_Track (x0, nlmpcobj_Tracking情况(2),N, Cref, MD);流(' \ nTime-varying MPC:运行时间= % g交会。生产的C = % g摩尔\ n 'et3, Y3(结束,1));
时变MPC:运行时间= 2.50141秒。生产的C = 2.02346摩尔

货币政策委员会在MPC的大多数应用程序中,线性的解决方案,如自适应MPC和时变MPC,提供性能与金宝搏官方网站非线性MPC的解决方案,同时消耗更少的资源和执行速度。在这些情况下,非线性MPC往往代表最好的控制结果,MPC能够实现。通过运行一个非线性MPC控制器线性MPC控制器,你可以评估是否实现线性MPC解决方案在实践中已经足够好了。

在这个例子中,所有三个方法接近最优C生产规划阶段中获得的。

图绘制(Ts * (0: N), (Y1 (: 1) Y2 (: 1) Y3(: 1)])标题(“生产C”)({传奇“NLMPC”,“自适应”,“TimeVarying”},“位置”,“西北”)

意想不到的结果是,时变MPC产生更多C比非线性MPC。解释是,模型线性化方法用于自适应和时变模式导致违反除热约束,从而导致更高的C生产。

图绘制(Ts * (0: N), (Y1 (:, 2) Y2 (:, 2) Y3 (:, 2) 1.5 e5 *的(N + 1, - 1)])标题(“热移除率”)({传奇“NLMPC”,“自适应”,“TimeVarying”,“约束”},“位置”,“西南”)

货币政策委员会自适应模式使用植物状态和输入每个控件的开始时间间隔获取单一线性预测模型。这种方法并不占已知未来的进给速率的变化,例如。

时变的方法避免这个问题。然而,开始的时候批它假定(默认情况下),美国将在地平线保持不变。它纠正了这一次它获得第一解决方案(使用数据选择变量),但最初选择的反应堆温度过高,导致早期q_r约束违反。

引用

B。[1]斯里尼瓦桑,S. Palanki, and D. Bonvin, "Dynamic optimization of batch processes I. Characterization of the nominal solution",电脑和化学工程,卷27(2003),页1-26。

另请参阅

功能

对象

相关的话题