我是靠谱客的博主 贤惠店员,最近开发中收集的这篇文章主要介绍【DE算法】差分进化算法原理及matlab代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

差分进化算法DE与遗传算法GA非常类似,下面是差分进化算法的步骤。

算法步骤如下:

  1. 初始化

  2. 变异

  3. 交叉

d.选择

测试函数:

Rastrigr函数  

                 

全局最优点: ,       

matlab代码如下:

[plain] view plain copy
  1. function DE(Gm,F0)  
  2.   
  3. t0 = cputime;  
  4. %差分进化算法程序  
  5. %F0是变异率 %Gm 最大迭代次数  
  6. Gm = 10000;  
  7. F0 = 0.5;  
  8. Np = 100;  
  9. CR = 0.9;  %交叉概率  
  10. G= 1; %初始化代数  
  11. D = 10; %所求问题的维数  
  12. Gmin = zeros(1,Gm); %各代的最优值  
  13. best_x = zeros(Gm,D); %各代的最优解  
  14. value = zeros(1,Np);  
  15.   
  16. %产生初始种群  
  17. %xmin = -10; xmax = 100;%带负数的下界  
  18. xmin = -5.12;  
  19. xmax = 5.12;  
  20. function y = f(v)  
  21.     %Rastrigr 函数  
  22. y = sum(v.^2 - 10.*cos(2.*pi.*v) + 10);  
  23. end  
  24.   
  25. X0 = (xmax-xmin)*rand(Np,D) + xmin;  %产生Np个D维向量  
  26. XG = X0;  
  27.   
  28. %%%%%%%%%%%%%----这里未做评价,不判断终止条件----%%%%%%%%%%%%%%%%%%%%%%%%  
  29.   
  30. XG_next_1= zeros(Np,D); %初始化  
  31. XG_next_2 = zeros(Np,D);  
  32. XG_next = zeros(Np,D);  
  33.   
  34. while G <= Gm   
  35. G   
  36. %%%%%%%%%%%%%%%%%%%%%%%%----变异操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  37.     for i = 1:Np  
  38.         %产生j,k,p三个不同的数  
  39.         a = 1;  
  40.         b = Np;  
  41.         dx = randperm(b-a+1) + a- 1;  
  42.         j = dx(1);  
  43.         k = dx(2);  
  44.         p = dx(3);  
  45.         %要保证与i不同  
  46.         if j == i  
  47.             j  = dx(4);  
  48.             else if k == i  
  49.                  k = dx(4);  
  50.                 else if p == i  
  51.                     p = dx(4);  
  52.                     end  
  53.                 end  
  54.          end  
  55.           
  56.         %变异算子  
  57.         suanzi = exp(1-Gm/(Gm + 1-G));  
  58.         F = F0*2.^suanzi;  
  59.         %变异的个体来自三个随机父代  
  60.          
  61.         son = XG(p,:) + F*(XG(j,:) - XG(k,:));         
  62.         for j = 1: D  
  63.             if son(1,j) >xmin  & son(1,j) < xmax %防止变异超出边界  
  64.                 XG_next_1(i,j) = son(1,j);  
  65.             else  
  66.                 XG_next_1(i,j) = (xmax - xmin)*rand(1) + xmin;  
  67.             end  
  68.         end  
  69.     end  
  70.    %%%%%%%%%%%%%%%%%%%%%%%---交叉操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  71.       
  72.       
  73.     for i = 1: Np  
  74.         randx = randperm(D);% [1,2,3,...D]的随机序列     
  75.         for j = 1: D  
  76.               
  77.             if rand > CR & randx(1) ~= j % CR = 0.9   
  78.                 XG_next_2(i,j) = XG(i,j);  
  79.             else  
  80.                 XG_next_2(i,j) = XG_next_1(i,j);  
  81.             end  
  82.         end  
  83.     end  
  84.       
  85.     %%%%%%%%%%%%%%%%%%----选择操作---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  86.     for i = 1:Np  
  87.         if f(XG_next_2(i,:)) < f(XG(i,:))  
  88.               
  89.             XG_next(i,:) = XG_next_2(i,:);  
  90.         else  
  91.             XG_next(i,:) = XG(i,:);  
  92.         end  
  93.     end  
  94.       
  95.     %找出最小值  
  96.     for i = 1:Np  
  97.         value(i) = f(XG_next(i,:));  
  98.     end  
  99.     [value_min,pos_min] = min(value);  
  100.       
  101.     %第G代中的目标函数的最小值  
  102.     Gmin(G) = value_min;     
  103.     %保存最优的个体  
  104.     best_x(G,:) = XG_next(pos_min,:);     
  105.       
  106.     XG = XG_next;      
  107.     trace(G,1) = G;  
  108.     trace(G,2) = value_min;  
  109.     G = G + 1;  
  110.     
  111. end  
  112.   [value_min,pos_min] = min(Gmin);  
  113.   best_value = value_min  
  114.   best_vector =  best_x(pos_min,:)    
  115.   fprintf('DE所耗的时间为:%f n',cputime - t0);  
  116.   %画出代数跟最优函数值之间的关系图    
  117.   plot(trace(:,1),trace(:,2));  
  118.     
  119. end  

结果:

以上转载自:http://blog.csdn.net/hehainan_86/article/details/38685231

DE算法的求解步骤:

DE算法的流程图:

以上转载自:http://blog.csdn.net/misayaaaaa/article/details/54407548

最后

以上就是贤惠店员为你收集整理的【DE算法】差分进化算法原理及matlab代码的全部内容,希望文章能够帮你解决【DE算法】差分进化算法原理及matlab代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部