此示例显示如何以编程方式优化控制器参数,以满足使用sdo.optimize
功能。
的仿真软万博1manbetx件®模型watertank_stepinput
包括非线性水容系统的植物,并在单回路反馈系统中的PI控制器。
该步块施加阶跃输入。也可以使用其他类型的输入,例如斜坡,以优化由这些输入生成的响应。
这个图显示了水箱系统。
水以与阀门开度成比例的速度从顶部进入容器。阀门的开度与电压成正比,V,应用于泵。水从水箱底部的开口流出,流出的速度与水高度的平方根成正比,H。水流速率中平方根的存在导致了一个非线性的植物。
下表描述了水箱系统的变量、参数、微分方程、状态、输入和输出。
变量 | H是的水箱中的水的高度。 卷是的水箱中的水的体积。 V是施加到泵上的电压。 |
参数 | 一个为罐的横截面积。 b是一个常数,与流入槽内的流量有关。 一个是一个与流出槽的流量有关的常数。 |
微分方程 |
|
状态 | H |
输入 | V |
输出 | H |
水箱的高度,H
,必须符合以下步骤的回应要求:
上升时间小于2.5秒
建立时间小于20秒
过冲小于5%
打开Simulin万博1manbetxk模型。
sys ='watertank_stepinput';open_system(SYS);
记录水位,H
。
在优化过程中,利用模型参数的当前值对模型进行仿真,利用所记录的信号对设计要求进行评估。
PlantOutput =万博1manbetxSimulink.SimulationData.SignalLoggingInfo
;PlantOutput.BlockPath = [SYS '/水容系统'];PlantOutput.OutputPortIndex = 1;PlantOutput.LoggingInfo.NameMode = 1;PlantOutput.LoggingInfo.LoggingName = 'PlantOutput';
存储日志信息。
模拟器=sdo.SimulationTest
(系统);simulator.LoggingInfo。信号= PlantOutput;
模拟器
是sdo.SimulationTest
对象,您稍后还将使用该对象来模拟模型。
指定步骤响应要求。
StepResp = sdo.requirements.StepResponseEnvelope;StepResp。上升时间= 2.5;StepResp。SettlingTime = 20;StepResp。PercentOvershoot = 5;StepResp.FinalValue=2; StepResp.InitialValue = 1;
StepResp
是sdo.requirements.StepResponseEnvelope
宾语。值分配给StepResp.FinalValue
和StepResp.InitialValue
对应于从在水箱高度的阶跃变化1
至2
。
当你优化模型响应,软件修改参数(设计变量)值,以满足设计要求。
选择要优化的模型参数。在这里,对PID控制器的参数进行优化。
p =sdo.getParameterFromModel
(sys, {‘Kp’,‘吻’});
p
为2的数组param.Continuous
对象。
若要将参数限制为正值,请将每个参数的最小值设置为0
。
(1页)。最小值= 0;(2页)。最小值= 0;
创建一个设计函数来评估一组参数值的系统性能。
evalDesign = @(p)的sldo_model1_design(P,模拟器,StepResp);
evalDesign
调用成本函数的是匿名函数吗sldo_model1_design
。成本函数模拟模型和评估设计要求。
类型编辑sldo_model1_design
来查看这个函数。
评估当前响应。(可选的)
通过计算设计变量的当前值的模型响应。
initDesign = evalDesign (p);
在模拟中,阶跃响应块抛出断言警告在MATLAB®提示符,它指示块中指定的需求没有得到满足。
研究非线性不等式约束。
initDesign.Cleq
ans = 0.1739 0.0169 -0.0002 -0.0101 -0.0229 0.0073 -0.0031 0.0423
一些CLEQ
值是正的,超出规定的公差,其指示使用当前的参数值违反设计要求的响应。
指定优化选项。
选择=sdo.OptimizeOptions
;opt.MethodOptions.Algorithm = 'SQP';
软件配置选择
使用默认的优化方法,fmincon
和序列二次规划算法fmincon
。
优化响应。
[pOpt, optInfo] =sdo.optimize
(evalDesign,P,优化);
在每一步优化迭代,软件模拟模型和默认的优化求解fmincon
修改设计变量以满足设计要求。有关更多信息,请参见优化算法如何构造最小化问题。
优化完成后,命令窗口显示以下结果:
最大步长的一阶Iter项目F-计数F(X)约束最优0 5 0 0.1739 1 10 0 0.03411 1 0.81 2 15 0 0 0.235 0.0429 3 15 0 0 2.26e-18 0本地最小发现满足约束。优化完成,因为目标函数是在可行的方向非递减,给函数公差的设定值内,并且约束约束公差的设定值内满足到。
的消息找到满足约束条件的局部最小值
表明优化求解器找到了在规定公差内满足设计要求的解决方案。有关优化期间显示的输出的更多信息,请参见迭代显示(优化工具箱)。
中包含的优化终止信息optInfo
输出参数。这些信息可以帮助您验证响应符合阶跃响应的要求。
例如,检查以下字段:
CLEQ
,给出了优化后的非线性不等式约束。
optInfo.Cleq
ANS = -0.0001 -0.0028 -0.0050 -0.0101 -0.0135 -0.0050 -0.0050 -0.0732
所有值满足CLEQ
≤0
在优化公差范围内,满足阶跃响应要求。
exitflag
,其中确定为什么优化终止。
这个值是1
,这表明求解器发现一种解决方案,是小于的函数值和约束违反规定的公差。
查看优化的参数值。
POPT
POPT(1,1)=名称:“KP的值:2.0545最小值:0最大值:Inf文件免:1比例:1的信息:[1x1的结构] POPT(2,1)=名称: '起' 值:0.3801最少:0最大:Inf文件免:1比例:1的信息:[1x1的结构]
模拟与优化值模型。
更新模型中的优化参数值。
sdo.setValueInModel (sys pOpt);
模拟模型。
sim(系统);
万博1manbetxSimulink.SimulationData.SignalLoggingInfo
|param.Continuous
|sdo.OptimizeOptions
|sdo.SimulationTest
|sdo.getParameterFromModel
|sdo.optimize
|sdo.requirements.StepResponseEnvelope