双峰和多峰函数最大值的遗传算法求解.DOC

上传人:国*** 文档编号:501660 上传时间:2018-10-16 格式:DOC 页数:10 大小:279KB
下载 相关 举报
双峰和多峰函数最大值的遗传算法求解.DOC_第1页
第1页 / 共10页
双峰和多峰函数最大值的遗传算法求解.DOC_第2页
第2页 / 共10页
双峰和多峰函数最大值的遗传算法求解.DOC_第3页
第3页 / 共10页
双峰和多峰函数最大值的遗传算法求解.DOC_第4页
第4页 / 共10页
双峰和多峰函数最大值的遗传算法求解.DOC_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、双峰和多峰函数最大值的遗传算法求解 摘 要 本文利用基本遗传算法的思路寻找双峰或多峰函数的最大值,选择采用轮盘选择方法;交叉采用单点交叉,交叉位置随机,交叉概率取 0.20;变异概率 0.005。经多次运行,求得最大值。停止法则为循环最大遗传代数为止到。的编程环境为Matlab6.5。 关键字 遗传算法 多峰函数 遗传算法是一种通用性非常强,计算性能非常好的算法,解决类似 X.*sin(10*pi*X)+2.0 这样的多峰函数的最大值采用遗传算法似乎是最好的算法。所以本问题采用遗传算法来解决,也是对遗传算法 编程的一次练习。 函数 Y=X.*sin(10*pi*X)+2.0 在 -1 2区间上

2、的图像如下: Y=X.*sin(10*pi*X)+2.0 在 -1 2区间上的图像 本程序最大遗传代数为 200,个体数目为 50,采用二进制编码,基因长度为 30。 运算结果: best_Y =3.8503 index =106 X =1.8506 各代最大值情况见下图(蓝点为第一代初始值,红色三角为各代最大值) -1 - 0 . 5 0 0 . 5 1 1 . 5 200 . 511 . 522 . 533 . 54每一代 计算 过程 如下表: Index 各代 Y最大值 各代 X 值 各代 Y平均值 1.0000 3.6378 1.6467 1.7982 2.0000 3.6378 1.

3、6467 1.8253 3.0000 3.6377 1.6467 1.7993 4.0000 3.6377 1.6467 1.8083 5.0000 3.6377 1.6467 1.8590 6.0000 3.6393 1.6469 1.9193 7.0000 3.6393 1.6469 1.8609 8.0000 3.6392 1.6469 1.8530 9.0000 3.6392 1.6469 1.8829 10.0000 3.5987 1.8337 1.8155 11.0000 3.5987 1.8337 1.8518 12.0000 3.5514 1.8321 1.8246 13.00

4、00 3.5514 1.8321 1.8510 14.0000 3.3570 1.4621 1.7440 15.0000 3.3570 1.4621 1.8066 16.0000 3.3570 1.4621 1.7515 17.0000 3.3570 1.4621 1.8107 18.0000 3.3570 1.4621 1.7857 19.0000 3.3570 1.4621 1.7297 20.0000 3.3570 1.4621 1.6843 21.0000 3.3566 1.4622 1.7327 22.0000 3.3566 1.4622 1.8440 23.0000 3.5208

5、1.8312 1.8888 24.0000 3.5208 1.8312 1.8769 25.0000 3.5211 1.8312 1.8778 26.0000 3.5211 1.8312 1.8839 27.0000 3.3583 1.4621 1.9143 28.0000 3.3583 1.4621 1.8783 29.0000 3.3574 1.4621 1.9416 30.0000 3.4993 1.6369 1.9575 31.0000 3.4993 1.6369 1.8997 32.0000 3.4993 1.6369 1.9361 33.0000 3.3999 1.4591 1.8

