[原创]基于遗传算法模拟退火举例-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 会计>>

会计库

>>

[原创]基于遗传算法模拟退火举例

[原创]基于遗传算法模拟退火举例

发布:fantuanxiaot | 分类:会计库

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

一,基于遗传算法的模拟退火工具箱应用。用模拟退火工具箱试了试一个例子,发现全局收敛非常不稳定,总会收敛到局部,因子加入遗传算法就好很多了,以下是基于谢菲尔德大学的遗传算法的模拟退火算法,对MATLAB的模拟 ...
免费学术公开课,扫码加入


一,基于遗传算法的模拟退火工具箱应用。用模拟退火工具箱试了试一个例子,发现全局收敛非常不稳定,总会收敛到局部,因子加入遗传算法就好很多了,以下是基于谢菲尔德大学的遗传算法的模拟退火算法,对MATLAB的模拟退火工具箱进行改进。
[hide]
  1. function SA_GA_ExampleI()
  2. clc;
  3. clear all
  4. ub_lb=[-5 -5;5 5];
  5. %ub_lb的设置其中第一行是下界第二行是上界
  6. Population=10;
  7. MaxIteration=10;
  8. SelectionProbability=0.9;
  9. CrossoverProbability=0.7;
  10. MutationProbability=0.01;
  11. NumberofIndividuals=2;
  12. traceX=zeros(MaxIteration,NumberofIndividuals);
  13. traceY=zeros(1,MaxIteration);
  14. Precision=8;
  15. %以上为参数的设置
  16. FielD=[repmat(Precision,1,NumberofIndividuals);ub_lb;repmat([1;0;1;1],1,NumberofIndividuals)];

  17. Iteration=0;

  18. Chromsome=CRTBP(Population,NumberofIndividuals*Precision);
  19. X=BS2RV(Chromsome,FielD);
  20. ObjV=ObjVfun(X);

  21. while Iteration<MaxIteration
  22. FitV=RANKING(ObjV);
  23. SelCh=SELECT('SUS',Chromsome,FitV,SelectionProbability);
  24. SelCh=RECOMBIN('XOVSP',SelCh,CrossoverProbability);
  25. SelCh=MUT(SelCh,MutationProbability);

  26. X=BS2RV(SelCh,FielD);
  27. ObjSelV=ObjVfun(X);

  28. [Chromsome,ObjV]=REINS(Chromsome,SelCh,1,1,ObjV,ObjSelV);
  29. X=BS2RV(Chromsome,FielD);

  30. Iteration=Iteration+1;
  31. [fval,index]=min(ObjV);
  32. traceY(Iteration)=fval;
  33. traceX(Iteration,:)=X(index,:);
  34. end
  35. figure(1)
  36. set(figure(1),'color','w')
  37. hold on
  38. plot(traceY,'ro','markerfacecolor','r','markersize',12,'markeredgecolor','k')
  39. grid on
  40. legend('The Best FvalPath')
  41. hold off
  42. YY=traceY(end);
  43. disp(['The Best Fval= ',num2str(YY)])
  44. end

  45. %目标函数与建立最优初始值结果
  46. function Obj=ObjVfun(X)
  47. %X是初始值矩阵
  48. N=size(X,1);
  49. ObjectiveFunction = @fun;
  50. lb = [-5 -5];
  51. ub = [5 5];
  52. options = saoptimset('MaxIter',300,'StallIterLim',200,'TolFun',1e-20,'AnnealingFcn',@annealingfast,...
  53. 'InitialTemperature',100,'TemperatureFcn',@temperatureexp,'ReannealInterval',500);
  54. Obj=zeros(N,1);
  55. for i=1:N
  56. [~,fval]=simulannealbnd(ObjectiveFunction,X(i,:),lb,ub,options);
  57. Obj(i)=fval;
  58. end
  59. end

  60. %目标函数
  61. %y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 +
  62. %4*x(2)^2)*x(2)^2;
  63. %Rastrigin's function
  64. function y=fun(x)
  65. y = 20 + x(1)^2 + x(2)^2 - 10*(cos(2*pi*x(1))+cos(2*pi*x(2)));
  66. end
