教与学算法(TLBO)

举报
AAAI 发表于 2020/12/27 23:54:35 2020/12/27
【摘要】 TLBO,由Rao等人在2011年提出的,是一种基于群体的启发式优化算法,不需要任何算法特定参数。这种方法模拟了传统的课堂教学过程。整个优化过程包括教师阶段和学习者阶段。在教师阶段,每个学生都向最优秀的个体进行学习。在学习阶段,每个学生都以随机的方式向其他学生学习。 基于教学的优化(TLBO)是一种模拟课堂教学过程的基于群体的优化方法。TLBO分为两部分。第一部分是“教师阶...

TLBO,由Rao等人在2011年提出的,是一种基于群体的启发式优化算法,不需要任何算法特定参数。这种方法模拟了传统的课堂教学过程。整个优化过程包括教师阶段和学习者阶段。在教师阶段,每个学生都向最优秀的个体进行学习。在学习阶段,每个学生都以随机的方式向其他学生学习。

基于教学的优化(TLBO)是一种模拟课堂教学过程的基于群体的优化方法。TLBO分为两部分。第一部分是“教师阶段”,即向教师学习;第二部分是“学习者阶段”,即通过学习者之间的互动进行学习。在TLBO中,种群被视为一类学习者。每个学习者代表优化问题的一个可能的解决方案,分数代表适应度值。老师被认为是迄今为止得到的最好的解决办法。

在教学阶段,教师T是一个群体中具有最佳适应度值的解决方案。M是这个班级的平均成绩。学习者试图通过教师的教学来提高他们的平均成绩。对于第i个学习者Xi,候选解决方案newXi计算如下:

                                              newXi = Xi+rand*(T-T_{F}*M)

rand是在[0,1]之间产生的随机数,TF是决定M值的教学因素。TF公式为:

                                              T_{F} = round[1+rand(0,1)]

在学习阶段,每个学习者通过与从课堂中随机选择的学习者互动来提高自己的成绩。计算如下:

                                  

j是从种群中随机选取的,ri表示的是rand。f()指的是要优化的目标函数

伪代码如下:

之后是matlab代码:


  
  1. function [fitnessgbest,gbest]=TLBOmain
  2. warning('off')
  3. clear;
  4. pn=10;%种群大小
  5. gn=20;
  6. popmax=5.12;
  7. popmin=-5.12;
  8. for i=1:pn
  9. pop(i,:)=5*rand(1,2);
  10. fitness(i)=fun(pop(i,:)); %得到适应度值(把pop(i,:)代到目标函数中得到的结果)
  11. fitnessgbest=min(fitness);
  12. end %初始化
  13. for j=1:gn
  14. pop_m=sum(pop)/10;
  15. [bestfitness,bestindex]=min(fitness);
  16. pop_t=pop(bestindex,:);
  17. %找到当前的老师
  18. %教学阶段
  19. for i=1:pn
  20. pop_new(i,:)=pop(i,:)+rand*(pop_t-round(1+rand*(2-1)*pop_m));
  21. pop_new(i,find(pop_new(1,:)>popmax))=popmax;
  22. pop_new(i,find(pop_new(1,:)<popmin))=popmin;%越界处理
  23. fitness_new(i)=fun(pop_new(i,:));
  24. if fitness_new(i)<fitness(i)
  25. pop(i,:)=pop_new(i,:);
  26. end
  27. end
  28. %进行替换
  29. %学习阶段
  30. for i=1:pn
  31. k=randint(1,1,[1 10]);
  32. while k==i
  33. k=randint(1,1,[1 10]);
  34. end
  35. if fun(pop(i,:))<fun(pop(k,:))
  36. pop_new(i,:)=pop(i,:)+rand*(pop(i,:)-pop(k,:));
  37. else if fun(pop(i,:))>fun(pop(k,:));
  38. pop_new(i,:)=pop(i,:)+rand*(pop(k,:)-pop(i,:));
  39. end
  40. end
  41. pop_new(i,find(pop_new(i,:)>popmax))=popmax;
  42. pop_new(i,find(pop_new(i,:)<popmin))=popmin;
  43. fitness_new(i)=fun(pop_new(i,:));
  44. if fitness_new(i)<fitness(i)
  45. pop(i,:)=pop_new(i,:);
  46. end
  47. end
  48. for i=1:pn
  49. fitness(i)=fun(pop(i,:));
  50. if fitness(i)<fitnessgbest
  51. gbest=pop(i,:);
  52. fitnessgbest=fitness(i);
  53. end
  54. end
  55. yy(j)=fitnessgbest; %存储最优的值
  56. end
  57. plot(yy)
  58. function y1=fun(pop)
  59. y1=sum(pop.^2-10*cos(2*pi*pop)+10);

 

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/106125151

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。