6、675 34.0000 3.3984 1.4592 1.8084 35.0000 3.4318 1.6340 1.9287 36.0000 3.4629 1.6353 1.9099 37.0000 3.4629 1.6353 1.8646 38.0000 3.4630 1.6353 1.8126 39.0000 3.4630 1.6353 1.8807 40.0000 3.4804 1.6651 1.8838 41.0000 3.4804 1.6651 1.8546 42.0000 3.4804 1.6651 1.9645 43.0000 3.5238 1.6631 1.9268 44.000

7、0 3.0573 1.8810 1.8557 45.0000 3.0573 1.8810 1.9213 46.0000 3.0573 1.8810 1.9020 47.0000 3.0571 1.8810 1.8252 48.0000 3.4475 1.4487 1.8926 49.0000 3.4484 1.4490 1.9698 50.0000 3.4484 1.4490 1.9897 51.0000 3.4484 1.4490 1.9714 52.0000 2.8503 0.8521 1.9145 53.0000 2.8503 0.8521 1.9170 54.0000 2.8579 1

8、.2247 1.9501 55.0000 2.8503 0.8521 1.9134 56.0000 3.7248 1.8623 1.8872 57.0000 3.7248 1.8623 1.8820 58.0000 3.7242 1.8623 1.8609 59.0000 3.7242 1.8623 1.9609 60.0000 3.1241 1.8796 1.9457 61.0000 3.1241 1.8796 1.9663 62.0000 3.4353 1.4461 1.9586 63.0000 3.4356 1.4461 1.9345 64.0000 3.7712 1.8599 1.97

9、66 65.0000 3.7773 1.8595 2.0047 66.0000 3.7773 1.8595 1.9587 67.0000 3.4748 1.8711 1.9631 68.0000 3.7091 1.8380 2.0427 69.0000 3.7090 1.8380 2.0199 70.0000 3.8274 1.8455 2.0720 71.0000 3.7438 1.8397 2.0738 72.0000 3.7430 1.8396 2.0255 73.0000 3.7438 1.8397 2.0288 74.0000 3.6273 1.8663 2.0063 75.0000

10、 3.7760 1.8596 2.0204 76.0000 3.7850 1.8590 2.1523 77.0000 3.7850 1.8590 2.1444 78.0000 3.7850 1.8590 2.1158 79.0000 3.8429 1.8477 2.1157 80.0000 3.8429 1.8477 1.9623 81.0000 3.8429 1.8477 1.9620 82.0000 3.8430 1.8477 1.9416 83.0000 3.8430 1.8477 1.8527 84.0000 3.8430 1.8477 2.0005 85.0000 3.8430 1.

11、8477 2.0226 86.0000 3.8430 1.8477 2.0846 87.0000 3.8430 1.8477 2.0399 88.0000 3.8427 1.8477 2.0424 89.0000 3.8427 1.8477 2.0247 90.0000 3.8429 1.8534 2.0898 91.0000 3.8429 1.8534 2.0715 92.0000 3.8429 1.8534 2.0916 93.0000 3.3525 1.8743 1.9669 94.0000 3.3525 1.8743 2.0206 95.0000 3.3525 1.8743 2.018

12、3 96.0000 3.3650 1.8740 2.0191 97.0000 3.8404 1.8538 2.0578 98.0000 3.8391 1.8540 2.0120 99.0000 3.8391 1.8540 1.9769 100.0000 3.8391 1.8540 2.0035 101.0000 3.8502 1.8507 2.0710 102.0000 3.8502 1.8507 2.0570 103.0000 3.8502 1.8507 2.0683 104.0000 3.8502 1.8507 2.0826 105.0000 3.8502 1.8507 2.0440 10

13、6.0000 3.8503 1.8506 2.0487 107.0000 3.8503 1.8506 2.0244 108.0000 3.8503 1.8506 2.0568 109.0000 3.8503 1.8506 2.1176 110.0000 3.8503 1.8506 2.0873 111.0000 3.8503 1.8506 2.1207 112.0000 3.8503 1.8506 2.0535 113.0000 3.8503 1.8506 2.0841 114.0000 3.8502 1.8503 2.1926 115.0000 3.7637 1.8408 2.1121 11