复制代码
最终:The Best Fval= 2.0843e-007


二,基于遗传算法的模拟退火算法例子应用
  1. function SA_GA_Example()
  2. clc;
  3. clear all
  4. ub_lb=[-5 -5;5 5];
  5. %种群
  6. %基于遗传算法的参数设置
  7. Population=40;
  8. MaxIteration=20;
  9. SelectionProbability=0.9;
  10. CrossoverProbability=0.7;
  11. MutationProbability=0.01;
  12. NumberofIndividuals=2;
  13. Precision=20;
  14. %基于模拟退火算法的参数设置
  15. Temp=90;
  16. a=0.97;
  17. T_end=3;
  18. %用于跟踪遗传算法最优的变量和解值
  19. TraceY=zeros(MaxIteration,1);
  20. TraceX=zeros(MaxIteration,NumberofIndividuals);
  21. %用于跟踪模拟退火的最优变量和解值
  22. BestY=100;
  23. BestX=100*ones(1,2);

  24. %建立区域扫描区间
  25. FielD=[repmat(Precision,1,NumberofIndividuals);ub_lb;repmat([1;0;1;1],1,NumberofIndividuals)];
  26. %初始化染色体
  27. Chromsome=CRTBP(Population,NumberofIndividuals*Precision);
  28. %将二进制数转化为十进制数
  29. X=BS2RV(Chromsome,FielD);
  30. ObjV=ObjVfun(X);

  31. while Temp>=T_end
  32. Iteration=0;
  33. while Iteration<MaxIteration
  34. FitV=RANKING(ObjV);
  35. SelCh=SELECT('SUS',Chromsome,FitV,SelectionProbability);
  36. SelCh=RECOMBIN('XOVSP',SelCh,CrossoverProbability);
  37. SelCh=MUT(SelCh,MutationProbability);

  38. X=BS2RV(SelCh,FielD);
  39. ObjSelV=ObjVfun(X);
  40. [Chromsome,ObjV]=REINS(Chromsome,SelCh,1,1,ObjV,ObjSelV);
  41. X=BS2RV(Chromsome,FielD);

  42. Iteration=Iteration+1;
  43. [Fval,Index]=min(ObjV);
  44. TraceY(Iteration)=Fval;
  45. TraceX(Iteration,:)=X(Index,:);
  46. end

  47. [FvalY,I]=min(TraceY);
  48. if FvalY<=BestY
  49. BestY=[BestY FvalY];
  50. BestX=TraceX(I,:);
  51. elseif rand<exp(-(FvalY-BestY)/Temp)
  52. BestY=[BestY FvalY];
  53. BestX=TraceX(I,:);
  54. else
  55. BestY=[BestY BestY(end)];
  56. end
  57. Temp=Temp*a;
  58. end
  59. figure(1)
  60. set(figure(1),'color','w')
  61. hold on
  62. plot(2*(1:length(BestY)),BestY,'ro','markerfacecolor','r','markersize',8,'markeredgecolor','k')
  63. grid on
  64. legend('The BestY FvalPath')
  65. hold off
  66. X1=BestX(1);
  67. X2=BestX(2);
  68. disp(['The X1 value is',num2str(X1),' and The X2 value is',num2str(X2)])
  69. end

  70. %列向量目标函数
  71. function Obj=ObjVfun(X)
  72. N=size(X,1);
  73. Obj=zeros(N,1);
  74. for i=1:N
  75. Obj(i)=fun(X(i,:));
  76. end
  77. end

  78. %目标函数
  79. %y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 +
  80. %4*x(2)^2)*x(2)^2;
  81. %Rastrigin's function
  82. function y=fun(x)
  83. y = 20 + x(1)^2 + x(2)^2 - 10*(cos(2*pi*x(1))+cos(2*pi*x(2)));
  84. end
复制代码The X1 value is-4.7684e-006 and The X2 value is-4.7684e-006[/hide]


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-3331630-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
经管之家 人大经济论坛 大学 专业 手机版