方法调优模型参数以满足频域要求,此示例演示了如何使用sdo.optimize
命令。
此示例需要Simulink®Control 金宝appDesign™。
打开Simulin金宝appk模型。
open_system (“sdoSimpleSuspension”)
质量-弹簧-阻尼器模型代表简单的悬架系统,对于这个例子,我们调整系统以满足典型的悬架要求。该模型使用Simulink块实现了表示质量-弹簧-阻尼器的二阶系统,包括:金宝app
一个质量
以总悬浮质量为参数的增益块,m0 + mLoad
.总质量是一个名义质量的和,m0
,可变负载质量,mLoad
.
一个阻尼器
增益块参数化为阻尼系数,b
.
一个春天
由弹簧常数参数化的增益块,k
.
两个积分器块来计算质量速度和位置。
一个限带扰动力
对物体施加扰动力的块。扰动力假设为限带白噪声。
模拟模型以查看系统对施加扰动力的响应。
初始系统带宽过高。这可以从尖尖的位置信号中看出。调整弹簧和阻尼器的值,以满足以下要求:
-3dB系统带宽不能超过10rad /s。
系统阻尼比必须小于1/√(2)。这确保了没有频率在通带被系统放大。
尽量减少系统的预期故障率。预期故障率由依赖于质量、弹簧和阻尼器值的威布尔分布描述。
当负载质量范围从0到20kg时,这些要求必须全部满足。
DesignVars = sdo.getParameterFromModel(“sdoSimpleSuspension”, {“b”,“k”});DesignVars(1)。最小= 100;DesignVars(1)。最大值= 10000;DesignVars(2)。最小= 10000;DesignVars(2)。最大值= 100000;
指定mLoad
,荷载质量为不确定变量。这将确保最优解对负载质量的变化具有鲁棒性。
unvars = sdo.getParameterFromModel(“sdoSimpleSuspension”,“mLoad”);UncVars_Values = {...10;...20};
指定优化期间要满足的设计需求。
需求= struct;要求。带宽= sdo.requirements.BodeMagnitude(...“BoundFrequencies”, [10 100],...“BoundMagnitudes”, [-3 -3]);要求。DampingRatio = sdo.requirements.PZDampingRatio;
可靠性要求将在下面描述的优化目标函数中指定。可靠性要求用于调整弹簧和阻尼器的值,以最大限度地降低100e3英里寿命内的预期故障率。故障率是利用系统阻尼比的威布尔分布来计算的。随着阻尼比的增加,故障率预计也会增加。
设计要求利用系统的带宽和阻尼比,这些频域特性要求对模型进行线性化。为模型创建一个模拟器,并使用模拟器计算需求所使用的线性系统。
模拟器= sdo。模拟(“sdoSimpleSuspension”);
通过指定系统的线性化输入和输出来指定要计算的线性系统。线性系统的输入是函数的输出限带扰动力
块和线性系统的输出是输出的x_dot
块(位置
信号)。
IOs(1) = linio(“sdoSimpleSuspension/限带扰动力”,1,“输入”);IOs(2) = linio(“sdoSimpleSuspension / x_dot”,1,“输出”);
添加线性化IOs到sdo。SystemLoggingInfo
对象,该对象具有日志记录名称和线性化快照时间。在这种情况下,快照时间设置为0,即模型初始条件。
sys1 = sdo.SystemLoggingInfo;sys1。源=“苹果”;sys1。LoggingName =“苹果”;sys1。线性化IOs = IOs;sys1。SnapshotTimes = 0;
向模拟器添加系统日志记录信息。当模拟器用于运行模型时,将计算指定线性化IOs定义的线性系统,并使用指定的日志名称将其添加到模拟日志中。
模拟器。SystemLoggingInfo = sys1;
创建在每次优化迭代中调用的函数,以评估设计需求。
使用带有一个参数的匿名函数调用sdoSimpleSuspension_Design
.的sdoSimpleSuspension_Design
函数具有设计参数、模拟器、设计要求、不确定变量和不确定变量值的参数。
optimfcn = @(P) sdoSimpleSuspension_Design(P,模拟器,需求,UncVars,UncVars_Values);类型sdoSimpleSuspension_Design
函数Vals = sdoSimpleSuspension_Design(P,Simulator,Requirements,UncVars,UncVars_Values) % sdoSimpleSuspension_Design % % sdoSimpleSuspension_Design函数用于评估一个简单的%悬挂系统设计。|P|输入参数是悬架设计参数的向量。|模拟器|输入参数是一个sdo。金宝appSimulinkTest对象用于%模拟|sdoSimpleSuspension|模型和日志模拟信号。|要求|输入参数包含用于评估悬挂设计的设计要求。| unvars |和| unvars_values |参数指定不确定变量%和不确定变量值。|Vals|返回参数包含关于可以被|sdo使用的design %计算的信息。优化|函数优化%的设计。%%参见sdoSimpleSuspension_cmddemo版权所有2015 The MathWorks, Inc. %%评估悬架可靠性%%获取弹簧和阻尼器设计值allVarNames = {p.l ame};idx = strcmp(allVarNames,'k');k = P(idx).Value; idx = strcmp(allVarNames,'b'); b = P(idx).Value; %Get the nominal mass from the model workspace wksp = get_param('sdoSimpleSuspension','ModelWorkspace'); m = evalin(wksp,'m0'); %The expected failure rate is defined by the Weibull cumulative %distribution function, 1-exp(-(x/l)^k), where k=3, l is a function of the %mass, spring and damper values, and x the lifetime. d = b/2/sqrt(m*k); pFailure = 1-exp(-(100e3*d/250e3)^3); %% Nominal Evaluation % % Evaluate the model and requirements with uncertain parameters set to their % nominal values. % Simulate the model. Simulator.Parameters = [P(:);UncVars(:)]; Simulator = sim(Simulator); % Retrieve logged linearizations. Sys = find(Simulator.LoggedData,'IOs'); % Evaluate the design requirements. Cleq_Bandwidth = evalRequirement(Requirements.Bandwidth,Sys.values); Cleq_DampingRatio = evalRequirement(Requirements.DampingRatio,Sys.values); %% Uncertain Evaluation % % Evaluate the model and requirements for all combinations of uncertain % parameter values. for ct=1:size(UncVars_Values,1) UncVars(1).Value = UncVars_Values{ct,1}; % Simulate the model. Simulator.Parameters = [P(:);UncVars(:)]; Simulator = sim(Simulator); % Retrieve logged linearizations. Sys = find(Simulator.LoggedData,'IOs'); % Evaluate the design requirements. Cleq_Bandwidth_UncVars = evalRequirement(Requirements.Bandwidth,Sys.values); Cleq_DampingRatio_UncVars = evalRequirement(Requirements.DampingRatio,Sys.values); Cleq_Bandwidth = [Cleq_Bandwidth; Cleq_Bandwidth_UncVars]; %#okCleq_DampingRatio = [Cleq_DampingRatio; Cleq_DampingRatio_UncVars]; %#ok end %% Return Values. % % Collect the evaluated design requirement values in a structure to % return to the optimization solver. Vals.F = pFailure; Vals.Cleq = [... Cleq_Bandwidth(:); ... Cleq_DampingRatio(:)]; end
指定优化选项。
Options = sdo.OptimizeOptions;Options.MethodOptions.Algorithm =“激活集”;Options.MethodOptions.TolGradCon = 1e-06;
sdo的电话。使用目标函数句柄、要优化的参数和选项进行优化。
[Optimized_DesignVars,Info] = sdo.optimize(optimfcn,DesignVars,Options);
优化开始01- 9 -2021 17:05:14 max一阶Iter f -count f(x)约束步长最优性05 0.0619897 0.7642 1 10 0.351266 -0.1277 0.461 1.22 2 15 0.189345 -0.03881 0.188 0.312 3 20 0.0829063 0.01312 0.51 0.425 4 24 0.0365398 0 0.308 1.55 5 28 0.0294977 0 0.0143 0.733 6 32 0.0293065 0 0.000417 0.00142发现满足约束的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
学习如何优化悬架系统使用响应优化器,请参阅满足频域要求的设计优化(GUI).
关闭模型。
bdclose (“sdoSimpleSuspension”)