程序设计综合课程设计报告——微粒群算法_第1页
程序设计综合课程设计报告——微粒群算法_第2页
程序设计综合课程设计报告——微粒群算法_第3页
程序设计综合课程设计报告——微粒群算法_第4页
程序设计综合课程设计报告——微粒群算法_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录一设计目的·············································1二设计要求··

2、3;···········································1 三关于微粒群的简单原理介绍····&

3、#183;·················1 1标准微粒群算法······························

4、83;··········1 2随机微粒群算法······································

5、;···2四设计内容··············································

6、;4五设计流程图···········································5六本次课程设计的总结····

7、;···························6七关于微粒群算法的一些参考文献·················6附录1.标准微粒群算法源程序

8、3;························7附录2.随机微粒群算法源代码·······················&

9、#183;11 附录3.附录1运行结果和附录2运行结果···········16一设计目的:(1)用C+语言编写标准微粒群算法和随机微粒群算法。(2)本次的设计的目的主要是为了进一步掌握C+语言的各语句,巩固C+语言的规则,并能熟练地运用各种语句,使个语句准确地组成简单的程序。进一步考验对数值、算法的理解能,并用所学到的C+语言知识编成程序以解决一些复杂的数学问题和算法。(3).相互学习和解决问题培养在老师的指导下和同学相的能力。 二设计要求:(1)要求在老师和同学的帮助下用C+语言编

10、写微粒群算法的两种两种不同的算法(即:标准微粒群算法和随机微粒群算法),且要求程序的代码数量在300行以上,可参考相关的文献资料,但禁止完全抄袭。(2)编出来的程序能运行并准确地反映出设计题目的结果。 三关于微粒群算法的介绍:1标准微粒群算法原理:其算法流程为:2.随机微粒群算法:其改进方程为:四设计内容:分别用标准微粒群算法和随机微粒群算法用C+语言编写一下函数:五设计流程图如表1.从样本空间随机抽取样本构成训练样本使集体进行训练对每一个体进行评价计算其适应值(均方误差)F(x)N确定Gbest与LbestY输出一组权值作为优化结果按照微粒群计算模型生成新的个体微粒停止随机产生初始微粒群(由

11、多维实数向量组成)开始络把每个向量映射成网络的一组权值,并组成网表1六本次课程设计总结:通过本次课程设计首先进一步了解了微粒群算法的产生、发展方向、原理。感受到数学在解决科学问题方面的重要性。并且初步了解了数学建模是连接现象和数学的桥梁,能把抽象,“看似毫无联系“的现象明朗化、简单化。微粒群算法的基本思想是受到美国科学家对鸟类群体行为研究结果的启发,并利用i生物学家Frank Hepper的生物群体模型所以微粒群算法的原理与鸟类的运动模型有关,比如必须考虑的相关参数微粒(鸟类)的当前位置,微粒的飞行速度等。本次设计首次尝试把程序代码总量设计超过300行,是一次突破性的尝试。在数字信息化日益发达

12、的当今社会,电脑的使用正逐步普及,所以,能编写程序用计数机解决一些生活问题,甚至开发软件是一门有用且热门的技术。本次课程设计为我用C+语言编写更复杂的程序以解决现实问题奠定了基础。参考文献:1 Koza J R.Genetic Programming: On the Programming of Computers by Means of Natural Selection. MIT Press, Cambridge, 1992 2 Kennedy, J. and Eberhart, R. C. (1995). Particle swarm optimization. Proc. IEEE I

13、nt'l. Conf. on Neural Networks, IV, 19421948. Piscataway, NJ: IEEE Service Center. 3 Kennedy, J. and Eberhart, R. C. (1997)(b). A discrete binary version of the particle swarm algorithm. Proc. 1997 Conf.on Systems, Man, and Cybernetics, 41044109. Piscataway, NJ: IEEE Service Center. 【4】 C+程序设计,谭

