您好,欢迎来到网暖!

当前位置:网暖 » 站长资讯 » 建站基础 » 网络技术 » 文章详细 订阅RssFeed

遗传算法与函数优化

来源:网络整理 浏览:241次 时间:2022-05-17

遗传算法是一种基于概率的鲁棒性很强的随机化全局搜索技术,其搜索过程具有一定的方向性,能够有效克服未成熟收敛。1975年由美国的J.Holland教授提出,之后DeJong将其用于最优化问题。遗传算法是一种借鉴生物界自然选择和遗传机制的高度并行、随机、自适应的全局优化概率搜索算法。具有直接对结构对象进行操作,不存在求导和函数连续性限定等特点;具有内在的隐并行性,和更好的全局寻优能力。遗传算法采用了概率化的寻优方法,能够自动获取和指导优化的搜索空间,自适应地调整搜索方向,无需确定的规则。正因如此,遗传算法已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域,国内外都非常重视遗传算法的理论和应用研究,并取得了令人瞩目的进展,遗传算法的应用成果已渗入到许多领域。

下面将举两个函数例子来解释如何利用遗传算法解决实际的函数优化问题。

1. 目标函数

本次目的是寻找这两个函数的最小值,其中n=2。首先通过Matlab画出了两个函数的三维图像,便于更加直观的观察出函数值的分布。

从图中可以看出:尽管目标函数表达式各不相同,但它们的三维图都有一个共同点,就是存在多个局部最优解,整个算法就是经过多次迭代得到最优解,整个过程要跳出局部最优解得到最后的全局最优解。

2.算法流程

算法流程如下图所示:

解决目标函数的最优解问题所采取的遗传算法流程如图3所示,其具体的实现过程分为以下几个步骤:

Step1:随机产生初始种群,种群大小为Popsize,Length为一个染色体长度(编码长度),种群记为Population。

   Step2:将二进制染色体转化为十进制数,并计算当代种群个体的适应度值。

   Step3:找出当代中的最优个体和最优适应度值,并从当代种群Population进行选择运算,该算法采用了轮盘du选择算法,选择函数为Selecfun。选择后的种群记为Sel_popul。

   Step4:对种群Sel_popul进行交叉,交叉采用的是自适应的双点交叉,然后再进行变异。

   Step5:求出变异后的最优适应度值以及对应的最优个体与Step3中的最优个体进行比较,如果变异后的最优适应度值大于Step3中的最优适应度值,则不做改变,如果变异后的最优适应度值小于Step3中的最优适应度值,则将变异后的最差适应度值对应的个体由Step3中选出的最优个体替换,即最优保存策略。

Step6:若循环次数大于最大迭代次数,输出统计结果,如收敛曲线等,整个算法终止,否则,将返回到step2。

3.寻优结果

将程序重复运行10次,每次遗传迭代次数为50次,然后从10个结果中找出目标函数值最小的点及其个体的坐标作为最佳目标函数值和最优个体,然后对10个目标函数值求方差,计算10次运行结果的差异大小。具体仿真参数如表1所示,最后将得到的数据统计结果如表2所示。


由仿真结果可以看出,函数的目标函数值的方差较小,说明函数已经接近最优值,而函数的目标函数值的方差较大,说明还没有很好地收敛,所以必须要加大迭代次数使其最佳目标值更加精确。

将程序重复运行10次,每次遗传迭代次数为80次,其仿真参数如下表3所示:

从表2和表4可以看出,当迭代次数为80次时,目标函数值方差明显都有所减小,但还可进一步优化。因此,可以继续加大迭代次数从而达到更好的收敛效果。

继续增加迭代次数,观察仿真结果。仿真参数见表5,寻优结果统计见表6。

将程序重复运行10次,每次遗传迭代次数为100次,其仿真统计结果如表6所示:


从表2、表4和表6可以看出,随着迭代次数的增加,目标函数值的方差均逐渐接近0,也就是说多次运行的最佳目标函数值大致相等,即运行的结果基本都在真实最优值附近。

并且,从表6可以看出,在迭代次数为100次时,目标函数的方差非常接近0,而函数的方差值则仍较大。可以预见,随着迭代次数的进一步增加,函数的方差值也将趋近于0。但是,随着迭代次数的增加,运行的时间也逐渐变长。因此,在实际使用中,应折中考虑运行效果与运行时间的关系,合理分配时间与硬件资源。

