• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: Matlab
  • 标签: matlab  GA  

资源简介

一个简单的遗传算法验证算例,可以直接运行,注释较为清晰

资源截图

代码片段和文件信息

%function GA_real_coded_min
% 本例为实数编码遗传算法求函数最小值的优化问题
% 目标函数为 J 
% 其中 x1 的范围为 [-1010] x2 的范围为 [-1010]
Size = 200;% 种群大小
CodeL = 2;%染色体数目

MinX(1) = -10;%染色体最小值
MaxX(1) = 10;%染色体最大值
MinX(2) = -10;%染色体最小值
MaxX(2) = 10;%染色体最大值

E(:1) = MinX(1) + (MaxX(1)-MinX(1))*rand(Size1);%随机产生点
E(:2) = MinX(2) + (MaxX(2)-MinX(2))*rand(Size1);%随机产生点

G = 100;% 迭代次数
% ---------------Start Running---------------------------------------------
for kg = 1 : G
    time(kg) = kg;%坐标轴
    %----------------------step 1: Evaluate BestJ-------------------------
    for i = 1 : Size
        xi = E(i:);%取一组染色体
        x1 = xi(1);%取该组第一个染色体
        x2 = xi(2);%取该组第二个染色体
        % 下面的 F 用于计算个体的适应度值,适应度函数根据目标函数进行了线性变换
        Ji(i) =x1^2+x2^2 ;% 计算目标值,越小越好
%               F(i) = 1/Ji;% 计算适应度值,越大越好
        BsJi(i) = min(Ji);%把最小值作为优选值
    end
    %[OrderJiIndexJi] = sort(BsJi);%升序排序
    %BestJ(kg) = OrderJi(1);%选择排序后的最小值作为最优值
    %Ji = BsJi + eps;% Avoiding deviding zero
    
    fi = Ji;
    [OrderfiIndexfi] = sort(fi); % Arranging fi small to bigger(升序排序)
    Bestfi = Orderfi(1);       % Let Bestfi=min(fi)
    BestS = E(Indexfi(1):);  % Let BestS=E(m)m is the Indexfi belongs to min(fi)
    bfi(kg) = Bestfi;
    
    kg
    BestS
    %--------------------Step 2:Select and Reproduct Operation------------
    fi_sum = sum(fi);
    fi_Size = (Orderfi/fi_sum)*Size;%确定选择的染色体数目
    
    fi_S = floor(fi_Size);%向下取整                 
    r = Size - sum(fi_S);
    
    Rest = fi_Size - fi_S;%剩下的染色体数目
    [RestValueIndex] = sort(Rest);%升序排序
    
    for 

评论

共有 条评论