14、浩强,清华大学出版社,2004.6【5】 21天学通C+,陈龙,北京电子工业出版社,2009.1附录1.标准微粒群算法源程序/库文件 #include<iostream>#include<cstdlib>#include<ctime>#include<cmath>using namespace std;/随机数定义 #define rdint(i) (rand()%(int)(i) #define rdft() (float)(double)rdint(16384)/(16383.0) #define rnd(a,b) (rdint(int)(b

15、)-(int)(a)+1)+(int)(a) /宏定义 #define POPSIZE 20 #define DIMENSION 2 /全局变量定义 float W=1.0; float C1=1.8; float C2=1.8; float VMAX=2; float XMIN=-2.0; float XMAX=2.0; float PDIMENSION; float PBEST; struct indi float numberDIMENSION; float bestDIMENSION; float bestfitness; float fitness; float speedDIMEN

16、SION; individualPOPSIZE; void initiate(void); void calculation(int number); void globalbest(int number); void localbest(int number); /程序初始化定义 void initiate() int i,j; for(i=0;i<POPSIZE;i+) for(j=0;j<DIMENSION;j+) individuali.numberj=rdft()*(XMAX-XMIN)+XMIN; for(i=0;i<POPSIZE;i+) for(j=0;j&l

17、t;DIMENSION;j+) individuali.speedj=VMAX*rdft(); for(i=0;i<POPSIZE;i+) for(j=0;j<DIMENSION;j+) individuali.bestj=individuali.numberj; for(i=0;i<POPSIZE;i+) calculation(i); for(i=0;i<POPSIZE;i+) individuali.bestfitness=individuali.fitness; globalbest(0); /微粒历史最优位置修改程序 void localbest(int nu

18、mber) int i; if(individualnumber.bestfitness>individualnumber.fitness) for(i=0;i<DIMENSION;i+) individualnumber.besti=individualnumber.numberi; individualnumber.bestfitness=individualnumber.fitness; /种群历史最优位置修改程序 void globalbest(int number) int i,j; float s=0; int flag=0; if(number=0) s=indivi

19、dual0.fitness; flag=0; for(i=1;i<POPSIZE;i+) if(individuali.fitness<s) s=individuali.fitness; flag=i; for(i=0;i<DIMENSION;i+) Pi=individualflag.numberi; PBEST=individualflag.fitness; else for(i=0;i<POPSIZE;i+) if(individuali.bestfitness<PBEST) for(j=0;j<DIMENSION;j+) Pj=individuali

20、.bestj; PBEST=individuali.bestfitness; /适应值函数计算程序 void calculation(int num) int i; float s=0.0,h=0.0; s=pow(individualnum.number0+individualnum.number1+1.0,2.0)*(19.0-14.0*individualnum.number0+3.0*pow(individualnum.number0,2.0)-14.0*individualnum.number1+6.0*individualnum.number0*individualnum.numb

21、er1+3.0*pow(individualnum.number1,2.0)+1.0; h=30.0+pow(2.0*individualnum.number0-3.0*individualnum.number1,2.0)*(18.0-32.0*individualnum.number0+12.0*pow(individualnum.number0,2.0)+48.0*individualnum.number1-36.0*individualnum.number0*individualnum.number1+27.0*pow(individualnum.number1,2.0); indivi

22、dualnum.fitness=s*h; /主程序 int main() int i,j,k,t,total=0; float sum=0; for(j=0;j<50;j+) initiate(); for(i=0;i<500;i+) W=1.0-i*0.6/499; if(PBEST-3.0)<0.0001) total+; sum=sum+i; break; else for(k=0;k<POPSIZE;k+) for(t=0;t<DIMENSION;t+) individualk.speedt=W*individualk.speedt+C1*rdft()*(

23、individualk.bestt-individualk.numbert)+C2*rdft()*(Pt-individualk.numbert); if(individualk.speedt>VMAX) individualk.speedt=VMAX; individualk.numbert=individualk.numbert+individualk.speedt; if(individualk.numbert<XMIN) individualk.numbert=2*XMIN-individualk.numbert; if(individualk.numbert>XMA

24、X) individualk.numbert=2*XMAX-individualk.numbert; calculation(k); localbest(k); globalbest(1); cout<<i<<" "<<PBEST<<"t"cout<<endl;cout<<"The total number is:"<<total<<endl;cout<<"the sum is:"<<sum<

25、;<endl;cout<<"The average is:"<<sum/total<<endl;return 0;附录2随机微粒群算法源程序/库文件 #include<cstdio>#include<iostream> #include<cstdlib> #include<ctime> #include<cmath> using namespace std;/随机数的定义 #define rdint(i) (rand()%(int)(i) #define rdft() (f

26、loat)(double)rdint(16384)/(16383.0) #define rnd(a,b) (rdint(int)(b)-(int)(a)+1)+(int)(a) /宏定义 #define POPSIZE 20 #define DIMENSION 2 /全局变量定义 float W=0.0; float C1=1.8; float C2=1.8; float VMAX=2; float XMIN=-2.0; float XMAX=2.0; float PDIMENSION; float PBEST; struct indi float numberDIMENSION; float

