粒子模拟(共8篇)
粒子模拟 篇1
随着计算机科学与技术的不断发展,计算机仿真和模拟技术成为计算机学科研究和应用的重要领域。对于不规则物体,如水、火等的模拟一直是计算机仿真和模拟的难题之一,也是研究热点之一。目前对不规则物体进行模拟的方法主要有基于物理的方法[1],基于纹理技术的方法和基于粒子系统的方法。一般来说,基于物理的方法模拟的效果较好,但是其计算量比较大,影响系统的实时性,而基于纹理映射的方法系统的实时性比较高,但模拟的效果相对较差,基于粒子系统的方法无论是在模拟效果上还是实时性上都能取得令人满意的效果。1983年由Reeves等[2]首次系统地提出了粒子系统作为不规则物体建模的方法,并且在电影“星际迷航Ⅱ:可汗之怒”中成功地描绘了两个星球相撞时爆发的大火蔓延整个星的景象。2000年张芹等[3]人对火焰、烟、云等不规则物体建模及模拟方法进行了综述, 分析和总结了几个主要方法的特点及使用场合。2003年张芹等人[4]对基于粒子系统的建模方法,进行了更为详细的论述。2002年王治刚[5]等人将粒子系统和纹理映射相结合进行了火焰的模拟,增强了模拟的实时性。2005年马骏[6]等在粒子系统的基础上使用动态纹理对喷泉进行了模拟,达到了较好的模拟效果。2007年王继州[7]等给出了一种基于纹理片的快速的火焰模拟方法。2008年罗勇[8]等基于面向对象的思想描述了一套粒子系统应用程序接口的设计,给出了一套高效的粒子生成、管理方法。
以粒子系统基本思想为出发点,结合了纹理映射等技术,以模拟的视觉效果为目的,给出了一种水滴溅落过程建模和实现的方法并使用了三维图形处理库OpengGL对实验结果进行了可视化操作,对水滴溅落的整个过程进行了模拟,达到了较好的视觉效果。
1 粒子系统基本原理
粒子系统常用于模糊不规则物体建模,是迄今为止被认为模拟不规则物体最成功的一种图形生成算法。粒子系统的基本思想是:使用大量的,具有一定的生命和属性的微小粒子来描述模糊不规则物体,通过对每一个粒子属性和状态的改变来达到模拟不规则物体运动变化规律的目的。通常,在粒子系统中每一个粒子均具有形状、大小、速度、颜色、透明度、生命周期等属性,所有这些属性都会随着时间的变化而变化,每一个粒子都会经历“产生”、“活动”、“消亡”三个阶段。
在计算机系统中使用粒子系统模拟不规则物体,对于绘制的每一帧图像都要做以下处理:⑴ 产生新的粒子并对粒子各属性进行初始化;⑵ 更新粒子的各个属性,改变粒子的运动状态;⑶ 删除已经消亡的粒子;⑷ 根据属性绘制尚处于活动状态的各个粒子。在以上过程中,粒子的属性无论是在初始化过程中还是在更新过程中都使用一些事先设计好的函数,这些函数的选择主要根据经验来确定,但必须要具有一定的随机分布特性。
2 水滴粒子系统模型
建立在没有风力作用下的水滴溅落过程,在整个下落过程中,重力加速度要远大于空气阻力产生的加速度,因而忽略空气阻力假设水滴在重力的作用下做自由落体运动。水滴溅落分为三个阶段:(1) 水滴在重力作用下的下落过程;(2) 水滴着地时碰撞反弹破碎的过程;(3) 水滴破碎后水滴粒子的飞溅过程。文中坐标系为:y轴正方向垂直向上,x轴正方向水平向右,z轴正方向由屏幕里向外。
2.1 水滴模型的建立
2.1.1 水滴粒子
水滴粒子定义为具有空间位置,速度,加速度,类型等属性的粒子,可描述为实数域上的一个向量Rn(n=4),表示为:
Rn=(Position,Speed,Accelerate_Speed,Type),n=4,它是组成水滴的基本粒子。其数据结构描述为:
Typedef struct {
floatxPosition,yPosition,zPosition;// 粒子的空间坐标,表示粒子的位置
floatxSpeed, ySpeed, zSpeed;// 粒子的空间速度
floatxg, yg, zg;// 粒子的空间运动加速度
int type;//粒子的类型
} PARTICLES
由于忽略了风力和空气阻力xg,zg取值均为0,yg取值-9.8,type=0时表示水滴处于下落过程中,type=1时,表示水滴破碎处于溅落过程中。
2.1.2 水滴
水滴定义为结构化的粒子,由一组有限个水滴粒子构成,每一个水滴粒子带一组拖尾粒子。另外水滴还具有生命期,衰退速度和着地溅落的半径,可描述为:
Dn={ Particles,Particles_Tails,life,fade,radius},n=5 。
其数据结构描述为:
Typedef struct {
PARTICLES
particle[PARTICLES_NUM][TAIL_NUM];
float life;//水滴的生命周期
floatfade;//水滴的生命值衰减速度
floatradius;//水滴溅落半径
}Drop;
PARTICLES_NUM:表示每一个水滴含有的粒子数,TAIL_NUM:表示每个水滴粒子的拖尾粒子数。
2.2 水滴粒子的产生及初始化
水滴粒子在水平面上方的一定高度产生,产生的水滴粒子数和每一个水滴粒子的拖尾粒子数分别可由PARTICLES_NUM和TAIL_NUM两个量进行控制。
水滴粒子位置,速度及加速的初始化:
particel[i].xPosition=0.0;
particel[i].yPosition=position0+var_position×rand();
particel[i].zPosition=0.0;
particel[i].Speed=(0.0,0.0,0.0);
particel[i]. Accelerate_Speed =(0.0,-9.8,0.0);
生命周期:drop.life=1.0;
生命值衰减速度:drop.fade=0.0;
溅落半径:drop.radius=r0+var_r×rand();
水滴粒子类型:drop.type=0;
其中:0≤i≤PARTICLES_NUM-1,rand()为[-1,1]之间的一随机值,position0,为均值,var_position,var_r为方差。水滴拖尾粒子的初始位置和水滴粒子的位置相同,运动过程中,水滴拖尾粒子的位置由水滴粒子决定。
2.3 水滴粒子属性的更新
2.3.1 水滴速度和类型的更新
水滴破碎前即下落过程中的速度更新:水滴在下落过程中忽略阻力和风力,只需更新垂直方向的速度,其它方向的速度不变,从而:
particel[i].ySpeed=particel[i].ySpeed+ particel[i].yg×t×speed_factor,
其中:0≤i≤PARTICLES_NUM-1,speed_factor为速度变化的调节因子,t=1.0。
水滴和地面高速碰撞瞬间速度的变化:水滴着地的瞬间和地面高速碰撞立刻破碎并反弹,此时在x,y,z三个方向均会产生一个瞬间速度,由于在碰撞过程中能量消耗较大,反弹后的垂直方向速度方向向上并且速度值远小于碰撞前的速度值,另外,反弹后垂直方向的速度有可能为零。
particel[i].xSpeed=drop.radius×sinα+var_speed×rand();
particel[i].ySpeed=var_speedy ×(1.0+rand());
particel[i].zSpeed=drop.radius×cosα+var_speed×rand();
其中,α的值会随i的变化而变化。
水滴破碎后即飞溅过程中速度的更新:水滴粒子在飞溅过程中x,z方向的速度保持不变,在垂直方向的速度更新和下落过程类似,所不同的是speed_factor的取值比下落过程中要大,以达到增强模拟水滴粒子溅落效果的目的。
另外在水滴和地面碰撞时立即将粒子的类型更改为particel[i].type=1,表明水滴已经破碎并处于飞溅状态中。
2.3.2 水滴位置的更新
水滴粒子位置的更新:水滴粒子位置的更新同样分为破碎前和破碎后,可以用下式来描述,
particel[i].xPosition=particel[i].xPosition+particel[i].xspeed×t×control_factor;
particel[i].yPosition=particel[i].yPosition+particel[i].yg×t×t×control_factor/2;
particel[i].zPosition=particel[i].zPosition+particel[i].zspeed×t×control_factor;
对于破碎前后所不同的是control_factor的取值不同,破碎后的取值应大于破碎前的取值以达到增强模拟水滴粒子溅落效果的目的,t取值为1.0。
拖尾粒子位置的更新:不论是在下落过程中还是在飞溅过程中拖尾粒子的位置都随其水滴头粒子即水滴粒子位置的变化而变化的。运动过程中水滴粒子后的第一个拖尾粒子的位置更新为水滴头粒子的位置,第二个拖尾粒子的位置更新为第一个拖尾粒子的位置,依此类推。
2.3.3 水滴生命的衰减
水滴的初始生命值为1.0,当生命值减小为0.0时,所有水滴粒子死亡。水滴生命的衰减分为下落和飞溅两个过程,在下落过程中水滴生命的衰减速率为fade=0.0。在水滴着地后处于飞溅过程中生命值按另一个值开始快速衰减,即:
fade=f0+var_life×rand(),
f0为均值,var_life为方差。
3 粒子的绘制
对于水滴粒子的绘制,采用计算机图形学中广泛应用的一项重要技术:纹理映射,既可以增强模拟效果,也可以提高系统的实时性。利用纹理映射技术和色彩融合技术将一幅二维图像(如图1)映射到以粒子位置为中心的一个四边形图元上,达到了较好的模拟效果,为了形像地模拟水滴的形态,在绘制水滴头粒子和水滴拖尾粒子时,水滴头粒子和水滴拖尾粒子图元应该逐渐减小。将粒子的生命周期作为粒子的透明度,即alpha值,其初值为1. 0,当其值减小到0. 0时,粒子完全透明,消失不见。
4 实验结果
算法在普通PC机(2.93G Pentium CPU, 512M内存,Windows XP操作系统)上进行的,采用的开发工具和图形库为:VC6.0和OpenGLv1.4。实验结果表明:整个水滴的溅落过程比较逼真,具有较好的视觉效果,由于采用了纹理映射技术也提高了模拟的实时性。模拟效果见图2~图3。
5 结束语
使用粒子系统对水滴溅落过程进行建模,设计出了适合的数据结构并利用色彩融合,纹理映射等技术实现了水滴粒子的可视化,成功地实现了对水滴溅落过程的模拟并达到了较好的视觉效果。实验结果表明,该方法具有较好的灵活性,实时性和适应性,若加以改进,比如考虑空气阻力和风力的影响,即可实现对雨、雪等不规则物体飘落过程的模拟,这也将是下一步研究工作的一部分。
摘要:粒子系统因其灵活性,适应性等特点,被广泛应用于不规则物体模拟。介绍了一种基于粒子系统的水滴溅落模拟方法并设计了相应的数据结构,采用结构化的粒子模拟水滴,使用了纹理映射等技术实现了水滴粒子的可视化。实验结果表明,该方法形象地反映了水滴溅落的整个变化过程。
关键词:粒子系统,水滴模拟,纹理映射,OpenGL
参考文献
[1]柳有权,刘学慧,朱红斌,等.基于物理的流体模拟动画综述.计算机辅助设计与图形学学报,2005;17(12):2581—2589
[2] Reeves W T.Particle systems-A technique for modeling a class ofFuzzy objects.ACMTransaction on Graphics(S0730-1301),1983;2(2):91—108
[3]张芹.火焰、烟、云等不规则物体的建模方法研究综述.中国图象图形学报,2000;5(A):186—190
[4]张芹,吴慧中,谢隽毅.基于粒子系统的建模方法研究.计算机辅助设计与图形学学报,2001;13(1):79—82
[5]王治刚,陈和平,刘心雄.基于粒子系统和纹理映射的火焰模拟.工程图学学报,2002;(4):50—53
[6]马骏,朱衡君.基于动态纹理和粒子系统的喷泉模拟.北京交通大学学报,2005;29(1):90—94
[7]罗勇,文建国.面向对象的通用粒子系统设计及其在火焰模拟中的应用.科学技术与工程,2008;8(15):4174—4178
[8]王继州,顾耀林.火焰的快速模拟,计算机辅助设计与图形学学报,2007;19(1):102—107
粒子模拟 篇2
本文以某型直升机粒子分离器为研究对象,在三维非正交曲线坐标系下计算湍流分叉流动和砂粒运动,结合边界条件特殊处理,采用分块计算来考虑叶片对流场的影响,首次对有叶片粒子分离器三维两相流动进行了数值模拟.计算结果与实验值吻合较好.
作 者:侯凌云 严传俊 Hou Lingyun Yan Chuanjun 作者单位:侯凌云,Hou Lingyun(清华大学,工程力学系燃烧组,北京,100084)
严传俊,Yan Chuanjun(西北工业大学七系,陕西,西安,710072)
基于粒子理论的焰火模拟系统设计 篇3
粒子系统的基本思想是用大量的,具有各种特性的粒子图元(点,线,多边形,简单几何体)动态地描述自然界中不规则的模糊景物。每个粒子在任一时刻都具有随机的形状,大小,颜色,透明度,运动速度等属性,并随着时间的推移发生位置,形态的变化。每个粒子的属性及动力学性千周均由一组预先定义的随机过程来说明。粒子在系统内都要经过“产生”,“活动”和“死亡“这三个具有随机性的阶段,在某一时刻所有的存活粒子的集合就构成了粒子系统的模型。
2 焰火的分析
粒子系统方法为模拟焰火提供了有力的工具,但要想模拟出逼真的效果,必须仔细分析焰火显示的细节和特点。
1)焰火有五彩缤纷的颜色。不同的焰火,颜色不同。同一团焰火,颜色也会发生变化。
2)焰火有不同形状。有些焰火有特殊的显示效果。有的焰火会闪烁、有的焰火会在空中旋转等。
3)每团焰火显示的位置和大小不同。
4)每团焰火绽放的速度、持续的时间不同。
5)焰火是慢慢地消失的。
考虑到上述焰火显示的特点,运用粒子系统方法就可以进行焰火的模拟了。
3 焰火模拟系统设计
焰火模拟系统包括许多功能模块,用来改变、调整、发展粒子的不同特性,它们都以时间为参数,相关程序处理粒子的相关特性。焰火的模拟系统从功能上可以分为七个部分。结构图如图1所示。
诞生控制:产生适当数量的新粒子,赋予每个粒子初始特性,如初始位置、初始颜色、初始速度、初始大小、生命周期等。
运动控制:处理粒子运动,对粒子的位置、速度和加速度进行计算,实现加速或减速效果;另外通过粒子的反弹参数对粒子进行反弹计算。
颜色变化:通过适当的参数,改变粒子的颜色和透明度。在实际模拟时,为了减少计算量,也可预先建立颜色索引表,通过它来实现粒子颜色的变化。
特殊效果:处理焰火显示的特殊效果,例如鼠状效果和旋转效果。
删除控制:删除那些满足条件的粒子。当粒子的年龄达到生命值时,删除粒子;当粒子的位置超出显示区域,删除粒子;当粒子的颜色变为黑色或完全透明,删除粒子。
闪烁/显示:可以处理粒子的闪烁效果,也计算和显示星状效果的粒子的四条胳臂,自然,它也处理显示那些正常的、无闪烁、无星状效果的粒子。
尾迹控制:产生粒子运动时的尾迹。在每帧通过产生粒子的拷贝得到子粒子。父粒子运动,子粒子静止不动,但其大小、颜色逐渐变化,直到消失。尾迹可以根据实际需要改变长短。
4 模拟系统中主要算法的详细描述
利用粒子系统的方法模拟焰火的显示,关键是如何采用合理的数据结构和代码模拟出焰火显示的各种特性和效果。下面详细的探讨几种主要特性及效果的算法。
1)颜色:
颜色是焰火显示中最重要的一个特性。在焰火模拟中,每团焰火都需要用大量的粒子来描述,用delta_color表示。焰火的颜色有阶段性的变化,可以用一组delta_color值是不同的。可以为每个粒子分配一个年龄值,用帧数表示,随着一帧一帧的渲染,这个值每次加1。根据年龄值可以判断它所处的阶段,从而通过调整delta_color值来实现颜色的变化。需要注意的是,必须合理地选择颜色的变化量,使焰火的颜色变化平滑连续。delta_color值可以是线性或者非线性的(可以是指数函数)。由于线性的delta_color值,计算简单容易,可以产生连续变化的效果,所以在实际模拟中,应该首选。
2)透明度:
在实际的焰火显示中,由于粒子本身不断燃烧,在最后阶段,它不是简单地一下子消失的,而是慢慢地褪色。对于这种现象,可以通过处理粒子的透明度特性transparent得到。粒子诞生时,被赋予初始的透明度值,当粒子开始死亡时,通过delta_transparent改变粒子的透明度,使粒子随着时间的变化变得更加透明,直到消失,得到逼真的显示效果。
3)亮度:
焰火显示的另一个重要特性是亮度,程序中用brightness表示粒子的亮度。它的值在[0.0,1.0]内变化。亮度值为0.0代表粒子的基本颜色,颜色最暗;相反,亮度值为1.0,表示粒子的颜色最亮。这个特性模拟了焰火粒子的强度,随着这个值的变化,粒子的显示颜色也发生相应的变化。公式为:
Cr=(1.0-red)*brightness+red
Cg=(1.0-green)*brightness+green
Cb=(1.0-blue)*brightness+blue
其中Cr、Cg、Cb是显示颜色的红、绿、蓝分分量值,red、green、blue是粒子的基本颜色值,经过这样的计算,Cr Cg Cb值也被限制在[0.0,0.1]内。
4)形状:
焰火显示的形状是指能看到的焰火的外部形状。最典型的形状是球形,粒子从爆炸中心向四处飞散,但这并不是唯一的形状,还有其它象莲花盛开的形状等。在这个焰火模拟系统中,焰火的形状主要根据粒子的诞生区域来判断。根据粒子诞生区域的不同,可以得到不同的焰火形状,一般来讲,诞生区域分为两种,球形的诞生区域和圆柱形的诞生区域,在模拟球形焰火时可以假想一个半径很小的球体代表焰火的爆炸点,粒子的初始位置就在球体的表面上,在赋予粒子初始位置和速度时必须引入一定的随机性,使焰火的形状看起来不太规整,比较真实。在模拟圆柱形焰火时,粒子的诞生区域为圆柱体的表面,粒子的位置、速度与粒子相对于圆心的位置成比例,通过引入随机变量,得到更自然的形状。
5)大小:
随着粒子的燃烧,它的尺寸逐渐变小。所以在焰火模拟中,必须模拟出焰火粒子尺寸变化的效果,使焰火看起来更真实。要模拟这种效果,可以在粒子特性描述中增加粒子尺寸大小size和尺寸增量delta_size两个变量。粒子尺寸大小特性,表示同标准粒子相比,这个粒子大多少倍,小多少倍,标准粒子的大小用像素来表示,它与实际的物理设备的分辨率有关。尺寸增量决定了随着时间的进行,粒子大小怎样变化。在系统中有一个改变粒子特性的程序,通过尺寸增量变量来改变粒子的大小。在粒子的诞生和发展阶段,粒子的大小应该增加:而在粒子的死亡阶段。粒子的大小应该减小,最终消失。
6)尾迹
在我们观察焰火显示时,出于视觉的原因,可以看到移动的亮点后面有一条明显的尾迹,为了模拟这种现象,可以采用下述“重生”的算法:在某一帧时,系统检查是否有可以产生尾迹的粒子,称为父粒子。当系统发现这样的父粒子时,就产生一个几乎同样的新的粒子,称为子粒子,它继承了父粒子的颜色、透明度、尺寸、位置等特性。在下一帧时,父粒子随着时间的变化移动到新的位置,而子粒子的位置固定不变。但子粒子拥有负的delta_color值,使子粒子的颜色逐渐减弱,直到完全消失。通过delta_size值,可以使粒子逐渐变小,与实际相符。在每一帧,重复上述过程,就可以得到焰火粒子的尾迹。
通过控制粒子的delta_color值,可以控制尾迹的长短,较小的delta_color值将使子粒子的颜色衰减很慢,导致较长的尾迹。对于圆柱形焰火,通常有较长的尾迹,而对于球形焰火,过长的尾迹看起来不真实。用这种方法模拟焰火粒子的尾迹,父粒子经过的任何路程(如旋转和降落)都有大量的子粒子。较长的尾迹需要较多的粒子,增加了计算量,降低了系统的性能。所以在焰火模拟时,必须根据实际的硬件性能,选择恰当的参数,得到满意的结果。
7)生命周期:
粒子的另一个很重要的特性是它的生命周期,表示粒子可存在的帧数。在粒子诞生时就赋予它固定的生命周期。对于不同的粒子,可以使他们的生命周期略有不同。这样随着时间的进行,当某些粒子的年龄达到生命周期时,他们就应该死亡,可以利用删除程序将这些粒子从链表中删除,并释放所占的内存。
一个粒子的消失不仅仅是因为它的生命周期的结束,也可以是其它原因,例如,粒子可能移动到视图区以外的地方,或者粒子的颜色完全变为黑色,这些都意味着它已经完全消失,应该将其删除。
8)闪烁:
某些焰火在四处飞散或下降过程中,会出现闪烁现象。这可以通过控制粒子的渲染周期来有效地模拟。在焰火模拟中,可以用三个参数来得到这种效果。如图2所示。
其中blink+max是一个随机的整数,它表示粒子闪烁的周期,在blink_max范围内有一个变量blink_on,它定义粒子的渲染周期,将blink_on定义为blink_max/2效果较好。另外,定义一个blink_cur作为记数器,表示当前帧,闪烁的算法是:
If(blink_cur<=blink_on)
Showparticle();//显示粒子
Blink_cur++;
Blink_cur=blink_cur mod blink_max;
对于所有的发生闪烁的粒子,一帧一帧重复上述操作(mod操作符表示通常的数学取模公式)。对于闪烁的粒子,它的尾迹应该比较短,这样效果较好。最后的效果是焰火在某一帧出现,而在另一帧消失。参数blink_max和blink_on可以固定不变,重复执行循环,也可以任意重新付值。在这个粒子系统中,显示一个银白色的球形焰火,结果令人满意。
5 算法的实现技巧
利用粒子系统方法可以模拟出焰火显示的效果,然而要实现焰火的三维动态实时显示,还必须采用一定的技巧。
1)三维焰火的实现技巧
为了模拟三维球形焰火,应使粒子随机分布于球体的表面。每团焰火都拥有几百个粒子,而且为了产生焰火粒子尾迹,每个粒子又会产生一定数量的子粒子。每个粒子都有许多特性,例如粒子拥有位置(三维方向)、速度(三维方向)、颜色(红、绿、蓝)等。在每一帧都要对这些特性进行计算,这必然会降低系统的性能,影响显示效果。在实际模拟时,可以随机赋予每个粒子二维方向的位置和速度,如图3所示,x=x*cos(θ),y=y*sin(θ)。每一帧通过对粒子的位置和速度进行计算,实现粒子的运动。而在显示时,可以利用OpenGL中的旋转函数,将XOY平面内粒子分别绕Y轴、Z轴旋转一定的角度,得到在球体表面分布的粒子,得到三维显示的焰火。
2)焰火模拟的链表结构
在焰火的模拟中,采用的链表不是简单的单向链表,要复杂一些,每个父粒子构成一个单向链表,而每个父粒子又都有一个子粒子的单向链表。采用链表结构的好处是便于数据管理和操作。由于每个焰火团有许多父粒子,它们向四处运动,产生的尾迹则是通过由父粒子产生的子粒子描述。因为子粒子的特性参数比父粒子的参数少,如果将它们和父粒子存放于同一链表中,必将造成存储窨的浪费,而将它们分开,每个父粒子对应于产生其尾迹的子粒子,这样节省空间、结构清楚,同时也便于粒子的查找和删除。
3)颜色模拟的实现技巧
颜色模拟是焰火模拟的关键,利用前述颜色的模拟方法,可以得到焰火的不同颜色。然而,由于在每一帧,都要计算每个粒子的颜色,改变每个粒子的颜色,这影响了显示速度。在实际模拟中,可以根据需要采用预设调色板技术,得到颜色的均匀变化,动画的实时显示。具体算法如下;
r、g、b值为颜色初值,通过循环体内的判断,使数组theColor[i]中存放的是调色后的颜色值,这样可以得到均匀变化的颜色,例如白色→黄色→红色→黑色,正是在焰火模拟中所需要的。通过这种方法,以牺牲存储空间为代价,得到实时的、平滑连续的动画显示。
6 总结
本文根据粒子系统方法,实现了焰火的动态模拟。粒子系统方法为模拟具有复杂结构及复杂运动的物体提供了一个相对简洁、抽象的描述。用它所创建的动态模糊效果是其他图像生成技术难以达到的。如果能将其与几何建模等其他方法相结合,开发出新的算法,可以有更广泛的应用.
参考文献
[1]王静秋,钱志峰.基于粒子系统的焰火模拟研究[J].南京航空航天大学学报,2001,33(2):166-170.
[2]施维兵.用粒子理论解释光的衍射现象[J].发明与创新(综合版),2008,34(4):42-43.
[3]杨子华,刘宏芳.基于粒子系统模型的自然景物生成技术应用研究[J].计算技术与自动化,1998,17(3):20-23.
粒子模拟 篇4
钎焊炉是机械、冶金等行业零部件热处理加工中的重要设备,热处理设备能耗巨大[1,2]。对工业生产过程调度优化可降低能耗,提高生产效率,所采用的调度优化算法也获得了广泛的研究[3~5]。目前对钎焊炉的研究主要集中在炉内温度控制问题,而针对钎焊炉生产调度优化问题的研究没有涉及到。钎焊炉的生产调度水平影响着其生产加工的质量、产量和生产过程的能耗。钎焊炉生产过程能耗主要包括所耗电能及氮气量。
近年,智能搜索算法在解决调度优化问题成效显著[6],主要有蚁群算法、遗传算法、模拟退火算法、粒子群算法等等。这些算法在调度优化问题求解中都有其各自优缺点。粒子群算法有概念简单、容易实现,快速收敛的优点,但其容易陷入局部最优,使得精度降低[7]。为弥补这一缺点,学者们进行了广泛的研究,其中,将粒子群优化算法(Parti-cle Swarm Optimization,PSO)与具有跳出局部最优能力的模拟退火算法(simulated annealing,SA)相结合,提出模拟退火粒子群算法(SAPSO)改进系统性能,取得了较好的应用[8,9]。论文在借鉴前人研究成果基础上研究SAPSO在钎焊炉调度优化的具体应用,以达到良好的优化效果。论文在考虑降低钎焊炉生产能耗和提高生产效率下,建立了钎焊炉调度优化数学模型,并结合粒子群算法和模拟退火算法的优点,设计了求解模型的算法。
1 过程描述及建模
1.1 生产过程描述
在一般企业生产中,由于钎焊炉开炉温升阶段耗能大,周期长,所以钎焊炉常采取订单定期计划开炉,多品种分批次批量统一加工生产等方式,以保证企业利益最大化。钎焊炉生产工艺流程如图1所示,待加工的工件摆放至钎焊炉传送机带后,进入喷淋钎焊剂区对工件喷淋焊剂液,然后在空气吹落区吹落工件上多余的多钎焊剂,通过干燥区烘干钎焊剂和工件表面水分后再进入加热区[10]。工件在加热区要通过多个不同温度环境的加热段进行加热焊接。工件从加热区出来,最后进入冷却区进行水冷、风冷区进行冷却后取下,完成加工。由于企业常按订单定期计划开炉进行生产,在生产计划安排中,企业按订单所要求的加工产品的种类进行分类,将相同或相近的产品作为一类,统一加工。图中D1,D2,D3分别代表三个不同的工件类别。
从图1可知,每个加工工件都要经历5个加工单元,每一个加工单元又对应不同的加工设备。钎焊炉调度问题优化目标就是在确定的加工工件类别的基础上,合理设计不同类别工件的加工顺序使其在不同加工设备上的驻留时间最小,从而缩短全部产品的加工时间,降低能耗,提高生产效率。
钎焊炉调度过程,需要考虑以下七个约束条件1)待加工工件各类有i种,且都需要经历5个连续生产单元;2)第i类工件第j个工件在第m个生产单元中加工时开始加工的时间为Bijm,加工完成的时间为Eijm;3)工件加工最小时间,根据其种类不同都有其规定的加工时间及加工温度。每一类工件在每个加工单元驻留时间需要达到其在该单元满足加工工艺要求的最小驻留时间(该时间为已知),加工温度满足加工工艺要求,且每一类加工工件加工最小时间相同;4)每类工件在各个加工单元中按先进先出的顺序执行,只有当前一类加工工件离开加工单元时,新的工件才能进入;5)不考虑钎焊炉停机等待情况;6)每一个加工单元,同一时刻只能加工同一类工件;7)在加工初始时刻,任意一类工件都有可能被选择加工。
1.2 钎焊炉调度的数学模型
根据1.1节描述,可建立钎焊炉调度问题的数学模型,模型中主要的参数定义如下:
i:待加工工件类别编号,i=1,2,3,…;
Di:第i类待加工工件集合,设不同类别加工工件集合交集为空;
j:Di中待加工工件的编号,j=1,2,3,…,;
m:钎焊炉加工单元编号,m=1,2,3,4,5;
Hm:第m号加工单元可同时加工的工件数量;
Bijm:第i类第j个工件进入第m个加工单元的起始时间;
Eijm:第i类第j个工件加工完毕后离开第m个加工单元的时间;
STim:第i类工件在第m个加工单元中满足加工工艺需要的最小加工时间;
Tijm:第i类第j个工件在第m个加工单元驻留时间;
Φim:第i类工件在第m个加工单元中加工状态,为1表示在加工,为0表示不在加工;
δijm:第i类工件第j个工件在第m个加工单元中加工状态,为1表示在加工,为0表示不在加工;
基于上述定义,调度模型如下[5]:
以上模型中,目标函数(1)表所示有待加工工件加工时间最小化;约束条件(2)表示每一次中能选择同一类加工工件进行加工;约束(3)表示每一件加工工件都可被选择到每个加工单元加工且只能选择一次;约束(4)表示每一个加工工件在某个加工单元的驻留时间不能小于额定最小加工时间;约束(5)只有当前加工工件离开加工单元时,新的工件才能进入。
2 求解钎焊炉调度的SAPSO算法
PSO算法是一种模拟鸟群觅食行为的群体智能优化计算技术,是一种基于迭代的并行优化搜索工具[11]。在PSO算法中,设置一群“粒子”并将每个粒子看作是优化问题的一个可行解。被优化的函数确定每个“粒子”的适应度值,以此评价粒子的好坏。“粒子”根据自己的速度和位置变量计算其在可行解空间中运动的方向和距离;粒子将跟踪自身迄今为至找到的最优解和整个种群迄今为止至找到的最优解更新自己的位置与速度;通过多次迭代运算找到最终最优解。粒子i在第t次迭代的状态属性可由其位置与速度变量表示。位置变量表示为:和分别为搜索空间的下限及上限。速度变量表示为:和分别为粒子在可行解空间运动时速度的最小值与最大值。算法中粒子的速度和位置更新公式分别为
其中ω为惯性权重,合适的惯性权重可平衡全局搜索和局部搜索能力,实现在更少迭代次数下提高寻优性能,目前常采用线性策略、非线性策略两种ω调整策略;c1和c2为学习因子,它反映了粒子间信息交流强度,通过取c1=c2∈[1,2,5];r1和r2为0到1之间均匀分布的随机数;Pid为个体最优位置;Pgd为全局最优值。
将模拟退火算法应用于PSO中粒子的速度和位置更新过程。PSO每次迭代中的适应度值根据模拟退火算法中的Metropolis准则按一定概率允许接收非优化解,使算法从局部极值区域中跳出,最终收敛于全局最优解,按下以步聚实现SAPSO算法,搜索最优解[12]:
1)参数初始化,包括粒子数m,惯性权重ω,迭代次数t,学习因子c1和c2,搜索空间的下限及上限和,粒子在可行解空间运动时速度的最小值与最大值、和,退火起至温度T和T0,退火速度α,随机设置粒子的位置初始值xi(t)和速度初始值Vi(t),个体最优值pid和全局最优值pgd;
2)根据被优化的函数及其约束条件,计算每个粒子的适应度值f(xit),并分别与个体最优值和全局最优值比较,选择更优值,以对pid和pgd进行更新;
3)根据公式(6)和公式(7)以及的值对粒子的位置、速度进行更新;
4)重新计算粒子更新后的适应度值f(xit+1);
5)计算粒子更新前后两个适应度值之差,在,ε∈[0,1]两种情况中,接收更新后的粒子位置和速度值,否则拒绝。在接收新值后,更新终止温度T值,T=KT,否则不更新T值,返回步骤2),直至迭代次数结束。
3 实验与结果分析
3.1 粒子编码与适应度函数
SAPSO应用于钎焊炉调度,首先要建立位置矢量与调度方案之间的映射,即寻找一种表达方式,使粒子与解对应。考虑到钎焊炉加工过程是流水作业,同一加工单元只加工同类别的工件,且待加工工件数量,加工单元最大加工数量和最小加工时间已知。对粒子采用矩阵编码[13],如下所示:
矩阵A是所有待加工工件对应5个加工单元的编码。矩阵中每一个元素值aij表示第i个工件在第j个加工单元中加工的顺序号,为一整数。A矩阵每一行为某一类中某个工件在各加工单元加工顺序,每一列对应着一个加工单元。由于钎焊炉各加工单元是流水线作业,故矩阵A中每一列的数值就代表所有工件加工的顺序,且对于同一行,各列的值相等。解码时,提取矩阵A中的任何一列的数值,其值表示元件加工顺序。在搜索矩阵A最优值时,从第二个生产单元开始,必须考虑工件在前后两个个生产单元的最小加工时间差,将该时间差与工件加工顺序相结合。由于各工件在某加工单元标准加工时间确定,所有待加工工件在各加工单元的标准加工时间表示为:
其中,STim表示第i个加工工件在第m个加工单元上的标准加工时间。则所有待加工工件在加工过程中,相邻两个加工单元加工时间差总和可表示为:
调度优化则可转换成求U的最小极值。对于调度数学模型中的约束项,可在目标函数中增加一项可以映射约束条件的惩罚像,构成一个无约束的广义目标函数。因此论文中钎焊炉调度优化的适应度函数即转换成是一种对B矩阵排序的问题。
3.2 实验结果
将论文中的算法应用于钎焊炉调度优化。算法中主要参数进行适当设置:最大迭代次数为800,群体粒子数为50;学习因子C1和C2取1.8,惯性权重ω∈[0.9,0.4],
模拟退火中退火起至温度T和T0分别取8000和0.03,退火速度α取0.9。采用某企业钎焊炉加工工件数据进行仿真实验,针对不同批次数据分别按标准PSO算法和SAPSO算法仿真,并与无调度优化前加工时间进行对比,结果如表1所示。
表1结果表明SAPSO算法达到优化目的。当工件类别量多,加工时间较长时,SAPSO算法比标准PSO算法效果更好。
4 结论
1)将模拟退火粒子群算法应用于钎焊炉生产调度。该混合算法在PSO算法中应用模拟退火机制,提高搜索过程中跳出局部极值的能力。
2)研究SAPSO算法在钎焊炉生产调度中的实际问题,给出粒子编码,目标函数及约束条件以及SAPSO具体实现步骤。
3)通过数值仿真实验验证论文中SAPSO算法的可行性和有效性,为工业热处理设置生产过程调度优化提供一种有效的方法。
摘要:针对工业热处理生产中的钎焊炉调度问题,考虑到钎焊炉的能耗和生产效率,以工件加工时间最小化为目标,建立了钎焊炉调度问题的数学模型。结合粒子群算法快速收敛和模拟退火算法能从局部极值区域跳出等的优点,设计了求解模型的模拟退火粒子群算法。数值仿真实验证明了所提模型及算法的可行性和有效性。
粒子模拟 篇5
不少家蚕的病原微生物可以在不经意间通过人为的操作扩散而引起蚕病已广为人知,尤其对蚕种生产威胁最大的家蚕微粒子病。而通过手扩散的风险如何,本研究旨在提高人们对消毒防病的自觉意识而作了模拟试验。
1 材料和方法
病原微生物:家蚕微粒子孢子(Nosema bombycis)由蚕病实验室保存。
以普通成人女子拇指按上红色印泥,在洁净的载玻片上轻轻按捺,得正面指纹印,阴干后在指纹印上滴加50μL浓度为1×108/m L的纯净家蚕微粒子孢子,在OLYMPUS (CX41)显微镜不同放大倍数下观察指纹上微孢子虫的分布状况,用数码显微摄影装置(Image-pro V50)拍照。
2 结果与分析
根据实验结果,50μL的孢子液,完全充满在整个指纹印中,也就是说,该指纹印载有5×106个孢子。在显微镜下观察,可以看到没有滴加孢子液的指纹间隙(皮沟)是空白的,没有发现杂质,如图2所示;滴加了孢子液的指纹印中,放大40倍观察,已经可以看到在指纹皮沟中充满了密密麻麻的颗粒状物,随着放大倍数的增加,微粒子孢子的形态更加清楚,放大400倍以后观察,可以非常清楚地看到指纹皮沟布满了微粒子孢子。(如图3a-d)。
3 讨论
人的双手布满了指节纹和掌纹,是由皮肤表面凸凹相间有序排列的乳突纹线形成的,手指末节的指节纹就是俗称的“指纹”;乳突纹线的凹沟(即小犁沟或称皮沟)一般高100~400μm,宽100~350μm。而且乳突纹线上分布有大量的汗孔,汗孔的直径约80~250μm, 1cm长的乳突线上约有9~18个汗孔,是汗腺分泌汗液的出口[1]。由于上述的特殊构造和性质,所以人的手掌极容易沾染和藏匿大量微小的物体。家蚕微粒子孢子的大小仅为2.9~4.1μm×1.7~2.1μm[2](质型多角体为0.5~10μm,核型多角体为2~6μm),也就是说,理论上指纹皮沟的深度和宽度相当于数十个到100个以上的微粒子孢子的大小,所以一个极普通的母指指纹印的正面(还不是整个手指)就可以藏匿5×106个以上的孢子,400倍显微镜下观察指纹印中心的皮沟,可以看到其布满了微粒子孢子就是明证。工作人员在实际操作中,比如除沙、采叶、给桑、拣熟蚕等,都是通过双手进行操作的,如果不注意手部卫生,就很容易把病原微生物带到蚕座或者把蚕座的病原微生物带到其他物品,以后接触过这些物品又会带到蚕座中,这些病原微生物都是摸得着但肉眼看不见的,却可以在人的活动中连环传播扩散。近年来,一些地方发现野外昆虫常常导致对蚕种生产极大的威胁,但如果及时采取有效措施,爆发后可以很快予以扑灭,但有的蚕户却连续超毒,未能摆脱困境。虽然微粒子病的发生与传染来源、传染途径、生态环境等有密切关系,但不可否认,与我们消毒的时候只注意大的方面,忽略一些微小细节;或者是只注重消毒,不重视防病有关。根据一些蚕种场对蚕户消毒效果的追踪抽检结果发现,在饲养员住宅的一些物品上,如凳子、桌子、电视机、煤气罐开关的角阀、水井水泵的把手等一些日常生活用品上,都可以检出微粒子孢子;有的甚至在寝室的卧具如被子、蓆子等也有发现(据日本三谷贤三郎研究也有此情况[3])。这是因为微粒子病是一种慢性病,家蚕从感染发病到死亡,经历比较长的时间,一般病症不容易被发觉;而一旦发生过微粒子病蚕后,从病死蚕、蛹、蛾,排泄物的蚕粪、熟蚕尿、蛾尿,脱出物的病卵壳、蚕蜕皮壳、蛹壳、蛾毛等,都会带有微粒子孢子。饲养员操作后,特别是除沙后,蚕病原微生物就很容易沾附在双手表面,甚至藏匿在指纹皮沟中,双手不消毒或只简单用水冲一下(皮肤一般情况下都有汗渍及油脂,极易沾附微小物品,藏在皮沟中更难以轻易冲洗掉),就去接触其他物品,从而使一些常用的日常用品被污染,成为了二次传染源。据日本学者三谷贤三郎的研究,受到微粒子母体传染的蚕儿,自一龄起排泄微粒子孢子;各龄起蚕罹微粒子病时,从次龄起在蚕粪中就排泄微粒子孢子,随龄期的增长,其罹病百分率显著增加[4]。而同样是日本学者的藤原公研究[5],2龄或3龄起蚕经口接种10粒孢子/头,可以使40%的蚕患微粒子病;经口接种100粒孢子/头,可以使蚕100%感染发病(现行的蚕品种抗病性可能已经有所提高,但小蚕的抗病力弱是众所周知的)。上述研究结果表明,养蚕过程的操作中,人的双手对病原微生物的传播存在极大的风险,但却往往容易被忽略。以上原因,也许是在同样遇到突发微病的生态环境下,某些蚕户未能及时有效控制微病的发生而是连续不断地超毒的重要原因。上述研究结果,相信对蚕种生产部门的技术人员及原蚕饲养员有重要参考意义,通过直观易懂的研究结果,使人们深刻认识做好防病措施的重要性,提高防病的意识,能更自觉地做好消毒防病工作,为生产优质蚕种提供保障。
参考文献
[1]孙言文.物证技术学[M].北京:中国人民大学出版社, 2003:75~78.
[2]金伟.家蚕病理学.北京[M]:中国农业出版社, 2001, 149.
[3]三谷贤三郎.最近微粒子病の予防と合理的検査法(一)[J].日本蚕糸界報,1956, 65 (6) :19~23.
[4]三谷贤三郎.最近微粒子病の予防と合理的検査法(ニ)[J].日本蚕糸界報,1956, 65 (7) :22~25.
粒子模拟 篇6
自然景物的模拟一直是计算机仿真领域中既热门又具有挑战性的一个内容。降雨是一种非常普遍的自然现象,对于降雨的模拟广泛应用于虚拟现实,计算机动画、广告设计,影视制作等方面。
所以对于降雨的模拟有着非常重要的实际意义。Reeves在1983年提出了使用粒子系统[1]来模拟雨、雪、烟、火焰、爆炸等由不规则对象构成的实时系统。该方法为不规则物体的模拟提供了一种强有力的方法,也是目前模拟雨的一种普遍且有效的方法。粒子系统能较真实地模拟雨的效果,但是在大规模场景中由于场景的增大,构建雨景的粒子数量也会随之增加。数量众多的粒子使得绘制的速率降低,最终将影响整个三维场景的漫游速度。因此,如何解决大规模场景中粒子的数量与系统实时性之间的矛盾是研究大规模环境下降雨的一个关键所在。
目前对于降雨的模拟方法主要有基于传统的CPU方法和基于GPU的方法。从生成的逼真度来看两者的效果相差不大,但就渲染速率来说基于GPU方法的渲染速率明显优于基于CPU的方法。
国外学者对降雨的模拟进行了不同程度的研究。Anna等[2]通过多分辨率的应用在GPU上实现了基于粒子系统的降雨模拟,充分考虑了雨滴的物理属性,最终生成了实时性高、真实感强的三维虚拟场景,但在漫游方面没有做过多的研究。Bruno等[3]在研究雨滴产生的痕迹以及泼溅效果是也通过粒子系统来生成雨滴。
在国内,徐利明等[4]通过粒子系统实现雨雪的模拟,但是当系统中粒子数量达到360时,漫游速度为24帧/s,实时性低。李苏军等[5]应用了精确的雨滴降落方程来求解雨滴的运动,通过显示列表来提高系统速率。最终生成的图像在500个粒子是帧率为100帧/s,实时性好,但是场景逼真度较低,且不能应用与大规模漫游场景。郭震[6]等实现了一种大场景环境下实时降雨的新方法,该方法添加了雾化效果,同时也实现了雨滴降落地面时的泼溅效果,生成的场景逼真,但未实现漫游效果。文治中等[7]通过GPU的方法实现了大规模场景高效雨雪的模拟,该方法实时性高,生成的场景真实感强,即使对于万级数量的粒子也能达到百级的渲染速率。但未实时漫游效果的处理。最重要的是,上面的方法对于风场对整个雨景的干扰影响处理效果不明显,使得生成的雨景应用范围不广泛。
综合考虑实时性、逼真度、大规模漫游场景等情况下,本文在对粒子系统深入理解的基础上提出了一种应用于大规模漫游环境实时降雨模拟的新方法。该方法主要通过雨滴粒子模型的建立、极坐标的应用、雨滴粒子的运动简化、雨滴粒子运动过程的精确计算等方法来实现降雨的模拟。且对于雨滴受风力的影响效果处理逼真。通过在场景漫游中场景移动而视点不动的方法来实现漫游。在漫游的过程中通过使生成的雨景始终保持在屏幕上,且面向视点来提高生成雨滴粒子的利用率。最终,该方法生成的场景真实感强,实时性高,即使在普通的PC机上也可以达到很好的雨景漫游速率。
1 粒子系统介绍
一个粒子系统是由大量称为粒子的简单体素构成。每个粒子有一组属性,如位置、速度、颜色和生命期。一个粒子究竟有什么样的属性,主要取决于具体的应用。将简单体素和复杂物体行为有机结合、易于实现、易于显示是粒子系统的优点。这些也决定了粒子系统是构造火焰、水、雨、雪、草地和树林等自然景物的一种有效方法。
粒子系统并不是简单的静态系统,它是不断进化的。随着时间的推移,系统中已存在的粒子会不断改变形状,不断运动,直到其死亡。当系统中旧粒子不断消亡的同时,会不断有新粒子的加入。为了模拟粒子生长和死亡的过程。每个粒子均有一定的生命周期,使其经历“产生”、“活动”、“死亡”这三个具有随机性的过程。
一般情况下,生成粒子系统某瞬间画面的基本步骤是:
(1)生成新的粒子。
(2)给每一新粒子赋予一定的属性。
(3)删除已经超过其生命周期的粒子。
(4)根据粒子的动态属性对粒子进行移动和变换。
(5)绘制并显示由有生命的粒子组成的图形。
2 雨滴粒子模型的建立
实际观测表明,雨滴的最小直径为0.5 mm,最大直径不超过6 mm,最大下降速度为9 m/s。高速闪光摄影观察到,一旦雨滴达到最大下降速度,底部就变平,形状似张开的降落伞顶部。这是由雨滴下降时的空气阻力所致。由于不同大小雨滴达到匀速下降时存在速度差,下降速度较快的大雨滴与下降速度较慢的小雨滴相遇就会聚合成更大的雨滴,但随着雨滴体积的增大,空气阻力也随之增大。当雨滴直径大于6 mm时,空气阻力超过了使雨滴保持整体的分子内聚力。大雨滴便又碎裂分解成小雨滴。发生大雨或暴雨性天气时的降雨就会出现上述现象。因此,实际雨滴的落地速度即可能已经达到匀速极限速度,也可能仍处在加速降落状态。
雨滴就是水滴,只是在下落过程中其中会夹有杂质,使得其透明度没有水滴高。再者下雨天天空的颜色使得雨滴的颜色也呈现灰白色。
根据雨滴的这些行为特征在不影响真实感的情况下,对雨滴粒子的模型做了适当的简化,得到了适合大规模场景的雨滴粒子模型。
2.1 雨滴粒子的定义
通过对于雨滴的认识,定义雨滴粒子模型中其属性主要包括状态、位置、速度、加速度、颜色、透明度等。所有这些属性都是时间t的函数。随着时间的变化,每个雨滴粒子都要经历“产生”、“活动”和“死亡"三个过程。根据雨滴粒子的这些特征,采用下面的结构体来表示雨滴粒子:
2.2 雨滴粒子的受力行为描述
雨滴不同时刻的状态由其动力学性质决定,如果不受外力作用,雨滴粒子将始终按初始速度匀速下降。当受到外力的作用时,按牛顿第二定律,粒子将产生一定的加速度。若对雨滴做较为详细的受力分析,其受到包含重力、空气对其的浮力、雨滴在流体中运动所受斯托克斯力和风力。下落过程中在竖直方向上,因速度增加,其阻力也在增加,最后重力与阻力平衡,速度不发生改变,这一速度称为终极速度。风力的方向和大小都有其随机性,会随着时间随机的变化,所以风力对于雨滴粒子的干扰结果也不确定。综上,雨滴粒子的运动过程随机性强且复杂。如果要对其运动进行精确的描述,势必将增加系统运算的复杂性,继而影响绘制速率。所以在此对于雨滴粒子的运动进行了一定的简化。文中对于雨滴粒子在竖直方向上的运动也简化为匀速直线来计算。最终,对于雨滴粒子在水平方向和竖直方向上的运动做了如下的假设。
在水平方向上雨滴粒子只受到风力的作用,风力的方向一定,风力大小会随着时间在一定的范围内随机变化,且雨滴粒子在x方向的初始速度为零。所以雨滴粒子在x方向的运动可以用如下公式来表示:
其中,St表示第t个时间单位末在水平方向雨滴的位置,ΔSt+1表示在第t+1个时间单位里雨滴位移的增量,Vt表示t时刻雨滴的速度,at表示雨滴粒子在第t个时间单位里在水平方向上的加速度,Δt表示两帧之间的时间间隔。
在竖直方向上,设每个雨滴粒子都达到了终极的匀速运动。则雨滴在y方向的运动过程可以如下公式表示:
其中,St表示t时刻雨滴的位置,ΔS表示在第t+1个时间单位雨滴位移的增量,V表示雨滴的速度,Δt表示两帧之间的时间间隔。
2.3 雨滴粒子的形状
胡忆默[8]在《水滴形状的真相》一文中提到,真实的雨滴不像泪珠,而是像一粒粒小馒头—上圆下扁。邵雪辉等[9]在探讨雨滴相关问题时也提到了雨滴的形状,认为其应该为流线型。但是在做模拟的时候主要是考虑整个雨景的真实感,是从整体上考虑的,所以可以对其形状做些必要的简化。
综合考虑雨滴在下落过程中形状的不确定性,将雨滴粒子简化为四边形面片,采用一种新的方法来生成雨滴的形状。如图1中Ⅰ图所示的BMP图片作为最基础的雨滴粒子图,在绘制雨滴的过程中分别对图Ⅰ进行竖直方向上的等比例拉伸和非等比例拉伸来生成图Ⅱ和图Ⅲ的两种雨滴粒子效果。然后采用OpenG L的纹理融合技术,将图Ⅱ或图Ⅲ所示的雨滴的二维纹理图片映射到四边形面片上,就生成了雨滴粒子。
当雨滴接近地面时、夏天大暴雨时、或者风力很大时的速度将会很快,再加上人眼的视觉残留效应,使得看到的雨滴呈流线型。所以采用图1中Ⅱ图来表示雨滴纹理。当雨滴速度不大且风速小到可以忽略不计的时候,采用图1中的Ⅲ图来表示雨滴纹理图片。
3 大规模漫游环境下雨景的生成
3.1 三维场景的生成
三维场景的生成是虚拟漫游场景构建中最基本的一个步骤。三维场景的逼真度直接影响人对所生成三维场景真实程度的感知。通常三维真实感的构建所需的数据量很大,对计算机的图形处理能力的要求很高,因此特别需要探索一些高效的算法。尤其在虚拟漫游系统中,需要产生实时动画的效果,所以算法的效率更重要。考虑到系统的运行时间和绘制效果之后选择纹理映射来生成三维的场景。纹理映射技术是通过将图像粘贴在几何模型表面来增强图形真实感的常用方法,既能够增加场景真实感又不影响几何图形本身几何复杂度。
对于整个三维场景的模拟是通过一个三棱锥来实现的。其中三棱锥的底面作为地面,通过对三个侧面的再次细分来实现天空的模拟。
3.2 雨滴粒子的产生
雨滴粒子的产生是其生命周期的开始。而对其产生区域选择的恰当与否会直接影响生成雨滴粒子的利用率。生成雨滴粒子之后选用投影变换将其投影在屏幕上,生成最终的场景。程序中选用透视投影来实现三维物体在屏幕上的映射。
透视投影基本符合人的视觉习惯,同样尺寸的物体离视点近的比离视点远的大,远到极点即消失。为了实现透视投影的这种效果,透视投影的取景器被设计成一个被截去了顶的四面锥体,落在取景器内的物体朝着观察锥的顶点方向投影,而观察锥的顶点就是视点。因此如果在世界坐标系中生成和更新雨滴粒子,就会有部分雨滴粒子不可见,造成资源的浪费。本文在如图2所示的极坐标中来生成和更新雨滴粒子,而极坐标的原点就是视点。这样所生成的雨滴粒子始终是可见的,提高了雨滴粒子的利用率。
θ为取景器左边边界和右边边界的夹角,O点为视点。视点到最远的裁剪平面和最近的裁剪平面之间的距离(即near和far之间的距离)是z的取值范围。在极坐标中得到雨滴粒子点的坐标之后,就可以用极坐标和世界坐标的转化关系求得雨滴粒子在世界坐标系中的值。文中对雨滴粒子的初始化如下:
3.3 雨滴粒子的绘制
在确定了雨滴粒子的初始值以及运动方程之后就要对雨滴进行绘制。本文采用的是四边形面片来表示雨滴粒子模型,利用Open GL纹理映射和色彩融合技术生成真实的雨滴。所以在这一步最重要的是确定四边形面片的四个顶点,确定之后就可以将雨滴粒子图片的四个顶点和四边形面片的四个顶点对应起来。
如果某物体同时参与几个运动,那么这个物体实际的运动就是那几个分运动的合运动。分别研究各个分运动,然后将各个分运动合成来得到这个物体最终的运动。通过分段直线运动逼近曲线运动使得复杂的运动简单化,这是研究复杂运动的一种有效方法。如马骏等提出用分段直线逼近的抛物线来模拟喷泉粒子水珠运动。在本文中将雨滴粒子的运动考虑为水平方向的加速直线运动和竖直方向的匀速直线运动的合运动。已知分运动,可以根据平行四边形法则来求解合运动。文中在求解某一时刻的雨滴粒子运动时,根据如图3所示的原理来生成雨滴在某一时刻的位移。
设t时刻雨滴位于Pt这一点,在t到t+1的过程中雨滴在水平方向的位移为Xt+1,在竖直方向的位移为Yt+1,则雨滴在t到t+1的过程中的位移可以用向量来表示,即t+1时刻雨滴位于Pt+1这一点。其中θ为雨滴在t到t+1的过程中的位移与竖直方向的夹角。
随着雨滴的下落,雨滴的速度越来越大,再者人眼的视觉残留效果,使得人眼中的雨滴模型属于流线型。有时候风速较大,看到的雨景整体呈一条斜的直线,而雨景的倾斜程度可以用雨滴受到的风力大小来衡量。在文中根据雨滴不同时刻的θ值来控制整个雨景的倾斜程度。因为θ值为雨滴在t到t+1的过程中的位移与竖直方向的夹角,它可以很好地反映雨滴偏离竖直方向的程度,即风力的大小,继而控制整个雨景的倾斜程度。
文中采用图4所示的方法来生成每帧图像中雨滴粒子的位置,由此位置来确定雨滴粒子四边形面片顶点的坐标。
其中Pt点为t时刻雨滴的位置,θ为雨滴在水平方向与竖直方向的合位移与竖直方向的位移夹角。则我们可以根据几何关系确定出P1、P2、P3和P4各点的坐标。
设Pt点的坐标为(x,y,z),P1和P2之间的距离为,P2和P4之间的距离为,则可以根据如下几何计算求得P1、P2、P3和P4各点的坐标。
3.4 雨滴粒子的消亡
雨滴的消亡即雨滴粒子生命周期的结束。雨滴粒子处于其生命周期内就定义其为活动,生命周期结束就定义其为死亡。在雨滴粒子结构体中用布尔型变量type来表示雨滴是处于活动还是死亡。在每个雨滴粒子初始化时设定粒子的type值为真,在绘制粒子时先判断粒子的type值,为真则绘制。
文中根据雨滴粒子所作用范围的地形高度值来动态设置雨雪粒子的生命周期,一旦当系统检测到雨滴粒子的高度值与地形的高度值大小相同时,则表示该粒子正好落到地面,此时这个雨滴粒子就处于死亡状态。在程序中并没有显式地设定其为死亡状态,而是给已经死亡的这个雨滴粒子赋予新的生命周期。重复利用消亡的粒子来生成新粒子,这便使得初始粒子一旦生成后,其生命周期为无限长,避免了重复删除已经消亡的旧粒子和产生新粒子所带来的额外开销。
3.5 大规模场景漫游的实现
在文中通过给鼠标和键盘上的四个方向键添加响应函数来分别控制整个场景的漫游。文中采用视点不动,环境绕着视点移动的方法来实现漫游。
因为在大规模环境下场景很大,如果要在这样的环境下生成雨景,雨滴粒子数量巨大,系统运行速率将会很低。所以在漫游的过程中视点不变,控制在视点范围内生成的雨景始终保持在屏幕范围内,且始终面向视点,而在漫游的过程中通过环境的移动来实现漫游。这样在整个漫游的过程中,生成的雨景始终可见,有效节省了系统运行时间。
4 实验结果
本文采用了图形开发库Open GL和Visual C++6.0作为开发工具,Windows XP SP3操作系统作为开发平台,实现了大规模漫游场景下降雨的实时模拟。该方法在实验硬件环境为AMD Athlon(tm)64×2 Dual Core Processor 5000+2.61GHz处理器,2.00GB内存,NVID Ge Force 8500 GT显卡,256MB显存上实现。在选择监视器可以正常显示的最高屏幕刷新频率75赫兹的显示模式下,生成的三维场景大小为2 000×2 000,由100个200×200的基本纹理贴图拼接而成,最终生成的三维雨景漫游效果如图5所示,且漫游速率均达到75帧/s。和之前的一些方法相比较实时性高,且分别使用图1中的Ⅱ和Ⅲ为雨滴粒子纹理生成了不同的雨景漫游效果图。通过该方法在屏幕刷新率为75时生成的雨滴粒子数量增大情况下帧率变化如表1所示,可以看出在雨滴粒子数量增大的时侯仍然可以保持高的雨景漫游速率。这使得该方法的应用范围较广,可以模拟不同粒子数量,即大雨、中雨到小雨不同效果的雨景漫游图。
图5中Ⅰ和Ⅱ是根据图1中Ⅲ作为雨滴粒子纹理来生成的1 000个粒子的无风场干扰情况下黑夜和三维场景中的雨景截图。Ⅳ、Ⅴ、Ⅵ、图Ⅶ是根据图1中Ⅱ作为雨滴粒子纹理来生2000个粒子的雨景漫游过程中的几帧截图。其中,Ⅲ和Ⅳ分别为风力方向相反时生成的雨景的截图。
5 结语
本文在粒子系统的基础上提出了一种在大规模漫游环境下生成实时雨景的新方法。从最终生成的三维雨景来看,提出的方法真实感强,对风力的干扰作用处理明显,在漫游的同时仍能保持高的渲染速率,是大规模漫游场景中模拟雨景的一种有效方法。再者,通过表1可以看出在粒子数量增大时该方法也会保持高的渲染速率。保证了该方法能够得到广泛的应用。由于考虑到系统实时性的问题,文中还有一些不足之处,在以后的工作中有待改进。首先对漫游同时雨景的变化处理得太过简单,在以后有待加强;再者可以进一步考虑雨滴落地时的特殊效果处理。
摘要:降雨是一种重要的自然现象,对降雨的模拟可以大大提高虚拟场景的真实感,粒子系统是模拟降雨的一种有效方法。针对已有降雨模拟方法的不足,提出一种应用于大规模漫游环境下实时降雨的新方法。首先通过分析雨的行为,建立恰当的雨滴粒子模型;其次通过在极坐标内生成雨滴粒子,提高粒子的利用率;最后就风对于雨滴的干扰作用进行计算,模拟出了逼真的雨滴运动过程。实验表明,该方法生成的大规模漫游环境下的雨景真实自然,实时性高,具有一定的实用价值。
关键词:粒子系统,雨滴粒子,模拟,大规模环境
参考文献
[1]Reeves W T.Particle system:a technique for modeling a class of fuzzy objects[J].Computer Graphics,1983,17(3):359 376.
[2]Anna Puig-Centelles,Oscar Ripolles,Miguel Chover.Creation and control of rain in virtual environments[J].The Visual Computer:International Journal of Computer Graphics,2009,25(11):1037 1052.
[3]Bruno Barcellos Coutinho,Antonio A F Oliveira,Yalmar Ponce Atencio,et al.Rain Scene Animation through Particle Systems and Surface Flow Simulation by SPH[C]//Proceedings of the 2010 23rd SIBGRAPI Conference on Graphics,Patterns and Images,2010:255 256.
[4]徐利明,姜昱明.基于粒子系统与OpenGL的实时雨雪模拟[J].计算机仿真,2008,22(7):242 245.
[5]李苏军,吴玲达.基于粒子系统的实时雨模拟[J].计算机工程,2007,33(18):236 238.
[6]郭震,马小虎,陈恒金.一种大场景环境下实时降雨模拟的方法[J].苏州大学学报:工科版,2008,28(6):15 19.
[7]文治中,等.基于GPU粒子系统的大规模场景高效雨雪实时模拟[J].计算机应用,2010,30(5):1398 1401.
[8]胡忆默.水滴形状的真相[J].大科学·科学之谜,2006(7):2930.
[9]邵雪辉,王宝钧,王建国.关于雨滴问题的几点思考[J].河北北方学院学报:自然科学版,2005,21(2):10 11.
粒子模拟 篇7
粒子冲击会导致材料表面出现冲蚀磨损,严重时引起材料表面失效。研究固体粒子冲蚀机理,探讨影响冲蚀磨损的主要参数,进而可控制粒子冲击对材料 表面冲蚀 磨损的作 用。固体粒子冲蚀磨损是大量粒子连续冲击产生的积累效应,研究单个粒子在冲蚀磨损过程中产生的应力分布、热效应以及材料去除过程,建立合理的材料去除方程,对理解、预测和控制宏观的冲蚀磨损有很重要的作用。Meng等[1]指出现有的冲蚀磨损预测模型由于参数变量较多、结构复杂、无法很好揭示冲蚀机理,难以用于工业实际的磨损预测,在此基础上,他们归纳了28个关于冲蚀磨损较为成熟的预测模型。由于冲蚀角度以及材料韧脆性对材料去除机理影响很大,冲蚀模型都有一定的适用范围。对于韧性材料,目前熟知的模型主要有Finnie[2,3]的微切削模型、Bitter[4,5]的变形磨损模型以及Hutchings[6]的基于应变量的疲劳模型。微切削模型较好地解释了低角度塑性材料受刚性粒子冲击的规律, 方程结构简单,适用于小角度冲蚀条件的冲蚀磨损寿命预测 (如气动含 沙管道内 部[7],风沙环境 中的工程 结构[8])。 Finnie微切削模型中做了许多参数简化,使得对冲蚀率的估计与实际情况相差较大,其次,微切削模型的冲蚀角适用范围也不明确。基于此,本工作深入研究了韧性材料的微切削模型,利用ABAQUS/CAE建立微切削过程的有限元模型, 得到了不同冲蚀条件下粒子受力情况以及基体的应力场分布情况,分析了微切削模型中参数假设的合理性,确立了微切削模型适用的冲蚀角范围。
1微切削模型的建立
1.1粒子运动方程
刚性粒子小角度冲击韧性材料,得到切削痕的长深比较大,这使得粒子与基体表面的接触形式可以简化,如图1所示。假设等宽刚性粒子在微切削过程中不变形、不开裂且粒子与材料为线接触;由于切削过程周期很短,粒子旋转的角度很小;粒子受反作用力的垂直分量与水平分量的比值为常量γ=Fy/Fx;粒子与机体接触面高度与切削深度的比值为定值φ =l/Y ,对粒子建立受力平衡方程[9,10],如式(1)所示。
式中:m为粒子质量,I为粒子相对重心的转动惯量,分别为粒子沿x和y方向的加速度为粒子的角加速度,r为中心到接触点的垂直距离,p为材料的塑性流动应力,b为粒子宽度。考虑粒子入射的初始条件,解得粒子的运动方程如式(2)所示。
1.2冲蚀率
通过对粒子运动过程积分,得到体积损失W为:
粒子小角度冲蚀过程可能出现两种情况:Ⅰ类为粒子完成切削过程后离开;Ⅱ类为切削过程中粒子动能耗尽,停留在工件表面。Ⅰ类情况时,粒子出射x方向速度不为0,tc为切削时间,则离开时Y=0,故sin(βtc)=0,即βtc=0或 βtc=π,将式(2)代入式(3)积分得:
Ⅱ类情况,当粒子动能耗尽时,粒子在切削过程中转动很小,令解得:
将式(5)代入式(3)积分得:
Finnie利用硬度划痕试验假设γ =2[3],获得了相对磨损率与冲蚀角度的关系曲线,如图2所示。该曲线能有效地拟合Ti-6Al-4V合金冲蚀率的变化趋势[11],但无法说明正向冲蚀条件下的磨损情况。划痕试验中针尖划过机体的过程能够有效模拟粒子切削过程,然而划痕试验无法有效体现冲蚀速度和冲蚀角对γ值的影响,随着入射角的增大,γ值会严重偏离Finnie的假设,降低微切削模型对冲蚀磨损率估计的可靠性,也说明微切削模型是有适用范围的。
1.3磨损寿命
考虑工件失效时的冲蚀失重为Mb,单位时间冲击工件表面的磨料粒子质量为mp,则工件的磨损寿命可用式(8)表示。零件的耐冲蚀性能与其组成材料密切相关,为提高其耐冲蚀性能,通常在表面涂、镀耐冲蚀涂层,脆性材料小角度条件下的耐冲蚀性能较好,通过制备陶瓷涂层,能有效提高工件的冲蚀磨损寿命,如喷砂枪通常采用陶瓷喷嘴来提高喷枪寿命。冲蚀角度小于10o时,冲蚀磨损也较小,对于管道磨损,失效部位通常出现在弯管处,减少管道的弯转数量,提高管道弯转处的耐磨性,可以有效提高管道的冲蚀磨损寿命。
1.4微切削过程的有限元模型
结合数值计算模型,在ABAQUS/CAE中建立2D切削模型,二维模型采用实体平面应变四边形热力耦合4节点缩减积分单元(CPE4RT)。材料区域尺寸为1.5mm×4mm, 磨料粒径约为500μm。考虑到粒子微切削区域尺寸较小,冲击过程中变形剧烈并伴有剧烈的热效应,因而在整个切削区域划分较密的网格。不考虑粒子在切削过程中的变形过程, 将其设置为分析刚体。微切削产生的塑性变形属于材料的非线性问题,随着粒子运动,材料单元会被压扁、扭曲,可能会引起较大的计算误差,通过设定自适应网格区域,改善模型失真情况,提高计算速度。工件材料选择AISI4340。材料的本构方程是模拟正确与否的关键,粒子切削过程周期短、 速度快,粒子与塑性变形区域会发生强烈的摩擦作用,产生大量的热。微切削过程涉及到材料的塑性屈服准则、流动准则以及硬化准则的应用,考虑到材料的应变硬化效应和温度升高产生的软化效应,对材料的物性描述采用Johnson-Cook本构关系[12],相关参数见表1。
2计算结果与分析
2.1冲蚀角与冲蚀速度对γ值的影响
图3为有限元模拟微切削模型的应力场分布图,切削过程中,接触面的根部产生应力集中,取粒子与工件接触的尖角处为研究对象,分析受力情况。微切削模型式(7)中,冲蚀角一定时,磨料粒子所受反作用力的方向系数γ 决定了冲蚀率与冲蚀角关系曲线。图4为冲蚀速度50m/s时不同冲蚀角条件下γ值与时间的关系曲线,曲线开始部位出现较大的波动,这主要是由于粒子与表面刚接触时的接触面积较小, 受力不稳定所致。接触稳定后,γ 值振幅变小,呈周期性变化。当冲蚀角在30o以下时,γ值随时间变化较稳定,呈水平变化趋势。当冲蚀角增大时,磨料粒子与基体的接触面积增大,粒子受到的纵向反作用力γ 增大,曲线的振幅增大,且随时间呈上升趋势。对不同入射角γ 值取均值(图5),得到当冲蚀角在10~35o之间时,γ取值在(1.32,2.45)之间,近似于划痕试验得到的近似值2,随着入射角的继续增大,γ 值迅速增加,且波动值增大,严重偏离Finnie假设的γ 值,拟合得到γ与冲蚀角的关系式(见图5)。通过以上分析认为,微切削模型中的假设在冲蚀角为10~35°时是有效的,当冲蚀角增大时,方程中的值应相应增大,以保证微切削模型对冲蚀率评价的可靠性。
本实验考察了冲蚀速度对γ 值的影响,如图6所示,在冲蚀角相同时,对比不同冲蚀速度条件下的γ-t曲线,发现冲蚀角为10o和30o时曲线的趋势较为一致,均值近似相等。 冲蚀角为45o时,冲蚀速度越大,γ 值也相应增大,这种正相关关系可以用来解释冲蚀率与粒子速度之间存在2.2~2.4次方关系这一结果[10]。以上结果表明,当冲蚀角度较小时, 冲蚀速度对γ值的影响较小,冲蚀角度增大,冲蚀速度会改变γ值的稳定性,γ值随冲蚀速度的增大而增大。
2.2最大冲蚀率
γ值的大小决定了相对冲蚀率与冲蚀角关系曲线的形式,构造关于γ的函数(式(9)),取γ值为整数,当且仅当γ值在(1,69)时,冲蚀率的曲线是连续的,这进一步说明微切削模型是有适用范围的。如图7所示,γ 值越大对应的冲蚀率曲线越平缓,最大冲蚀率的取值越小,获得最大冲蚀率的入射角越大。然而γ是冲蚀角α 的函数,由上述分析可知,实际冲蚀角与冲蚀率曲线上获得最大冲蚀率的冲蚀角有如下关系α(↑)→γ(↑)→Emax(↓)→α′(↑)。对于韧性材料,α′是在Ⅰ类条件下的冲蚀角度,即粒子完 成切削过 程后离开 表面,α′<α。当 Δα=α-α′值越小时,得到的实际冲蚀率越接近最大冲蚀率,计算得到 Δα是随冲蚀角的增大而增大,由此可知,韧性材料获得最大冲蚀率的最佳冲蚀角也落在10~35° 间。
3结论
粒子模拟 篇8
模拟电路是现代集成电路中不可或缺的组成部分,由于模拟电路具有容差、非线性等特点,其故障诊断技术虽然起步较早,但发展速度明显滞后于数字电路。近年来,基于人工智能的模拟电路故障诊断方法得到了广泛应用,文献[1-2]利用神经网络对模拟电路故障进行诊断,取得了较好的效果。
但是神经网络存在训练时间长,易陷入局部极值等不足,文献[3-5]采用支持向量机(Support Vector Machine,SVM)方法进行模拟电路故障诊断,该方法在诊断精度和诊断效率方面都优于BP神经网络。当样本数量增加,标准SVM存在训练复杂度高,二次规划问题难以求解等不足。
最小二乘支持向量机是在标准SVM的基础上采用二次损失函数提高求解速度。同时,核函数的参数决定了样本数据在高维特征空间分布的复杂程度,从而影响最优分类超平面的泛化能力。文献[6]提出采用交叉验证的网格搜索法进行参数寻优,有效避免了过学习和欠学习状态的发生。
当需要进一步提高准确率时,必须扩大参数的搜索范围或降低网格的大小,运算复杂度呈指数型增长,运算时间急剧增加[7]。本文借助粒子群算法强大的全局搜索能力对LSSVM的参数进行优化,将训练后LSSVM模型用于模拟电路的故障诊断中。
1 最小二乘支持向量机
最小二乘支持向量机(Least Square Support Vector Machine,LSSVM)是由Suykens于1999年提出的一种新型支持向量机[8]。
该模型将最小二乘线性系统引入到支持向量机中,用二次损失函数代替SVM中的不敏感损失函数,通过损失函数将SVM中的二次寻优转化为求解线性方程组,从而降低了计算的复杂程度。
设有N个样本xi及其所属类别yi,求解最小二乘支持向量机分类最优化问题的目标函数为:
式中:J(ω,β,ξ)为结构风险;ω为权向量;ξi∈RN×1为误差向量;β∈R为偏置项;C>0表示对错分样本的惩罚系数。
引入Lagrange乘子αi求解优化问题:
根据Karush-Kuhn-Tucker条件在鞍点处将式(3)分别对ω,β,ξ和αi进行求导并令它们等于0,可得到一个线性系统:
定义矩阵Ω=ZZT并对Ω运用Mercer条件,则:
式中:K(xi,xj)表示核函数,用于特征空间的转换。常用的有线性核函数(Linear Kernel)、多项式核函数(Polynomial Kernel)、Sigmoid核函数和径向基核函数(Radial Basis Function Kernel,RBF)[9]。RBF核函数与线性函数相比,可处理多维空间样本;与多项式核函数相比,所需设定的参数较少。实际上,文献[10]证明了线性核函数和多项式核函数是高斯RBF核函数的特殊形式。本文以RBF核函数K(x,y)=exp(-γ|x-y|2)建立支持向量机模型。其中γ为核宽度参数,控制RBF核的作用范围,则LSSVM分类决策函数为:
因此,采用RBF核函数的LSSVM需要对核函数的参数γ和惩罚参数C进行优化选择。
2 PSO-LSSVM模型建立方法
2.1 粒子群优化算法
粒子群优化算法(Particle Swarm Optimization,PSO)属于进化算法(Evolutionary Algorithm,EA)的一个分支,最早由Kennedy和Eberhart于1995年提出[11]。该算法根据式(7)更新个体极值和全局极值来确定每个粒子的搜索方向。经过一段时间后,大部分的粒子会逐渐将自己的位置移动到全局最优解的附近,同时形成一个粒子群体,并不断逼近求解空间中的目标位置。
式中:ω表示惯性权重;d=1,2,...,m;i=1,2,...,n;k表示当前迭代次数;Vid为粒子的速度;Pid表示粒子的个体极值分量;Pgd表示粒子所在子群中的局部极值分量;c1,c2为粒子的学习因子;r1,r2表示[0,1]之间的随机数。
2.2 惯性权重
当PSO算法被首次提出时,并未包含惯性权重。1998年由Shi和Eberhart对PSO算法进行改进,加入惯性权重ω用来控制更新前速度的影响,当ω较大时全局寻优能力强,有利于挑出局部最优点,当ω较小时,局部搜索能力较强,有利于提高算法的收敛速度[12]。因此在迭代过程中采用(8)式对ω的大小进行自适应的调整,随着迭代次数增加,逐渐的减小ω的值,使求解的过程能够更快的找到全局最优解。
式中:ωik表示第k代中粒子i的惯性权重;ωmin表示设置的权重最大值;c是[0,1]之间的调节系数;k为当前进化代数;Tmax为最大迭代次数;fik表示粒子i第k代的适应值;fkmax和fkmin分别表示第k代粒子的最大和最小适应度值。
随着迭代过程增加,因子(fik-fkmin)(fkmax-fkmin)的值因粒子的聚集效应不断减小,同时因子(Tmax-k)Tmax也不断减小,这样可保证粒子在进化初期具有较大的惯性权重,在进化后期的惯性权重较小,符合惯性权重自适应调整策略的要求[13]。
2.3 适应度函数
适应度函数是衡量粒子所代表参数值优劣的标准,本文定义适应度函数为:
式中f(i)表示粒子i在LSSVM中的正分率。
2.4 多分类LSSVM
支持LSSVM模型只能用于两类别的分类问题,而模拟电路的故障识别属于多分类问题。为了将支持向量机的适用范围有效拓展到多类别的分类(Multi-class classification),多位学者提出了不同的方法。如一对一算法(One-against-one method,OAO)[14],一对多算法(One-against-Rest method,OAR)[15],决策导向无环图SVM(Directed Acyclic Graph SVM,DAGSVM)[16]等。本文采用OAO方法处理多分类问题,在处理k类别分类问题时,将构建k(k-1)2个两分类决策函数(每两个类别之间构建一个),求解(10)式最优化问题即可得到对类别i和类别j分类的两分类支持向量机。
未知类别的测试数据x的判别方式采用投票的方式,决策函数如果判定x属于第i类,类别i加一票;否则,类别j加一票。最后将x归属于得票数最高的类别。
2.5 PSO-LSSVM算法实现步骤
根据模拟电路故障诊断的特点,建立基于PSO-LSSVM的模拟电路故障诊断模型,其结构如图1所示。
步骤如下:
(1)对待测电路加载激励信号,将采集到的输出响应信号作为原始样本数据。
(2)利用特征提取技术提取数据中的不变特征形成故障模式空间。
(3)PSO参数初始化。包括种群规模m,学习因子c1、c2,惯性权重最小值ωmin、最大迭代次数Tmax、粒子的初始速度和位置等。
(4)将训练样本代入模型,根据式(10)计算每个粒子的适应度函数值。
(5)根据式(7)更新粒子的速度和位置。
(6)检查是否满足终止条件,如满足则根据式(6)输出结果,否则返回步骤(2)。
(7)将测试样本输入训练好的LSSVM模型,根据输出判断故障模式。
3 仿真实验与结果分析
3.1 实验数据的获取
为验证本文方法的正确性和有效性,采用SallenKey带通滤波器[17]作为研究对象,电路结构及参数如图2所示。设电路中电容的容差为其标称值的10%,电阻的容差为其标称值的5%。对电路进行灵敏度分析可知,元件R2,R3,C1,C2的变化对电路的输出Vo影响显著,因此,设置电路的故障类型为R2,R3,C1,C2发生单软故障,则电路的故障模式可划分为9种,如表1所示。其中↑和↓分别表示元件参数值向上或向下偏离标称值的50%。
在PSpice环境下对电路进行Monte Carlo仿真,仿真默认温度27℃,其他仿真条件采用默认设置,每种故障模式采样50次。
本文采用小波包变换提取故障特征,即利用各频段信号的能量构造故障特征向量。首先对采样信号进行三层小波包分解,基函数采用db3小波,根据重构信号计算8个频带的能量,并以能量为元素构成一个特征向量。为提高收敛速度,应对特征样本进行归一化处理。对输出信号Vo的特征向量如表2所示(由于篇幅限制,给出部分值)。针对9种故障模式,采用一对一方法构建LSSVM多分类器,共需要36个二分类LSSVM。
3.2 仿真结果分析
为验证本文方法的效果,分别利用两种模型对所得数据进行故障诊断。模型一,采用LSSVM模型,用网格划分来寻找最优参数,参数C的范围设定为[0,100],参数γ的范围设定为[-100,100];模型二,采用改进的PSO算法优化LVSVM模型参数,设定种群规模m=20,学习因子c1=c2=1.7,调节系数c=0.5,最大迭代次数Tmax=100。随机选取30组数据作为训练样本,另外20组数据作为测试样本。首先利用训练样本分别对两种诊断模型进行训练,然后利用训练后的模型对测试样本进行故障诊断,所得诊断结果如表3所示。
从表3可知,与LSSVM模型相比,经过粒子群优化的LSSVM诊断方法的故障诊断准确率和诊断效率都得到提高。
4 结语
本文利用改进的粒子群优化算法对最小二乘支持向量机模型进行参数寻优。首先针对标准PSO易陷入局部最优的问题,将小生境技术引入到粒子的优化迭代过程中,通过对粒子进行分类保证种群的多样性。然后借助粒子群算法的全局搜索能力对LSSVM模型的参数进行动态选择。最后以典型滤波器电路Sallen-Key的故障诊断为例进行仿真验证。仿真结果表明,采用改进的PSO算法对LSSVM模型进行参数寻优时克服了网格划分遍历搜索造成的低效率问题。同时,与LSSVM相比,故障诊断精度和效率都得到了提高。
摘要:针对模拟电路故障诊断中存在的诊断信息不充分、参数容差及元器件的非线性等问题,利用最小二乘支持向量机(LSSVM)在小样本情况下良好的学习能力和泛化能力建立基于LSSVM的模拟电路故障分类模型。同时为提高故障诊断精度,采用粒子群优化(PSO)算法对LSSVM的参数进行优化,避免了参数选择的盲目性。最后以典型滤波器电路的故障诊断为例进行了仿真验证。实验结果证明基于PSO的LSSVM模型可有效改善遍历搜索引起的效率问题,其故障分类准确性及模型诊断效率都得到提高。