4. Matlab方式实现遗传算法的主程序代码

  1. 1.       %%%%%%%%%%%%%本程序为遗传算法实现主程序%%%%%%%%%%%%%%%  

  2. 2.       %设定n=2,即优化函数为:f1 f2 中的一个  

  3. 3.       % 双变量时,染色体长度34。前17为x,后17为y。  

  4. 4.       % 采用轮盘选择  

  5. 5.       clear; close all;  

  6. 6.         

  7. 7.       global popsize chromlength func_choose  

  8. 8.       popsize=100;                                                    %群体大小  

  9. 9.       chromlength=34;                                             %个体长度  

  10. 10.   pc=0.7;                                                                %交叉概率  

  11. 11.   pm=0.02;                                                            %变异概率  

  12. 12.   rec_time=50;                                                     %迭代次数  

  13. 13.   func_choose = 1;                                               % func_choose取值为1 2,分别代表函数f1 f2  

  14. 14.     

  15. 15.   pop=initpop(popsize,chromlength);         %随机产生初始群体  

  16. 16.   for i=1:rec_time  

  17. 17.       [objvalue]=calobjvalue(pop);                  %计算目标函数  

  18. 18.       fitvalue=calfitvalue(objvalue);                 %计算群体中每个个体的适应度  

  19. 19.       [newpop]=selection(pop,fitvalue);        %复制  

  20. 20.       [newpop]=crossover(newpop,pc);        %交叉  

  21. 21.       pm=pm+i/1000;                                          %迭代次数增加有利于跳出局部最优的情况  

  22. 22.       [newpop]=mutation(newpop,pm);        %变异  

  23. 23.       pop=newpop;  

  24. 24.       [objvalue]=calobjvalue(pop);                  %计算目标函数值  

  25. 25.       fitvalue=calfitvalue(objvalue);                %计算群体中每个个体的适应度  

  26. 26.       [bestindividual,bestfit,cx]=best(pop,fitvalue);          %找出群体中适应值最大的个体及其适应值  

  27. 27.       [worstindividual,worstfit,wx]=worst(pop,fitvalue); %找出群体中适应值最小的个体及其适应值  

  28. 28.       f(i)=bestfit;                                                    %取出历代最优解对应的适应度值放入f数列  

  29. 29.       keep(i,:)=bestindividual;                           %取出历代最优解放入keep矩阵  

  30. 30.       [fm wz]=max(f);  

  31. 31.       bestindividual=keep(wz,:);                       %取出keep矩阵中的适应度值最优的解,即史上最优解  

  32. 32.       n(i)=i;  

  33. 33.       pop5=bestindividual;  

  34. 34.       pop(wx,:)=pop5;                                          %用史上最优解替代第i次迭代中最差的个体  

  35. 35.         

  36. 36.       if func_choose == 1  

  37. 37.           x1(i)=-500+decodechrom(pop5,1,chromlength/2)*1000/(2^(chromlength/2)-1);    

  38. 38.           x2(i)=-500+decodechrom(pop5,chromlength/2+1,chromlength/2)*1000/(2^(chromlength/2)-1);   

  39. 39.       else                                                                  %默认选择f2(x)  

  40. 40.           x1(i)=-500+decodechrom(pop5,1,chromlength/2)*1000/(2^(chromlength/2)-1);      

  41. 41.           x2(i)=-500+decodechrom(pop5,chromlength/2+1,chromlength/2)*1000/(2^(chromlength/2)-1);   

  42. 42.       end  

  43. 43.         

  44. 44.       y=myfun(x1,x2);  

  45. 45.   end  

  46. 46.   [yy index]=min(y);                                          %计算函数最小值及其位置  

  47. 47.   Y=yy;  

  48. 48.   X1=x1(index);                                                   %计算最小值时x1对应的值  

  49. 49.   X2=x2(index);                                                   %计算最小值时x2对应的值  

  50. 50.     

  51. 51.   figure                                                                   %收敛曲线作图  

  52. 52.   plot(y, 'r');  

  53. 53.   title(['函数f(',num2str(func_choose),')的收敛曲线']);  

  54. 54.   xlabel('t/代数');ylabel('目标函数值');  

  55. 55.   grid on;  

  56. 56.     

  57. 57.   %%%%%%%%%%%%对于最优化得到的函数值及变量值的显示%%%%%%%%%%  

  58. 58.   disp([num2str(X1), '  ', num2str(X2), '  ', num2str(Y)]);  

 参考文献

[1]  Abdelsalam AM, El-Shorbagy MA. Optimization of windturbines siting in a wind farm using genetic algorithm based local search[J]. RenewableEnergy,2018,123(8):748755.

[2]  康彩丽. 遗传算法优化BP神经网络非线性函数拟合的研究[J].忻州师范学院学报,2019,35(05):22-25.

[3]  Moeini A, Zargarabadi MR.Geneticalgorithm optimization of film cooling effectiveness over a rotating blade[J].InternationalJournal of Thermal Sciences,2018,125(3):248-255.

[4]  王雪峰. 用于函数优化问题的实数编码遗传算法的改进及并行化实现[D].河北大学,2019.

[5]    Moussa M, Hmila M, Douik A.A novel facerecognition approach based on genetic algorithm optimization[J].Studies inInformatics&Control,2018,27(1):127134.



推荐站点

  • 腾讯腾讯

    腾讯网(www.QQ.com)是中国浏览量最大的中文门户网站,是腾讯公司推出的集新闻信息、互动社区、娱乐产品和基础服务为一体的大型综合门户网站。腾讯网服务于全球华人用户,致力成为最具传播力和互动性,权威、主流、时尚的互联网媒体平台。通过强大的实时新闻和全面深入的信息资讯服务,为中国数以亿计的互联网用户提供富有创意的网上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐网是全球最大的中文门户网站,为用户提供24小时不间断的最新资讯,及搜索、邮件等网络服务。内容包括全球热点事件、突发新闻、时事评论、热播影视剧、体育赛事、行业动态、生活服务信息,以及论坛、博客、微博、我的搜狐等互动空间。

    www.sohu.com
  • 网易网易

    网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,开设新闻、娱乐、体育等30多个内容频道,及博客、视频、论坛等互动交流,网聚人的力量。

    www.163.com
  • 新浪新浪

    新浪网为全球用户24小时提供全面及时的中文资讯,内容覆盖国内外突发新闻事件、体坛赛事、娱乐时尚、产业资讯、实用信息等,设有新闻、体育、娱乐、财经、科技、房产、汽车等30多个内容频道,同时开设博客、视频、论坛等自由互动交流空间。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com