ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:89.14KB ,
资源ID:19355405      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19355405.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(遗传算法Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

遗传算法Word文件下载.docx

1、但是交叉操作要在一定的概率下进行,这个概率称为交叉率,一般设置为0.5到0.95之间。交叉后产生的新个体组成的新种群如下:图3黑体字表示子代染色体继承母代个体的基因情况。五、变异变异就是对染色体的结构进行变异,使其改变原来的结构(值也就改变),达到突变进化的目的。变异操作也要遵从一定的概率来进行,一般设置为0到0.5之间。本文的变异方法直接采取基因位反转变异法,即0变为1,1变为0。要进行变异的基因位的选取也是随机的。六、终止规则遗传算法是要一代一代更替的,那么什么时候停止迭代呢?这个规则就叫终止规则。一般常用的终止规则有:若干代后终止,得到的解达到一定目标后终止,计算时间达到一定限度后终止等

2、方法。本文采用迭代数来限制。全文代码如下:view plaincopy to clipboardprint?1. #include /调用输入输出函数所需要的头文件 2. #include /调用getche函数所需要的头文件 3. #include /调用随机函数所需要的头文件 4. 5. typedef struct Chrom / 结构体类型,为单个染色体的结构; 6. 7. short int bit6;8. int fit;9. chrom;10. 11. void *evpop(chrom popcurrent4); /定义将会用到的几个函数;12. int x(chrom pop

3、current);13. int y(int x);14. void *pickchroms(chrom popcurrent4);15. void *crossover(chrom popnext4);16. void *mutation(chrom popnext4);17. 18. void main() / 主函数;19. 20. int num; / 迭代次数;21. int i,j,l,Max,k;22. Max=0; / 函数最大值 23. 24. printf(nWelcome to the Genetic Algorithm coded by Luay Al-wesi,edi

4、td by xujinpengn); / introduction to the program,欢迎词;25. printf(The Algorithm is based on the function y = -x2 + 5 to find the maximum value of the function.n26. 27. enter:printf(nPlease enter the no. of iterationsn 请输入您要设定的迭代数: 28. scanf(%d,&num); / 输入迭代次数,传送给参数num;29. 30. chrom popcurrent4; / 初始种群

5、规模为4;31. chrom popnext4; / 更新后种群规模仍为4;32. 33. 34. if(num1) 35. goto enter; / 判断输入的迭代次数是否为负或零,是的话重新输入;36. 37. evpop(popcurrent); / 随机产生初始种群;38. 39. for(i=0;inum;i+) / 开始迭代;40. 41. 42. printf(ni = %dn,i); / 输出当前迭代次数;43. 44. for(j=0;j4;j+) 45. 46. popnextj=popcurrentj; / 更新种群;47. 48. 49. pickchroms(pop

6、next); / 挑选优秀个体;50. crossover(popnext); / 交叉得到新个体;51. mutation(popnext); / 变异得到新个体;52. 53. for(j=0;54. 55. popcurrentj=popnextj; / 种群更替;56. 57. 58. / 等待迭代终止;59. 60. for(l=0;l Max) 63. 64. Max=popcurrentl.fit;65. k=l;66. 67. 68. 69. printf(n当x等于%d时,函数得到最大值为:%d ,k,Max);70. printf(nPress any key to end

7、 !71. 72. flushall(); / 清除所有缓冲区;73. getche(); / 从控制台取字符,不以回车为结束;74. 75. 76. 77. 78. 79. void *evpop(chrom popcurrent4) / 函数:随机生成初始种群;80. 81. int i,j,value;82. int random;83. for(j=0;j+) / 从种群中的第1个染色体到第4个染色体 84. 85. for(i=0;6;i+) / 从染色体的第1个基因位到第6个基因位 86. 87. random=rand(); / 产生一个随机值 88. random=(rando

8、m%2); / 随机产生0或者1 89. popcurrentj.biti=random; / 随机产生染色体上每一个基因位的值,0或1;90. 91. 92. value=x(popcurrentj); / 将二进制换算为十进制,得到一个整数值;93. popcurrentj.fit=y(x(popcurrentj); / 计算染色体的适应度值;94. printf(n popcurrent%d=%d%d%d%d%d%d value=%d fitness = %d,j,popcurrentj.bit5,popcurrentj.bit4,popcurrentj.bit3,popcurrentj

9、.bit2,popcurrentj.bit1,popcurrentj.bit0,value,popcurrentj.fit);95. / 输出整条染色体的编码情况, 96. 97. 98. return(0);99. 100. 101. 102. int x(chrom popcurrent) / 函数:将二进制换算为十进制;103. 104. int z;105. z=(popcurrent.bit0*1)+(popcurrent.bit1*2)+(popcurrent.bit2*4)+(popcurrent.bit3*8)+(popcurrent.bit4*16);106. 107. if

10、(popcurrent.bit5=1) 108. 109. z=z*(-1); / 考虑到符号;110. 111. 112. return(z);113. 114. 115. int y(int x) / 函数:求个体的适应度;116. 117. int y;118. y=-(x*x)+5; / 目标函数: y= - ( x 2 ) +5;119. return(y);120. 121. 122. void *pickchroms(chrom popcurrent4) / 函数:选择个体;123. 124. int i,j;125. chrom temp; / 中间变量 126. 127. f

11、or(i=0;i+) / 根据个体适应度来排序;(冒泡法) 128. 129. for(j=0;130. 131. if(popcurrentj+1.fitpopcurrentj.fit) 132. 133. temp=popcurrentj+1;134. popcurrentj+1=popcurrentj;135. popcurrentj=temp;136. 137. 138. 139. 140. for(i=0;i+) 141. 142. printf(nSorting:popnext%d fitness=%d,i,popcurrenti.fit);143. printf(n144. 14

12、5. flushall();146. return(0);147. 148. 149. void *crossover(chrom popnext4) / 函数:交叉操作;150. 151. 152. int random;153. int i;154. random=rand(); / 随机产生交叉点;155. random=(random%5)+1); / 交叉点控制在1到5之间;156. for(i=0;random;157. 158. popnext2.biti=popnext0.biti; / child 1 cross over 159. popnext3.biti=popnext

13、1.biti; / child 2 cross over 160. 161. 162. for(i=random;i+) / crossing the bits beyond the cross point index 163. 164. popnext2.biti=popnext1.biti;165. popnext3.biti=popnext0.biti; / chlid 2 cross over 166. 167. 168. for(i=0;169. 170. popnexti.fit=y(x(popnexti); / 为新个体计算适应度值;171. 172. 173. for(i=0;

14、174. 175. printf(nCrossOver popnext%d=%d%d%d%d%d%d value=%d fitness = %d,i,popnexti.bit5,popnexti.bit4,popnexti.bit3,popnexti.bit2,popnexti.bit1,popnexti.bit0,x(popnexti),popnexti.fit);176. / 输出新个体;177. 178. return(0);179. 180. 181. void *mutation(chrom popnext4) / 函数:变异操作;182. 183. 184. int random;

15、185. int row,col,value;186. random=rand()%50; / 随机产生0到49之间的数;187. 188. if(random=25) / random=25的概率只有2%,即变异率为0.02;189. 190. col=rand()%6; / 随机产生要变异的基因位号;191. row=rand()%4; / 随机产生要变异的染色体号;192. 193. if(popnextrow.bitcol=0) / 1变为0;194. 195. popnextrow.bitcol=1 ;196. 197. else if(popnextrow.bitcol=1) /

16、0变为1;198. 199. popnextrow.bitcol=0;200. 201. popnextrow.fit=y(x(popnextrow); / 计算变异后的适应度值;202. value=x(popnextrow);203. printf(nMutation occured in popnext%d bit%d:=%d%d%d%d%d%d value=%d fitness=%d,row,col,popnextrow.bit5,popnextrow.bit4,popnextrow.bit3,popnextrow.bit2,popnextrow.bit1,popnextrow.bit0,value,popnextrow.fit);204. 205. / 输出变异后的新个体;206. 207. 208. return(0);209.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1