主要内容

不确定变量的设计优化(代码)

这个例子展示了当存在不确定变量时如何优化设计。您优化了连续搅拌釜反应器(CSTR)的尺寸,以便在原料变化或不确定的情况下将产品浓度变化和生产成本降至最低。

连续搅拌反应器(CSTR)模型

连续搅拌釜反应器(CSTRs)在过程工业中很常见。Simu万博1manbetxlink®模型,sdoCSTR,模拟了[1]中描述的夹套非绝热(即非绝热)罐式反应堆。假设CSTR是完全混合的,只有一个一级放热和不可逆反应,B \ rightarrow美元一个美元,即反应物转化为B美元,乘积。

在本例中,您使用以下双态CSTR模型,该模型使用了基本的会计和节能原则:

$ $ \压裂{d C_A} {dt} = \压裂{F} {* h} (C_{饲料}- C_A) - r * C_A $ $

$ $ \压裂{d T} {dt} = \压裂{F} {* h} (T_{饲料}识别- T) - \压裂{h} {c_p \ρ}

$$r = k_0*e^{\frac{-E}{r *T}}$$

  • C_A美元,美元C_{饲料}$- A在CSTR和饲料中的浓度[kgmol/m^3]

  • 元新台币T_{饲料}识别美元,T_{酷}识别美元- CSTR,进料和冷却液温度[K]

  • $ F $而且\ρ美元-容积流量[m^3/h]和CSTR中的物料密度[1/m^3]

  • h美元而且一个美元—CSTR的高度[m]和加热截面积[m^2]。

  • k_0美元-反应的指前非热因子B \ rightarrow美元(1 / h)

  • E美元而且H美元的活化能和反应热B \ rightarrow美元(千卡/ kgmol)

  • R美元-玻尔兹曼气体常数[kcal/(kgmol * K)]

  • c_p美元而且你美元-热容[kcal/K]和传热系数[kcal/(m^2 * K * h)]

打开Simulin万博1manbetxk模型。

open_system (“sdoCSTR”);

该模型包括一个级联PID控制器控制器子系统。控制器调节反应堆温度,元新台币,反应器剩余浓度,C_A美元

CSTR设计问题

假设CSTR是圆柱形的,冷却剂应用于圆柱体的底部。调整CSTR横截面积,一个美元,和CSTR高度,h美元,以达到下列设计目标:

  • 尽量减少残留浓度的变化,C_A美元.残留浓度的变化对CSTR产品的质量有负面影响。最小化变化也提高了CSTR的利润。

  • 降低冷却液的平均温度T_{酷}识别美元.加热或冷却夹套冷却剂温度是昂贵的。降低冷却液平均温度可以提高CSTR利润。

设计必须考虑到饲料浓度质量的变化,美元C_{饲料}$,进料温度,T_{饲料}识别美元.CSTR的饲料来自不同的供应商。饲料的质量因供应商而异,并且在每个供应批次内也有所不同。

指定设计变量

选择以下模型参数作为设计变量进行优化:

  • 气缸截面积一个美元

  • 气缸高度h美元

p = sdo.getParameterFromModel(“sdoCSTR”, {“一个”“h”});

将截面积限制在[1 2]m^2的范围内。

(1页)。最小值= 1;(1页)。最大值= 2;

将高度限制在[13]m范围内。

(2页)。最小值= 1;(2页)。最大值= 3;

指定不确定变量

选择进料浓度和进料温度作为不确定变量。您可以使用不同的进料温度和浓度值来评估设计。

pUnc = sdo.getParameterFromModel(“sdoCSTR”, {“FeedCon0”“FeedTemp0”});

为不确定变量创建一个参数空间。对两个变量都使用正态分布。指定平均值作为当前参数值。指定饲料浓度平均值的5%和温度平均值的1%的方差。

uSpace = sdo.ParameterSpace(pUnc);uSpace = setDistribution(uSpace,“FeedCon0”makedist (“正常”、标点(1)value, 0.05 *标点(1)value));uSpace = setDistribution(uSpace,“FeedTemp0”makedist (“正常”、标点(2)value, 0.01 *标点(2)value));

饲料浓度与饲料温度成反比。将此信息添加到参数空间。

冷色系色光变化%。RankCorrelation = [1 -0.6;-0.6 - 1];

秩相关矩阵对每个参数都有一行和一列,其中(i,j)项指定i和j参数之间的相关性。

对参数空间进行采样。散点图显示了浓度与温度之间的相关性。

rng (“默认”);%的再现性uSmpl = sdo.sample(uSpace,60);sdo.scatterPlot (uSmpl)

理想情况下,你需要评估设计和不确定空间中每个点的组合,这意味着30*60 = 1800次模拟。每个模拟大约需要0.5秒。您可以使用并行计算来加快评估速度。对于这个例子,您只使用具有最大和最小浓度和温度值的样品,将评估时间减少到1分钟左右。

