zoukankan      html  css  js  c++  java
  • day1 普通遗传算法和粒子群算法

    普通遗传算法

    %-------------------------------- 普通遗传算法 -----------------------------
    
    %                           该程序实现了普通遗传算法
    
    %---------------------------------- 程序正文 -------------------------------
    function SGA
    %---------------------------------- 共性参数 -------------------------------
    NP=50;                             %种群规模
    Max_N=100;                       %限定代数
    Pc=ones(1,NP)*0.80;                %交叉概率
    Pm=ones(1,NP)*0.01;                %变异概率
    flagc=[0,Max_N];                   %收敛标志
    %---------------------------------- 个性参数 -------------------------------
    D=30;MinX=-100;MaxX=100;Error=1.0e-10;
    %---------------------------------- 初始化 ---------------------------------
    X=MinX+(MaxX-MinX)*rand(NP,D);
    F=fun(X);tF=1./F;
    [bestF,bestlow]=min(F);
    bestX=X(bestlow,:);
    %---------------------------------- 优化开始 -------------------------------
    for gen=1:1:Max_N
        time(gen)=gen;
        %------------------------------ 复制操作 -------------------------------
    tmpF=cumsum(tF/sum(tF));CX=X;
        for i=1:1:NP
            rnd =rand;
            for flag =1:1:NP
                if rnd<tmpF(flag);
                       X(i,:)=CX(flag,:),break;
                end
            end
        end
        %------------------------------ 种群交叉 -------------------------------
        Pc_rand =rand(1,NP);
        for i=1:2:(NP-1)
            if Pc(i)>Pc_rand(i)
                alfa=rand;
                X(i,:)=alfa*X(i+1,:)+(1-alfa)*X(i,:);
                X(i+1,:)=alfa*X(i,:)+(1-alfa)*X(i+1,:);
            end
        end 
        %------------------------------ 种群变异 -------------------------------
        Pm_rand=rand(NP,D);
        for i=1:1:NP
            for j=1:1:D
                if Pm(i)>Pm_rand(i,j)
                    X(i,j)=MinX+(MaxX-MinX)*rand;
                end
            end
        end
        X(NP,:)=bestX;
        %------------------------------ 算函数值 -------------------------------
        F=fun(X);
        %------------------------------ 种群评估 -------------------------------
        [bestF,bestlow]=min(F);
        bestX=X(bestlow,:);
        %--------------------------- 记录结果 ----------------------------------
        result(gen)=bestF;
        if (bestF<Error) & (flagc(1)==0)
            flagc(1)=1;flagc(2)=gen;
        end
        if mod(gen,1000)==0
            disp(['代数:',num2str(gen),'----最优:',num2str(bestF)]);
        end
    end
    plot(time,result)
    %----------------------------- 子函数1:目标函数 ----------------------------
    function F=fun(X)
    for i=1:1:length(X(:,1))
        F(i)=sum(X(i,:).^2);
    end
  • 相关阅读:
    [MyBatis]最简MyBatis工程
    eclipse中如何删除已经添加到 Web App Libraries 中引用的jar包
    day48_项目管理学习笔记
    项目流程之失败的案例
    项目流程之婚礼流程
    day47_Maven学习笔记
    快还要更快,让PHP 7 运行更加神速
    Linux服务器时间同步
    Win10系统开启Linux Bash命令行
    红帽RHOP 8 发布一条龙方案
  • 原文地址:https://www.cnblogs.com/qj696/p/14735347.html
Copyright © 2011-2022 走看看