请选择 进入手机版 | 继续访问电脑版
楼主: fantuanxiaot
13685 35

[源码分享] [原创]基于遗传算法模拟退火举例   [推广有奖]

Ψ▄┳一大卫卍卐席尔瓦

大师

8%

还不是VIP/贵宾

-

威望
7
论坛币
-234475 个
通用积分
124.0224
学术水平
3783 点
热心指数
3819 点
信用等级
3454 点
经验
150207 点
帖子
7546
精华
32
在线时间
1327 小时
注册时间
2013-2-3
最后登录
2022-2-24

初级学术勋章 初级热心勋章 中级热心勋章 中级学术勋章 初级信用勋章 中级信用勋章 高级热心勋章 高级学术勋章 特级学术勋章 特级热心勋章 高级信用勋章 特级信用勋章

fantuanxiaot 发表于 2014-11-5 00:18:44 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
一,基于遗传算法的模拟退火工具箱应用。用模拟退火工具箱试了试一个例子,发现全局收敛非常不稳定,总会收敛到局部,因子加入遗传算法就好很多了,以下是基于谢菲尔德大学的遗传算法的模拟退火算法,对MATLAB的模拟退火工具箱进行改进。

本帖隐藏的内容


  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.    
  27.     X=BS2RV(SelCh,FielD);
  28.     ObjSelV=ObjVfun(X);
  29.    
  30.     [Chromsome,ObjV]=REINS(Chromsome,SelCh,1,1,ObjV,ObjSelV);
  31.     X=BS2RV(Chromsome,FielD);
  32.    
  33.     Iteration=Iteration+1;
  34.     [fval,index]=min(ObjV);
  35.     traceY(Iteration)=fval;
  36.     traceX(Iteration,:)=X(index,:);
  37. end
  38. figure(1)
  39. set(figure(1),'color','w')
  40. hold on
  41. plot(traceY,'ro','markerfacecolor','r','markersize',12,'markeredgecolor','k')
  42. grid on
  43. legend('The Best FvalPath')
  44. hold off
  45. YY=traceY(end);
  46. disp(['The Best Fval= ',num2str(YY)])
  47. end

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

  63. %  目标函数
  64. %  y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 +
  65. %  4*x(2)^2)*x(2)^2;
  66. %  Rastrigin's function
  67. function y=fun(x)
  68. y = 20 + x(1)^2 + x(2)^2 - 10*(cos(2*pi*x(1))+cos(2*pi*x(2)));
  69. end
复制代码

最终:The Best Fval= 2.0843e-007

1.jpg


二,基于遗传算法的模拟退火算法例子应用
  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.         
  39.         X=BS2RV(SelCh,FielD);
  40.         ObjSelV=ObjVfun(X);
  41.         [Chromsome,ObjV]=REINS(Chromsome,SelCh,1,1,ObjV,ObjSelV);
  42.         X=BS2RV(Chromsome,FielD);
  43.         
  44.         Iteration=Iteration+1;
  45.         [Fval,Index]=min(ObjV);
  46.         TraceY(Iteration)=Fval;
  47.         TraceX(Iteration,:)=X(Index,:);
  48.     end
  49.    
  50.     [FvalY,I]=min(TraceY);
  51.     if FvalY<=BestY
  52.         BestY=[BestY FvalY];
  53.         BestX=TraceX(I,:);
  54.     elseif rand<exp(-(FvalY-BestY)/Temp)
  55.         BestY=[BestY FvalY];
  56.         BestX=TraceX(I,:);
  57.     else
  58.         BestY=[BestY BestY(end)];
  59.     end
  60.     Temp=Temp*a;
  61. end
  62. figure(1)
  63. set(figure(1),'color','w')
  64. hold on
  65. plot(2*(1:length(BestY)),BestY,'ro','markerfacecolor','r','markersize',8,'markeredgecolor','k')
  66. grid on
  67. legend('The BestY FvalPath')
  68. hold off
  69. X1=BestX(1);
  70. X2=BestX(2);        
  71. disp(['The X1 value is',num2str(X1),' and The X2 value is',num2str(X2)])   
  72. end

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

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



QQ截图20141105101840.jpg








二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:模拟退火 遗传算法 Individuals Probability Individual 谢菲尔德 工具箱 大学

回帖推荐

dst1213 发表于20楼  查看完整内容

必须顶一个 谢谢分享

zbin7451f 发表于2楼  查看完整内容

楼主这么好的贴居然没人顶!

14HBjpttxs 发表于16楼  查看完整内容

同感!

wuhui1018 发表于15楼  查看完整内容

楼主建议你这代码在一些主要的地方加一些注释,这样大家学习起业会比较好.

老虎葵花 发表于10楼  查看完整内容

感谢分享!顶大神!

tmdxyz 发表于12楼  查看完整内容

不明觉厉

hsy5012 发表于6楼  查看完整内容

看看都是些什么!

weitingkoala 发表于5楼  查看完整内容

腻害腻害
已有 6 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
狂热的爱好者 + 100 精彩帖子
crystal8832 + 1 + 1 + 1 精彩帖子
离歌レ笑 + 100 + 5 + 5 + 5 精彩帖子
faruto + 5 + 5 + 5 精彩帖子
chenyi112982 + 100 + 100 + 5 + 5 + 5 谢谢小T无私的分享,好文章!
zbin7451f + 100 + 5 + 5 + 5 对论坛有贡献

总评分: 经验 + 300  论坛币 + 200  学术水平 + 21  热心指数 + 21  信用等级 + 21   查看全部评分

本帖被以下文库推荐

zbin7451f 发表于 2014-11-5 05:50:12 |显示全部楼层 |坛友微信交流群
楼主这么好的贴居然没人顶!
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 1 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 1  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

johnsenzfs 发表于 2014-11-5 09:13:06 来自手机 |显示全部楼层 |坛友微信交流群
fantuanxiaot 发表于 2014-11-5 00:18
模拟退火工具箱试了试一个例子,发现全局收敛非常不稳定,总会收敛到局部,因子加入遗传算法就好很多了,以 ...
没代码呀。。。

使用道具

fantuanxiaot 发表于 2014-11-5 09:14:19 |显示全部楼层 |坛友微信交流群
johnsenzfs 发表于 2014-11-5 09:13
没代码呀。。。
原来是来自手机
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
zbin7451f + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

weitingkoala 发表于 2014-11-5 11:39:05 |显示全部楼层 |坛友微信交流群
腻害腻害
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 2 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 2  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

hsy5012 发表于 2014-11-5 18:25:29 |显示全部楼层 |坛友微信交流群
看看都是些什么!

使用道具

fjlhr 在职认证  发表于 2014-11-5 18:53:32 |显示全部楼层 |坛友微信交流群
好厉害的样子!

使用道具

wanchunyang1992 学生认证  发表于 2014-11-5 19:04:55 |显示全部楼层 |坛友微信交流群
看不懂???

使用道具

zwzhai 发表于 2014-11-5 19:37:19 |显示全部楼层 |坛友微信交流群
路过。。。。。。。。。。。。。。。。。。。

使用道具

老虎葵花 发表于 2014-11-5 20:11:12 |显示全部楼层 |坛友微信交流群
感谢分享!顶大神!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-18 10:40