[~,iminC] = min(usmpls . feedcon0);[~,imaxC] = max(usmpls . feedcon0);[~,iminT] = min(usmpls . feedtemp0);[~,imaxT] = max(usmpls . feedtemp0);uSmpl = uSmpl(unique([iminC,imaxC,iminT,imaxT]),:);

明确设计要求

设计要求要求测井模型信号。在优化过程中,使用设计变量的当前值对模型进行模拟。记录信号用于评估设计要求。

记录以下信号:

  • CSTR浓度,可用在第二输出端口sdoCSTR /装运箱

Conc = 万博1manbetxSimulink.SimulationData.SignalLoggingInfo;浓缩的。BlockPath =“sdoCSTR /装运箱”;浓缩的。OutputPortIndex = 2;Conc.LoggingInfo.NameMode = 1;Conc.LoggingInfo.LoggingName =“浓度”
  • 冷却液温度,可在第一次输出时使用sdoCSTR /控制器

Coolant = 万博1manbetxSimulink.SimulationData.SignalLoggingInfo;冷却剂。BlockPath =“sdoCSTR /控制器”;冷却剂。OutputPortIndex = 1;Coolant.LoggingInfo.NameMode = 1;Coolant.LoggingInfo.LoggingName =“冷却”

创建并配置模拟测试对象,以记录所需的信号。

模拟器= sdo。模拟(“sdoCSTR”);simulator.LoggingInfo.Signals = [Conc,Coolant];

创建目标/约束函数

创建一个函数来评估CSTR设计。这个函数在每次优化迭代中都被调用。

方法使用带有一个参数的匿名函数sdoCSTR_design函数。

evalDesign = @(p) sdoCSTR_design(p,模拟器,pUnc,uSmpl);

evalDesign功能:

  • 是否有一个指定CSTR维度的输入参数

  • 返回优化目标值

sdoCSTR_design函数使用循环,遍历为进料浓度指定的样本值。在循环中,函数为:

  • 使用当前迭代、进料浓度和进料温度值来模拟模型

  • 计算剩余浓度变化和冷却剂温度成本

要查看目标函数,请键入编辑sdoCSTR_design

评估初始设计

调用evalDesign函数的初始CSTR维度。

dInit = evalDesign(p)
dInit = struct with fields: F: 11.3356 costConc: 6.4390 costCoolant: 4.8965

为初始设计绘制模型响应图。使用样品进料浓度数值模拟模型。该图显示了残余浓度和冷却剂温度的变化。

sdoCSTR_plotModelResponse (p,模拟器、标点、uSmpl);

sdoCSTR_plotModelResponse函数绘制模型响应图。要查看此函数,请键入编辑sdoCSTR_plotModelResponse

优化设计

将目标函数和初始CSTR维传递给sdo.optimize

pOpt = sdo.optimize(evalDesign,p)
优化开始于2022年11月26日11:44:29 max一阶Iter f -count f(x)约束步长最优性0 4 5.17535 01 8 3.81522 0 2.01 7.83 2 12 2.63963 0 0.57 3.03 3 16 2.53426 0 0.159 0.292 4 20 2.50995 0 0.017 0.432 5 24 2.50266 0 0.125 1.44 6 28 2.50097 0 0.0966 0.234 7 32 2.47473 0 0.0135 0.0719 8 37 2.47473 0 0.000955 0.0694局部最小可能。约束满足。Fmincon停止,因为当前步长的大小小于步长公差的值,并且约束被满足到约束公差的值之内。pOpt(1,1) =名称:'A'值:2最小值:1最大值:2空闲:1比例:0.5000信息:[1x1 struct] pOpt(2,1) =名称:'h'值:2.2850最小值:1最大值:3空闲:1比例:2信息:[1x1 struct] 2x1参数。连续

评估优化设计

调用evalDesign函数与优化的CSTR尺寸。

dFinal = evalDesign(pOpt)
dFinal = struct with fields: F: 2.4747 costConc: 1.4505 costCoolant: 1.0242

为优化设计绘制模型响应图。使用样品进料浓度数值模拟模型。优化设计减小了不同进料的剩余浓度变化和平均冷却液温度。

sdoCSTR_plotModelResponse (pOpt模拟器、标点、uSmpl);

相关的例子

若要了解如何使用灵敏度分析探索CSTR设计空间并选择用于优化的初始设计,请参见使用参数抽样(代码)进行设计探索

参考文献

[1]贝奎特B.W.过程动力学:建模、分析与仿真。《上马鞍河》,新泽西州:普伦蒂斯出版社,1998年。

%关闭模型bdclose (“sdoCSTR”

另请参阅

||

相关的话题