网站地图 | RSS订阅 老铁博客 - 专业上海SEO上海SEO优化,分享网站优化知识,同时提供上海SEO服务。
你的位置:首页 » 前端脚本 » 正文

遗传算法的应用

2018-7-13 18:8:29 | 作者:老铁SEO | 0个评论 | 人浏览

遗传算法是一种非常有用的算法,可以用于求解最小值,TSP问题等等 对于算法基本思想,这里就不写了,毕竟到处都有,直接给出一个用遗传算法求解最小值的matlab代码(附有详细注释)

 % 罗森布罗克 ( Rosenbrock ) 函数为f(x1, x2)  = 100(x1^2 - x2)^2 + (1 - x1)^2 ,试用遗传算法计算此函数在区域 内的最大值。

 

clear all

clc

format long;  %设定数据显示格式

%初始化参数

T=100;  %进化代数

N=80;  % 群体规模

pm=0.05; pc=0.8;  %交叉变异概率

umax=2.048; umin=-2.048;  %参数取值范围

L=10;  %单个参数字串长度,总码串长度2L

bval=round(rand(N,2*L));  %初始种群

bestv=-inf;  %最优适应度初值

 

%迭代开始

for ii=1:T

%解码,计算适应度

for i=1:N

        y1=0;y2=0;

        for j=1:1:L

           y1=y1+bval(i,L-j+1)*2^(j-1);

        end

        x1=(umax-umin)*y1/(2^L-1)+umin;

for j=1:1:L

           y2=y2+bval(i,2*L-j+1)*2^(j-1);

        end

        x2=(umax-umin)*y2/(2^L-1)+umin;

        obj(i)=100*(x1*x1-x2).^2+(1-x1).^2; 

        %目标函数值 

        xx(i,:)=[x1,x2];

    end

func=obj;  %目标函数转换为适应度函数

p=func./sum(func);

q=cumsum(p);  %累加,形成部分和序列

[fmax,indmax]=max(func);  %求当代最佳个体

   if fmax>=bestv

      bestv=fmax;  %到目前为止最优适应度值

      bvalxx=bval(indmax,:);  %到目前为止最佳位串

 

      optxx=xx(indmax,:);  %到目前为止最优参数

   end   

   Bfit1(ii)=bestv;   % 存储每代的最优适应度

%%%%遗传操作开始,使用赌轮选择

 for i=1:(N-1)

    r=rand;  tmp=find(r<=q);  newbval(i,:)=bval(tmp(1),:);

 end 

  newbval(N,:)=bvalxx;  %最优保留

  bval=newbval;

%%%%单点交叉

for i=1:2:(N-1)

   cc=rand;

   if cc<pc

       point=ceil(rand*(2*L-1));  %取得一个1到2L-1的整数

       ch=bval(i,:);

       bval(i,point+1:2*L)=bval(i+1,point+1:2*L);

       bval(i+1,point+1:2*L)=ch(1,point+1:2*L);

   end

    

end   

bval(N,:)=bvalxx;  %最优保留

%%%%位点变异

mm=rand(N,2*L)<pm;  %N行2L列随机数,小于pm的元素变成逻辑数1,

%大于pm的元素变成逻辑数0

mm(N,:)=zeros(1,2*L);  %最后一行不变异,强制赋0

bval(mm)=1-bval(mm);  % 矩阵mm中每个逻辑数1指示bval中与其位置相同的

%元素x变为1-x,即0,1互换

end

%输出

plot(Bfit1);  % 绘制最优适应度进化曲线

bestv   %输出最优适应度值

optxx    %输出最优参数

 

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:遗传算法的应用  
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    相关推荐