• 大小: 6KB
    文件类型: .tar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: Matlab
  • 标签:

资源简介

一个遗传算法的实例,用matlab写的,包含画图,求解一元函数的最大值。

资源截图

代码片段和文件信息

%%  题目: 求f(x) =  x+ 10sin(5x) +7cos(4x)的最大值 ,x是[010]

%%  初始化参数
clc ;
clear all;
NP=50; %种群数量
L=20 ;  %基因位数
Pc=0.8;
Pm=0.1;
G = 100; % 迭代次数
Xs=10; %上限
Xx=0;  %下限  
f=randi([01]NPL);  %随机获得初始种群矩阵

%% 遗传算法循环
for k =1 : G  %迭代次数
   %% 将二进制解码为定义域范围内十进制
   for i=1:NP
     U =f(i:);  
     m=0;
     for j=1:L
         m=U(j)*2^(j-1)+m;
        %disp(m);
     end  
     x(i)=Xx+m*(Xs-Xx)/(2^L-1);  %为[010]内的实数
     Fit(i) = func1(x(i));  %每个个体的适应度,即每个x对应的函数值
   end
  %% 最优和最劣质个体
   maxFit = max(Fit);  %求Fit矩阵中的最大值
   minFit = min(Fit);   %求Fit矩阵中的最小值
   rr=find(Fit==maxFit);   %找出Fit数组中==maxFit的那个值的下标,给rr
   % disp(rr);
   fBest = f(rr(11)  :); %历代最优个体
   % disp(rr(11));
   xBest=x(rr(11)); %历代最优个体所对应的x值
   Fit =(Fit-minFit) / (maxFit - minFit) ; %归一化适应度值,是一个权重,即:各个适应度值与最大适应度值得差距,用概率表现出来
   %% 轮盘赌选择复制      
   sum_Fit = sum(Fit) ;
   fitvalue = Fit ./sum_Fit ;   %选择概率,将Fit的每个元素除以sum_Fit
   fitvalue = cumsum(fitvalue) ; %累积概率
   ms = sort (rand(NP1)) ;   %产生NP个0~1之间的随机数,并且升序排序
   fiti =1;
   newi=1;
   while newi<=NP  %轮盘开始转,一共转NP次
       if(ms(newi)           nf(newi:) = f(fiti  :) ; % 把个体给新的种群
           newi = newi + 1;
       else
           fiti=fiti +1;
       end
   end
   %%  交叉_均匀交叉
   for i = 1:2:NP   % 从1到NP ,每隔两个
       p = rand ;   
       if p           q=randi([01]1L);
           for j =1:L
               if q(j) == 1;
                   temp=nf(i+1j);
                   nf(i+1j) = nf(ij);
                   nf(ij) = temp;
               end
           end
       end
   end
   %% 变异
   i = 1;
   while i<=round(NP*Pc)   % 四舍五入
       h=randi([1NP]11) ; %随机选取一个需要变异的染色体
       for j = 1:round(L*Pc)
           g = randi([120]11);%随机选取需要变异的基因数
           %g=rand;
           nf(hg) = ~ nf(hg);
       end
       i=i+1;
   end
   f = nf ;                 %把新的种群赋值给f ,以方便下一轮循环
   f (1:) =fBest ;      % 保留最优个体在新种群中
   trace(k)=maxFit ;%历代最优适应度
end
xBest ;%最优个体
%% 画图
figure 
plot(trace)
xlabel(‘迭代次数‘)
ylabel(‘目标函数值‘)
title(‘适应度进化曲线‘)









评论

共有 条评论

相关资源