27、 bestDIMENSION; float bestfitness; float fitness; float speedDIMENSION; individualPOPSIZE; void initiate(void); void calculation(int number); void globalbest(int number); void localbest(int number); void generate(int number); void generate(int num) int j; for(j=0;j<DIMENSION;j+) individualnum.num

28、berj=rdft()*(XMAX-XMIN)+XMIN; calculation(num); individualnum.bestfitness=individualnum.fitness; for(j=0;j<DIMENSION;j+) individualnum.bestj=individualnum.numberj; void initiate() int i,j; for(i=0;i<POPSIZE;i+) for(j=0;j<DIMENSION;j+) individuali.numberj=rdft()*(XMAX-XMIN)+XMIN; for(i=0;i&l

29、t;POPSIZE;i+) for(j=0;j<DIMENSION;j+) individuali.speedj=VMAX*rdft(); for(i=0;i<POPSIZE;i+) for(j=0;j<DIMENSION;j+) individuali.bestj=individuali.numberj; for(i=0;i<POPSIZE;i+) calculation(i); for(i=0;i<POPSIZE;i+) individuali.bestfitness=individuali.fitness; globalbest(0); void local

30、best(int number) int i; if(individualnumber.bestfitness>individualnumber.fitness) for(i=0;i<DIMENSION;i+) individualnumber.besti=individualnumber.numberi; individualnumber.bestfitness=individualnumber.fitness; void globalbest(int number) int i,j; float s=0; int flag=0; if(number=0) s=individua

31、l0.fitness; flag=0; for(i=1;i<POPSIZE;i+) if(individuali.fitness<s) s=individuali.fitness; flag=i; for(i=0;i<DIMENSION;i+) Pi=individualflag.numberi; PBEST=individualflag.fitness; else for(i=0;i<POPSIZE;i+) if(individuali.bestfitness<PBEST) for(j=0;j<DIMENSION;j+) Pj=individuali.be

32、stj; PBEST=individuali.bestfitness; void calculation(int num) int i; float s=0.0,h=0.0; s=pow(individualnum.number0+individualnum.number1+1.0,2.0)*(19.0-14.0*individualnum.number0+3.0*pow(individualnum.number0,2.0)-14.0*individualnum.number1+6.0*individualnum.number0*individualnum.number1+3.0*pow(in

33、dividualnum.number1,2.0)+1.0; h=30.0+pow(2.0*individualnum.number0-3.0*individualnum.number1,2.0)*(18.0-32.0*individualnum.number0+12.0*pow(individualnum.number0,2.0)+48.0*individualnum.number1-36.0*individualnum.number0*individualnum.number1+27.0*pow(individualnum.number1,2.0); individualnum.fitness=s*h; int main() int i,j,k,t,total=0,flag=-1,fflag; float sum=0,tempDIMENSION,s; srand(time(NULL); for(j=0;j<50;j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论