主要内容

满足频域要求的设计优化(规范)

方法调优模型参数以满足频域要求,此示例演示了如何使用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]; %#ok Cleq_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”