在被控对象模型上使用蒙特卡洛方法改进系统模型
航空航天系统模型通常由大量的子系统组成,每一个子系统可能由不同的开发团队完成,而一个共享的建模环境和通用的建模标准能帮助开发团队轻松、快捷的交互,超越了组织、语言和文化的障碍。在航空航天应用中,蒙特卡洛技术可用于保证高可靠性和鲁棒性设计。但是进行蒙特卡洛仿真非常耗时,如果能够并行运行仿真可大大的缩短仿真的时间。在这篇文章中将主要讨论在MATLAB/Simulink中建模、优化和测试对象模型以搭建更好的系统模型的技术,同时也介绍通过使用高性能计算集群提高蒙特卡洛分析速度的新技术。
蒙特卡洛技术
工程师在同一个建模环境中建立对象模型和嵌入式控制器后,可以使用多个对象的参数测试该控制器,也包括理想值仿真。建模时可变的物理参数提供了在实物中将要发生动作的最好描述。蒙特卡洛分析就是对实际物理参数可变性仿真的一种标准的方法。在航空航天应用中,蒙特卡洛技术被用来保证高质量和鲁棒设计,同时它有助于对非常复杂而又很难得到分析结果的系统进行建模,也能对不确定性进行仿真。但是蒙特卡洛仿真一个最大的缺点是它需要对单个模型进行成千上万次的运行,而且仿真的系统越复杂或系统中包含的不确定性因素越多,那么执行仿真的次数也越多,而通常数百次或数千次运行一个复杂模型需要花费几天的时间。所以在开发过程中仿真时间往往成为致命的瓶颈。而并行地运行多个且独立的仿真循环则能显著地节省时间。新的高性能的计算工具和多处理器计算机强大的处理能力在很大程度上排除了时间和资源的限制,非常适合对包含大量参数的复杂动态系统的仿真。
分布式计算
一些计算问题被称为是并行的,因为它们可以很容易地被分在数个节点运行,而没有交互、共享数据或是不同节点之间的同步点。每个节点上的运行时间相比启动和停止应用程序的时间占绝对优势。蒙特卡洛仿真就是属于这一类,因此非常适合在计算集群上运行。仿真软件和HPC集群之间的集成需要最大化计算能力的开发。
有了SystemTest和MATLAB分布式计算引擎(MATLAB Distributed Computing Server)这样的COTS工具,用户无需编写复杂的脚本文件就可以轻松实现在计算集群上运行仿真。通过这些工具可以在用户界面(GUI)中设置进行蒙特卡洛测试的模型中需要变化的一系列参数,然后定义相应的任务,使其运行在多个处理器上。从GUI启动任务避免了编写脚本和集群交互、创建任务、从单独的仿真运行编译结果等。这也使得在计算集群或多核、多处理器计算机上进行分布式Simulink仿真而无需编写任何代码成为可能。COTS仿真工具和HPC调度器的集成是提高蒙特卡洛仿真速度的一种手段。
案例研究
A. 模型
我们要分析的系统是控制副翼角度的液压执行器。建模的目的是分析伺服阀参数改变的影响,模拟电路控制开环伺服阀的效果以及副翼上负载变化的影响。我们将通过上升时间和调节时间研究这些参数对于系统稳定性和性能的影响。
图1 闭环副翼系统的模型。模块中所关心的参数已被标注:1-6是液压伺服阀的参数;
7-10是控制器模拟电路的实现;11是空气动力学负载。
使用COTS物理建模工具,我们在Simulink中建立被控对象和控制器的模型。选择COTS物理建模工具,可以帮助我们开发精确的对象模型,通过仿真研究被控对象与现实世界尽可能接近的动作行为。图1显示的是完整的系统模型,包括伺服阀、双动液压缸、副翼和控制器的模拟电路实现。图2 显示的是通过SimElectronics建模的控制器详细的模拟电路。
图2 控制器模拟电路的实现的模型,感兴趣的参数已被标注
在闭环模型中,我们可以改变控制器和对象的参数,通过仿真来研究系统的性能。我们已用蒙特卡洛技术选好需要改变的对象和控制器的参数,在建模时这些参数已用理想值设置,但是我们知道它们的实际测量值是不断变化的。同时,我们加上了公差数据,反映它们在实际物理组件中的变化情况。并通过这些数据来研究它们对系统性能的影响。 #p#page_title#e#
B. 蒙特卡洛测试
为了检验这些物理参数已知的变化,我们在SystemTest中建立蒙特卡洛测试,这可以通过概率分布测试矢量和MATLAB代码来实现。我们的目的是研究系统的稳定性以及这些参数的变化对系统稳定性的影响。利用正态、对数正态和均匀概率分布产生其中10个参数的1000组随机值。对于最后一个参数,为了测试特定的值,通过MATLAB代码产生其可能值整个范围上的一些值。界限测试单元(Limit Check element)被用来设置仿真中上升时间和调节时间的上下界。
图3显示的是测试的流程。首先运行Simulink模型,然后用MATLAB计算上升和调节时间,接着利用界限测试单元决策测试是否通过,图中测试矢量的列表表示的是在测试过程中Simulink模型变化的参数。使用SystemTest运行蒙特卡洛测试的优势是可以自动改变所设置的参数,同时也可以独立于模型建立测试并进行并行仿真。
C. 结果
第一次测试运行了七个小时,这是非常耗时的。所以我们将它在计算集群上运行。利用SystemTest可以自动地分布式运行测试,而无需改变任何的测试设置。测试运行在8核的计算集群上,每一个包含4个workers,使用的是64位Linux系统。结果只用了一个多小时。详细的结果如表1所示。
表1 每次测试执行时间和使用计算集群所减少的时间
注意速度的提高并不与workers的数量成线性比例,之前也报道过,这还依赖于将文件从主机拷贝到集群的每个计算机上的时间、在workers和任务调度器之间传递输入输出数据的时间以及网络传输的因素。通常,整个仿真时间要远远大于上述的时间。
由于SystemTest与并行计算工具箱和MATLAB分布式计算引擎紧密集成的,测试报告和结果的MAT文件和在单机上花费7个小时所完成的结果是一致的。
第一次测试说明我们的设计对一些参数非常敏感。图4所示的是液压缸所受力影响的曲线。R7,即图2中标注的参数8,导致液压缸所受力很大的不稳定性,使得许多测试用例都失败了。这也延长了测试,因为仿真时的颤动会让仿真花费比正常值更长的时间。
图4 左图是使用正常参数值时的液压缸力;
右图是第一次蒙特卡洛测试时的液压缸力,注意颤动的频率。
对于第二次测试,我们约束了R7的公差值,这消除了不稳定性,但是仍然没有达到上升和调节时间的要求。第二次测试仅用了一个小时,但使用分布式计算只需11分钟,计算集群仍同第一次测试。具体时间如表1所示。
对于这种情况,需要进一步分析我们的设计,这需要改变模型中更多的参数、检查控制器的设计、与实验数据比较所建立的对象模型以确保模型的准确性等。设计中也使用到了其它的控制设计工具,比如Simulink Response Optimization优化设计。
对于这篇论文的目的,测试是完成了。我们已在一组真实的参数上运行了蒙特卡洛测试,发现设计的至少一个组件必须要有约束的公差。
结论
这篇文章主要讨论了三个方面:精确对象模型的建立、蒙特卡洛测试和分布式测试。将蒙特卡洛测试和分布式环境结合起来使得这个过程更快更容易实现。而在同一个环境中对整个系统建模并仿真的能力是实现以上功能的关键所在。总之将以上三方面结合起来能在很大程度上提高设计的品质,同时能节省大量的开发时间。
Matlab个人超级图形计算平台-Jacket Engine+Tesla