14、6.0000 3.7636 1.8408 2.0932 117.0000 3.7636 1.8408 1.9732 118.0000 3.7637 1.8408 1.9570 119.0000 3.7636 1.8408 1.9336 120.0000 3.7636 1.8408 1.9575 121.0000 3.7280 1.8389 1.8549 122.0000 3.7280 1.8389 1.9322 123.0000 3.7280 1.8389 1.9030 124.0000 3.7280 1.8389 1.9238 125.0000 3.7280 1.8389 1.9764 12

15、6.0000 3.7280 1.8389 2.0212 127.0000 3.7282 1.8389 1.9752 128.0000 3.7282 1.8389 1.9498 129.0000 3.7330 1.8391 1.8933 130.0000 3.7330 1.8391 1.8934 131.0000 3.5933 1.8335 1.8165 132.0000 3.5933 1.8335 1.8368 133.0000 3.3053 1.8254 1.8050 134.0000 3.2449 1.2538 1.7433 135.0000 3.2449 1.2538 1.7819 13

16、6.0000 2.8499 0.8525 1.7336 137.0000 2.8499 0.8525 1.7512 138.0000 2.8499 0.8525 1.7261 139.0000 2.8499 0.8525 1.7688 140.0000 3.2529 1.6280 1.8543 141.0000 3.6319 1.6554 1.8755 142.0000 3.6319 1.6554 1.8593 143.0000 3.6144 1.6573 1.8239 144.0000 3.6230 1.6564 1.8335 145.0000 3.6230 1.6564 1.8621 14

17、6.0000 3.6229 1.6564 1.8524 147.0000 3.3186 1.6711 1.9152 148.0000 3.1985 1.4696 1.9109 149.0000 3.7083 1.8631 2.0110 150.0000 3.7083 1.8631 1.9662 151.0000 3.6267 1.8663 1.9461 152.0000 3.6267 1.8663 2.0019 153.0000 3.6267 1.8663 1.9808 154.0000 3.6267 1.8663 1.9828 155.0000 3.6267 1.8663 1.9835 15

18、6.0000 3.6550 1.8653 1.9858 157.0000 3.6550 1.8653 2.0047 158.0000 3.6550 1.8653 2.0711 159.0000 3.6532 1.8653 2.0025 160.0000 3.6532 1.8653 2.0074 161.0000 3.8466 1.8486 2.0899 162.0000 3.8466 1.8486 2.0768 163.0000 3.8466 1.8486 2.0675 164.0000 3.8417 1.8536 2.0655 165.0000 3.8417 1.8536 2.0244 16

19、6.0000 3.4929 1.6366 1.9715 167.0000 3.6063 1.6580 1.9138 168.0000 3.4433 1.6667 1.9892 169.0000 3.4381 1.6669 1.9848 170.0000 3.4381 1.6669 1.9934 171.0000 3.4381 1.6669 1.9868 172.0000 3.7924 1.8426 2.0324 173.0000 3.4379 1.6669 2.0047 174.0000 3.4379 1.6669 2.0191 175.0000 3.4379 1.6669 1.9246 17

20、6.0000 3.4380 1.6669 1.9055 177.0000 3.4380 1.6669 1.9284 178.0000 3.6089 1.6435 2.0184 179.0000 3.6090 1.6435 1.9541 180.0000 3.8452 1.8529 1.9973 181.0000 3.6093 1.6435 1.9780 182.0000 3.6093 1.6435 1.9613 183.0000 3.6096 1.6435 1.9650 184.0000 3.3541 1.4390 1.9575 185.0000 3.4277 1.4563 1.9087 18

