河南坠子王春红:使用并行计算提高Simulink Design Optimization...
来源:百度文库 编辑:中财网 时间:2024/04/29 13:14:53
以HL-20飞船的系统模型为例,介绍使用Parallel Computing Toolbox™和Simulink Design Optimization™采用并行的方法进行控制器参数调节的方法。主要讨论如何将一个优化问题设置为并行计算,能够并行优化的几类模型以及并行优化速度的提高。
使用并行优化调节HL20飞船滑翔道控制器参数
图1所示,HL20是往返太空的飞行器。在着陆的时候,飞行器要消除风的影响,避免偏离跑道。
图1 HL20飞行器的Simulink模型
调节三个滑翔道控制器参数,将飞行器侧面偏离轨道的距离限制在5米以内(在风的影响下)。这项工作非常适合并行优化,因为模型很复杂,仿真一次需要花费一分钟,而优化需要仿真的次数从几十次到几百次不等。
使用Simulink Design Optimization优化控制器参数(图2)
图2 使用Simulink Design Optimization中的信号约束模块指定设计的约束并启动优化。
为了比较,我们以串行和并行两种方式运行优化任务。采用并行方式时,用matlabpool指令打开多个MATLAB workers,并使能Simulink Design Optimization中并行功能,进行交互式并行优化计算,无需其他的配置。图3显示了并行优化HL20时对速度的提高。
图3 HL20控制器参数优化结果
并行计算将优化的速度提高了2.81倍(速度的提高不仅依赖于workers数量,同时也取决于优化方法的选用)。这是一个好结果,但是注意速度提高的比率并不等于核的数量,而且4核的速度也并不是双核的两倍。在后面我们会更详细讨论加速的问题。
并行运行多个仿真
在以并行方式解决优化问题之前,首先考虑几个相关的简单问题。为了图解并行计算的效果,我们研究一个蒙特卡洛仿真。
此模型由一个三阶的对象和一个PID控制器组成,比HL20的模型简单得多,不到一秒就能仿真完毕。这个例子有助于理解并行运行多个仿真的好处。对象模型中有两个不确定的参数a1和a2,设定a1、a2的值在一个最小最大的范围内变化,比如a1变化50次,a2变化50次,那么总共需要仿真2500次。
图4 比较了以串行和并行两种方式运行多次仿真所花费的时间。使用与HL20例子中同一机器进行并行计算。在网络上客户端和workers之间的数据传输不会占用很多时间。为了优化计算性能,最大化核的使用,并且将其它进程运行的时间降到最小。
图4 在串行和并行仿真时,仿真时间是仿真次数的函数。
图4表示了并行运行仿真时的加速达到了所期望的加速效果,双核计算机使用了2个MATLAB workers后速度提高了一倍,4核计算机使用MATLAB workers后速度提高了4倍。
由于与并行运行仿真相关的上层交互的原因,通过并行计算可以将仿真次数降到最小。在图4中能够看到这两条曲线的交叉点。在双核的情况下对应8次仿真,4核情况下对应6次仿真。
结果清楚地显示了并行运行仿真的好处。那么优化问题只是部分以并行方式运行,并不是全部如何去理解呢?
什么时候以并行方式进行优化?
许多因素影响并行计算加速的效果。我们集中研究影响Simulink Design Optimization性能的两种因素:需要优化的参数个数和模型的复杂度。
参数个数
优化算法执行的仿真次数依赖于所要优化的参数个数。为了说明这一点,考虑采用两种优化算法优化HL20模型:梯度下降法和模式搜索法。
梯度下降法优化
每次迭代,梯度下降法优化算法需要以下的仿真过程:
- 当前解处仿真
- 与优化参数相关的当前设计点处目标梯度的计算
- 线性搜索估计(估计沿着梯度方向的目标值)
仿真中需要计算梯度的部分是彼此独立的,能够进行分布式仿真。图5显示了理论上最好的加速效果,而且随着参数的增加加速也在提高。在这个例子中,有4个MATLAB workers,潜在地能够将速度提高4倍,但是由于一些仿真任务不能分布式进行,所以实际的速度小于4倍。
图中同时显示了采用本地最大核数计算有4,8,12,16个参数的情况。HL20飞行器模型中有3个参数,4核处理器能够加速2.14倍,与图5所显示的加速情况非常接近。图5中并行计算的MATLAB workers的数量是一定的,通过增加参数的个数提高问题的复杂度。
图5 用梯度下降法并行优化加速效果。上面的实线表示没有线性搜索仿真时理论上最大可能的加速,虚线表示最多5次线性搜索仿真的加速情况。
%We compute the theoretically best expected speedup as follows:
Np = 1:32; %Number of parameters (32 parameters are needed to
%define 8 filtered PID controllers)
Nls = 0; %Number of line search simulations, assume 0 for now
%The gradients are computed using central differences so there
%are 2 simulations per parameter. We also need to include
%the line search simulations to give the total number of
%simulations per iteration:
Nss = 1+Np*2+Nls; %Total number of serial simulations, one nominal,
%2 per parameter and then line searches
%The computation of gradients with respect to each parameter
%can be distributed or run in parallel. Running the gradient
%simulations in parallel reduces the equivalent number of
%simulations that run in series, as follows:
Nw = 4; %Number of MATLAB workers
Nps = 1 + ceil(Np/Nw)*2+Nls; %Number of serial simulations
%when distributing gradient
%simulations
%The ratio Nss/Nps gives us the best expected speed-up
图6表示当增加了参数个数时增加了MATLAB workers个数的加速情况,如果我们有足够多的workers,那么运行参数多的优化问题也同运行参数少的优化问题一样不用那么费时。
图6 当MATLAB workers的个数增加时采用梯度下降法并行优化时的加速情况。上面的实线表示没有线性搜索仿真时理论上最大可能的加速,
虚线表示最多5次线性搜索仿真
% This code is a modification of the code shown in Figure 5.
Nw = Np; %Ideal scenario with one
%processor per parameter
Nps = 1 + ceil(Np/Nw)*2+Nls; %Total number of serial
%simulations--
%in this case, ceil(Np/Nw)=1
%The ratio Nss/Nps gives us the best expected speed-up.
模式搜寻算法
模式搜寻优化算法在每步迭代时求解一组候选解。算法求解所有的候选解然后为下一步迭代生成新的候选解。因为每个候选解都是独立的,所以对所有候选解的求解可以并行进行。
模式搜寻用两个候选解集:search和poll。这些集合中元素的个数与优化参数的个数成正比:
%Default number of elements in the solution set
Nsearch = 15*Np;
%Number of elements in the poll set with a 2N poll method
Npoll = 2*Np;
每次迭代中仿真的总数就是在search集和poll集中候选解数目之和。在求解候选解时,仿真被平均分配给MATLAB workers。在分配后,串行进行的仿真的数量因此就被减少到:
Nds = ceil(Nsearch/Nw)+ceil(Npoll/Nw);
当串行求解候选解的时候,一旦优化求解器找到一个比当前解更好的解就将终止该次迭代。从经验上看,大约有一半的候选解会被求解。因此串行仿真的数量约为:
Nss = 0.5*(Nsearch+Npoll);
search解集只在头几个优化迭代中被用到,而在随后只用poll解集。在两种情况中,Nss/Nds的比值就是加速情况(图7)。
图7:有模式搜寻算法的并行优化加速情况。深色曲线代表当解和poll集都被求解时的加速情况,而上面的浅色曲线则表示当仅求解poll集时的加速情况。
图8表示当MATLAB worker数量增加时对应的加速情况。
图8:当MATLAB worker数量增加时,有模式搜寻算法的并行优化的加速情况。
深色曲线表示当解和poll集都被求解时的加速情况,
而上面的浅色曲线表示当仅求解poll集时的加速情况。
在一个串行优化中,期望的加速度将落在这两条曲线内。注意即使只有一个参数,模式搜索算法也会因为分配而提高速度。另外考虑HL20航天飞机的问题,它有三个参数,观察到四核的加速度为2.81,而这与图7中的加速度曲线非常吻合。
仿真的复杂程度是如何影响加速的
我们对并行优化的简化分析没有考虑上层中各远端worker间的数据交换,但是这将会限制期望的加速。优化算法依靠共享通道以便让远端worker访问模型,而返回的数据受到目标和约束违背值的限制,所以一般来说这些都会使上层交互变少。因此如果进行并行的优化将会恶化这个问题,除非当模型仿真时间接近于0。例如,简单的PID模型需要6个或更多个分配才能看出提速效果,如果我们想优化PID控制器的三个参数的话,每个优化迭代中就会有1+2*3+Nls个仿真次数,这样我们就看不出并行计算带来的好处了3。
并行优化中不确定参数的影响
优化必须经常考虑到不确定的参数(上例简单模型中像a1和a2这样的参数,它们相对于被优化参数独立变化)。不确定参数将会导致额外的仿真,这些仿真也将在每个迭代中被求解,从而影响到并行的加速效果。这些额外的仿真在优化算法中的一个参数循环中被求解,可以被看作是一个且更长的仿真。作为结果,不确定参数不会影响图5-8中所示的上层空闲加速计算,但它们对增加仿真复杂程度有着类似的影响,并且减少上层交互对并行优化的加速效果。
影响优化加速的更多因素
基于优化的方法可以使对被控对象模型的参数估计和控制器参数整定更加系统化和高效,而通过并行优化可以使特定的优化问题更加高效。Simulink Design Optimization通过设置即可处理并行问题,多参数优化的问题,仿真时间很长的复杂仿真,或各种适宜并行优化的问题。
另一个加速优化过程的方法是使用Simulink中的加速模式。Simulink提供的Accelerator模式以可编译的目标代码替代了普通的解释性代码。利用可编译代码可以加速很多模型的仿真,特别是那些运行时间较相关的编译时间长的仿真。结合使用并行计算和Accelerator仿真模式可以进一步地加速优化任务。
________________________________________
1 我们的设置包括一个双核64-bit 的AMD®;2.4GHz, 3.4GB和四核的64位的AMD;和2.5GHz,
7.4GB Linux®的机器
2 在交互的并行技术中,我们使用matlabpool命令在双核机器中设置2个work,在四核机器中设置
4个worker。
3 想为交换的并行技术而设置MATLAB,您需要用matlabpool命令打开一群MATLAB worker。这
可能需要几秒种,但一旦您设置了matlabpool并更新了模型,优化就可以一直受益于并行计算。
在您整个并行计算的过程中,设置只需执行一次就可以。
更多信息
- Webinar: Introduction to Simulink Design Optimization
- Improving Optimization Performance with Parallel Computing. MATLAB Digest, March 2009
所使用产品
- MATLAB
- Simulink
- Simulink Design Optimization
- Parallel Computing Toolbox
- Genetic Algorithm and Direct Search Toolbox