标准遗传算法的matlab实现.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
$标准遗传算法 %优化函数为f=-(x-l厂2+4,其中,0=x=3 $编码长度为10位,编码精度为0. 0029 嗚种群规模设为40,遗传算J?分别为比例选择,单点交叉和单点变异。交叉槪率0?7,变异概率0?1 %最大进化代数为200代,保优操作。 main? m initial; global G; for G=l:200 crossover; mutation; adapting; keepbest; selection; end result; 嗚初始化函数,甌机形成规模为40初始种群 initial.m pop (40, 10)=0; best_individual (10)=0; %最优个体 adaptive (200) =0; %种群平均适应值 for i=l:40 for j=l:10 if rand0? 5 pop(i, j)=l; else pop(i, j)=0; end end end % pop clear i; clear j; 务交叉操作,概率为0.7,单点交叉 crossover? m for i=l:2:39 cross_P=rand; $随机产生?个数,以比较交叉概率 if cross_P0. 9 $交叉概率为0?9 cross_pos=round(10*rand);玄交叉位置为0为,若位置为0或9,则不辿〔 if or (cross_pos=0, cross_pos==9) continue; for j=cross_pos:10 temp二pop (i, j); pop(i, j)=pop(i+l, j); pop(i+l, j)=temp; end end end clear i; clear j; clear temp; clear cross_P; clear cross_pos; 賀变异操作,单点变异,变异概率为0.1 mutation? m for i=l:40 if rand0. 1 $通过变异槪率 M_pos=round(l0*rand); if Mj)os=0 %若变异位为0则无总义 pop(i, M_pos)=l-pop(i, M_pos); end end end clear M_pos; clear i; %计算适应值 adapting? m for i=l:40 adapt(i)=0; end for i=l:40 for j=l:10 if pop(i, j)==l adapt (i)=adapt (i)+2* (10-j); end end adapt (i)=adapt (i)*0. 0029; adapt (i)=-(adapt (i)-l). *2+4; end global adapt_best; global best_pos; adapt_best=0; %最佳个体 best_pos=0; %最佳个体在种群「11的位置 % adapt_ave=O; for i=l:40 adaptive(G) =adapt__avc(G)-t-adapt(i): i f adapt__bestadapt(i) adapt_bcst=adapt(i); best_pos=i; end end adaptive (G) =adapt_ave (G)/ 40; clear i: clear j; 制呆优操作 keepbest? m for i=l:10 best individual(i)=pop(best pos, i); end % The select oprator function selection? m ada_sum=0; ada^temp^O; r=0; i=0;j=0; for i=l:40 ada_sum=ada_sum+adapt(i): end for i=l:39 %选抒39次,M.n; -个个体留给历代最优解 r rand*ada_sum; %随机产生_个数 ada.temp=0: %初始化累加值为0 j=0; while(ada_tempr) j=j+l; ada_temp=ada_temp+adapt(j): end %退出循环时的j值即为被选择的个体序号 % if j40 % j=40; % end for k=l:10 new_pop(i, k)=pop(j, k); end %最优解复制 for i=l:10 new_pop(40, i)=best_individual (i); end 玄将选择产生的新群体复制给pop种群 for i=l:40 for j=l:10 pop(i, j)=new_pop(i, j); end end clear i; clear j; clear k; clear r; clear ada_tem

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档