主要内容

设计优化以满足频域要求(代码)

此示例示出了如何调整模型参数以满足频域的要求,使用sdo.optimize命令。

这个例子需要Simulink®Control万博1manbetx Design™。

悬架模型

打开Simulin万博1manbetxk模型。

open_system ('sdoSimpleSuspension'

质量-弹簧-阻尼模型代表简单的悬架系统,对于这个例子,我们调整系统以满足典型的悬架要求。该模型使用Simulink块实现了表示质量-弹簧-阻尼器的二阶系统,包括:万博1manbetx

  • 一种大量的增益模块由总悬挂质量参数化,m0 + mLoad.总质量为标称的质量的总和,m0和可变负载质量,M负载

  • 一种禁止通过阻尼系数参数化的增益块,B.

  • 一种春天由弹簧常数参数化的增益块,K.

  • 两个集成器块来计算质量速度和位置。

  • 一种带限干扰力对物体施加扰动力的块。扰动力假定为限带白噪声。

模拟模型查看系统响应于所施加的干扰力。

设计问题

初始系统带宽过高。处理步骤这可以从尖刺位置信号中看到。调整弹簧和阻尼值,以满足以下要求:

  • 在-3dB系统带宽不能超过10弧度/秒。

  • 系统的阻尼比必须小于1/根号2。这确保了通频带内的频率不会被系统放大。

  • 最小化系统的预期故障率。预期的故障率是由Weibull分布依赖于质量,弹簧,和阻尼值所描述。

  • 这些要求必须全部满足为0至20千克负载的质量范围。

指定设计变量

DesignVars = sdo.getParameterFromModel('sdoSimpleSuspension', {'B'“k”});DesignVars(1)。最小值= 100;DesignVars(1)。最大= 10000;DesignVars(2)。最小值= 10000;DesignVars(2)。最大= 100000;

指定不确定变量

指定M负载中,负载质量,作为一个不确定变量。这将确保最佳的解决方案是稳健的负载质量的变化。

UncVars = sdo.getParameterFromModel('sdoSimpleSuspension'“M负载”);UncVars_Values = {......10;......20};

指定设计要求

优化过程中指定的设计要求来满足。

需求=结构;要求。带宽= sdo.requirements.BodeMagnitude (......'BoundFrequencies'(100),......“BoundMagnitudes”[-3 -3]);Requirements.DampingRatio = sdo.requirements.PZDampingRatio;

可靠性要求将在下面描述的优化目标函数来指定。可靠性要求是用来调整弹簧和阻尼器的值以最小化过的100e3英里的寿命预期的故障率。故障率是使用于该系统的阻尼率的Weibull分布计算的。作为阻尼比的增加,故障率将增加。

线性化的定义

设计要求使用系统带宽和阻尼比,这些频域特性需要线性化模型。为模型创建模拟器,并使用模拟器计算要求使用的线性系统。

模拟器= sdo。模拟('sdoSimpleSuspension');

通过指定该系统的线性化输入和输出指定线性系统来计算。线性系统输入是的输出带限干扰力块和线性系统的输出是输出的x_dot块(位置信号)。

的IO(1)=的LiNiO(“sdoSimpleSuspension /限带干扰力”, 1'输入');的IO(2)=的LiNiO(“sdoSimpleSuspension / x_dot”, 1'输出');

将线性化IOs添加到asdo.SystemLoggingInfo对象具有日志记录,以及线性化快照时间。在这种情况下,快照时间设置为0,模型初始条件。

SYS1 = sdo.SystemLoggingInfo;sys1.Source =的iOS“;sys1。LoggingName =的iOS“;sys1.LinearizationIOs = IO的;sys1.SnapshotTimes = 0;

添加系统日志信息模拟器。当模拟器用于运行该模型,由指定的线性化的IO所定义的线性系统被计算并添加到模拟日志与指定的记录名称。

Simulator.SystemLoggingInfo = SYS1;

建立优化目标函数

创建一个调用在每个优化迭代的函数,以评估设计要求。

可以使用匿名函数用一个参数的呼叫sdoSimpleSuspension_Design.的sdoSimpleSuspension_Design功能对设计参数,仿真,设计要求,不确定变量和不确定变量值的参数。

optimfcn = @(P)sdoSimpleSuspension_Design(P,模拟器,要求,UncVars,UncVars_Values);类型sdoSimpleSuspension_Design
函数vals = sdosimplesspension_design(p,simulator,要求,unc等,uncvars_values)%sdosimplessuspension_design%%% sdosimplesspension_design函数用于评估一个简单的暂停系统设计。%%| P |输入参数是悬架设计参数的向量。%%|模拟器|输入参数是一个sdo.simulinktest对万博1manbetx象,用于%simulate | sdosimplesspension |模型和日志仿真信号。%%|要求|输入参数包含用于评估悬架设计的设计要求%。%%| | UNCVARS |和| UNCVARS_VALUES | arguments specify the uncertain % variable and uncertain variable values. % % The |Vals| return argument contains information about the design % evaluation that can be used by the |sdo.optimize| function to optimize % the design. % % See also sdoSimpleSuspension_cmddemo % Copyright 2015 The MathWorks, Inc. %% Evaluate the suspension reliability % %Get the spring and damper design values allVarNames = {P.Name}; 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

优化选项

指定优化选项。

选项= sdo.OptimizeOptions;Options.MethodOptions.Algorithm =“激活集”;Options.MethodOptions.TolGradCon = 1E-06;

优化设计

呼叫sdo.optimize与目标函数句柄,参数优化和选择。

[Optimized_DesignVars,信息] = sdo.optimize(optimfcn,DesignVars,选项);
优化开始2021年- 2月23日19:05:17 max一阶Iter F-count f (x)约束步长最优10 0 5 0.0619897 0.7642 1 0.351266 -0.1277 0.461 1.22 - 2 15 20 0.0829063 0.01312 0.51 0.425 0.189345 -0.03881 0.188 0.312 3 4 24 0.0365398 0 0.308 1.55 - 5 28 0.0294977 0 0.0143 0.733 6 32 0.0293065 - 1.57 e-16 0.000417 - 0.00142局部最小值满足约束条件。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。

相关例子

要了解如何使用优化的悬挂系统响应优化器, 看优化设计以满足频域的要求(GUI)

关闭模型。

bdclose('sdoSimpleSuspension'