21、6.0000 3.1521 1.2381 1.9247 187.0000 3.4503 1.4504 1.9454 188.0000 2.8989 1.4792 1.9066 189.0000 2.8822 1.6184 1.9284 190.0000 3.4228 1.6675 1.9520 191.0000 3.4305 1.6672 1.9905 192.0000 3.4305 1.6672 1.9467 193.0000 3.3365 1.8747 1.9122 194.0000 3.1694 1.2393 1.8371 195.0000 3.8503 1.8506 1.9073 19

22、6.0000 3.8147 1.8568 1.9294 197.0000 3.8501 1.8502 2.0429 198.0000 3.8147 1.8568 1.9125 199.0000 3.8152 1.8567 1.9703 200.0000 3.8152 1.8567 2.0873 201.0000 3.8182 1.8565 2.0715 评价: 由于此程序为循环完指定代数后才结束, 并且算不是绝对收敛的, 所以会出现后面的一些最大值反而比前面的小的情况,而且显得没有规律。此程序运行时间 很短, 1 秒左右 ,性能不错 。 可以 输出也可 看出此程序收敛速度实际上有点快。 双峰函

23、数不必讨论了。 本程序文件名为: SGA.m 子 函数: bs2rv.m 二进制转换 10 进制函数 程序源代码如下: function SGA() %简单遗传算法程序解决多峰函数的最值问题 Maxgen=200; %最大遗传代数 NIND=50; %个体数目 gen_len=30; %基因长度 FieldD=-1,2;%区域描述 cross_probability=0.20;%交叉概率 mutate_probability=0.005;%变异概率 fun=variable.*sin(10*pi*variable)+2.0;%目标函数 %subplot(2,1,1); fplot(fun,Fi

24、eldD);%画出目标函数曲线 hold on %生成初始种群 Chrom=round(rand(NIND,gen_len); %生成二维 01 数组 Chrom_real=bs2rv(Chrom,FieldD) %二进制转换成十进制数 %计算目标函数值 Obj=Chrom_real.*sin(10*pi*Chrom_real)+2.0 %绘制初始值点 plot(Chrom_real,Obj,*); %绘制当前最大值的点 ma(1,3)=1; ma(1,2) index=max(Obj); ma(1,3)=Chrom_real(index); plot(ma(1,3),ma(1,2),); %

25、种群平均值 ma(1,4)=mean(Obj); %开始遗传计算 for gen=1:Maxgen %计算适应度 sumObj=sum(Obj);%所有个体的目标函数值之和 fitness=Obj/sumObj;%每个个体的选择概率 fitness2=fitness(1);%累计概率 %选择 numof=length(fitness); %计算累计概率 fitness2 for j=2:numof fitness2(j)=fitness(j)+fitness2(j-1);%计算累计概率 end %轮盘选择 tempChrom=Chrom;%储存一个原始的个体值 index=1; for k=1

26、:NIND for j=1:numof if randcross_probability if n1=0 n1=1; temindex=i;%纪录第一个交叉个体 continue; else %选够两个个体则交叉 pos=round(rand*gen_len)+1; tempC=Chrom(temindex,:); Chrom(temindex,pos:gen_len)=Chrom(i,pos:gen_len); Chrom(i,pos:gen_len)=tempC(pos:gen_len); n1=0; end end end %变异运算 for i=1:NIND for j=1:gen_l

27、en if randr); %各代种群平均值 ma(gen+1,4)=mean(Obj); %subplot(2,1,2); %plot(1:gen+1,ma(gen+1,1); End %输出计算结果 ma best_Y index=max(ma(:,2) X=ma(index,3) 此函数将二进制转换为十进制 function ans=bs2rv(Chrom,FieldD) %二进制到十进制的转换 %chrom 为二进制数组 %FieldD 为边界数组 这里认为只有一个变量 m n=size(Chrom); maxn=2n; F=(FieldD(2)-FieldD(1); for i=1:m ans(i)=0; for j=n:-1:1 ans(i)=ans(i)+Chrom(i,j)*2(j-1); end ans(i)=FieldD(1)+ans(i)/maxn*F; end

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。