当前位置:   article > 正文

Jaya原理及matlab实现在cec2005的测试-附代码_cec2005测试函数最优值

cec2005测试函数最优值


以下是jaya函数的代码,主函数及cec2005测试函数私聊获取

  1. %% jaya函数
  2. function [Best_pos,Best_score,curve] = Jaya(pop,Max_iter,lb,ub,dim,fobj)
  3. %定义一个jaya的函数,这个函数输入五个参数,输出3个参数
  4. %输入参数:
  5. %pop:种群数量
  6. %Max_iter:最大迭代次数
  7. %lb:变量的下界,一般是个向量,表示不同变量(维度)的下界
  8. %ub:变量的上界
  9. %fobj:适应度函数,类似于目标函数
  10. %输出参数:
  11. %Best_pos:最优解
  12. %Best_score:最优解对应的函数值
  13. %curve:每一轮迭代的最优解的函数值
  14. %确保上下界是向量形式,如果是标量则进行转化
  15. if (max(size(ub))==1); %则是一个标量,需要转换成向量,方便后面确定初始化种群的值,此时每个变量的上下限是相同的
  16. lb=lb.*ones(1,dim);
  17. ub=ub.*ones(1,dim);
  18. end
  19. %定义种群中初始化变量的取值
  20. X0=initialization(pop,dim,lb,ub);
  21. X=X0;
  22. fitness=zeros(1,pop); %计算每一个个体的函数值,并储存到fitness这个列向量中
  23. for i=1:pop;
  24. fitness(i)=fobj(X(i,:));
  25. end
  26. [fitness,index]=sort(fitness); %将函数值进行一个排序,从小到大,并输出原顺序的索引
  27. GBestF = fitness(1); %记录全局最优适应度值
  28. for i=1:pop; %对X中个体的顺序进行更新,函数值从小到大向下
  29. X(i,:)=X0(index(i),:);
  30. end
  31. GBestX = X(1,:);%记录全局最优解
  32. %把curve和X_new先初始化一下,增加运行速度
  33. curve=zeros(1,Max_iter);
  34. X_new = X;
  35. %开始迭代,不断更新最优解
  36. for t=1:Max_iter;
  37. Pbest = X(1,:);
  38. Pworst = X(end,:);
  39. %计算用jaya更新的每个个体的新值
  40. for i=1:pop;
  41. X_new(i,:) = X(i,:) + rand(1,dim).*(Pbest - abs(X(i,:))) - rand(1,dim).*(Pworst - abs(X(i,:)));
  42. end
  43. % 边界控制,防止新值超过约束
  44. for j=1:pop;
  45. for a=1:dim;
  46. if (X_new(j,a)>ub(a));
  47. X_new(j,a)=ub(a);
  48. end
  49. if (X_new(j,a)<lb(a));
  50. X_new(j,a)=lb(a);
  51. end
  52. end
  53. end
  54. %计算新的适应度值
  55. for j=1:pop
  56. fitness_new(j)=fobj(X_new(j,:));
  57. end
  58. %比较每个个体是否需要更新
  59. for j=1:pop;
  60. if fitness_new(j)<fitness(j);
  61. X(j,:)=X_new(j,:);
  62. fitness(j)=fitness_new(j);
  63. end
  64. if (fitness_new(j)<GBestF);
  65. GBestF=fitness_new(j);
  66. GBestX=X_new(j,:);
  67. end
  68. end
  69. %更新X的位置
  70. [fitness,index]=sort(fitness);
  71. X = X(index,:);%这个代码直接按index的索引调换了X行的位置
  72. %记录每一次迭代的最优适应度值
  73. curve(t)=GBestF;
  74. end
  75. Best_pos = GBestX;
  76. Best_score = curve(end);
  77. end

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/765534
推荐阅读
相关标签
  

闽ICP备14008679号