基本遗传算法(GA)的算法原理、步骤、及Matlab实现

2023-05-16

算法原理

遗传算法可以用来求函数的极值。
(1)用二进制编码来离散自变量,码长根据离散精度来确定。码长为 log2[maxmin)/+1]
(2)交叉方法采用单点交叉
(3)变异是根据变异概率反转子代某个位的值
(4)选择策略采用轮盘赌策略,令 PPi=ij=1pi,PP0=0 ,其中 PPi 为累计概率, pi 为个体的选择概率,公式为: pi=fitness(xi)NPi=1fitness(xi) ,其中 fitnessxi 为个体的适应度,共轮转 NP 次,每次轮转时,产生随机数 r ,当PPi1<=r<PPi时选择个体 i <script type="math/tex" id="MathJax-Element-10">i</script>。

算法步骤

基本遗传算法的基本步骤是:

  1. 随机产生种群,
  2. 用轮盘赌策略确定个体的适应度,判断是否符合优化准则,若符合,输出最佳个体及其最优解,结束,否则,进行下一步
  3. 依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体被淘汰
  4. 按照一定的交叉概率和交叉方法,生成新的个体
  5. 按照一定的变异概率和变异方法,生成新的个体
  6. 由交叉和变异产生新一代种群,返回步骤2

算法的实现

%基本遗传算法,一维无约束优化
function [ xv,fv ] = mGA( fitness,a,b,NP,NG,Pc,Pm,eps )
% 待优化的目标函数:fitness
% 自变量下界:a
% 自变量上界:b
% 种群个体数:NP
% 最大进化代数:NG
% 杂交常数:Pc
% 变异常数:Pm
% 自变量离散精度:eps
% 目标函数取最大值是的自变量值:xv
% 目标函数的最小值:fv

L=ceil(log2((b-a)/eps+1)); %码长
x=zeros(NP,L);
for i=1:NP
    x(i,:)=Initial(L);
    fx(i)=fitness(Dec(a,b,x(i,:),L));
end
for k=1:NG
    sumfx=sun(fx);
    Px=fx/sumfx;
    PPx=0;
    PPx(1)=Px(1);
    for i=2:NP  %根据轮盘赌确定父亲
        PPx(i)=PPx(i-1)+PPx(i);
    end
    for i=1:NP
        sita=rand();
        for n=1:NP
            if sita <= PPx(n)
                SelFather = n;
                break;
            end
        end
        Selmother=floor(rand()*(NP-1))+1;   %随机选择母亲
        posCut=floor(rand()*(L-2))+1;   %随机确定交叉点
        r1=rand();
        if r1<=Pc
            nx(i,1:posCut)=x(SelFather,1:posCut);
            nx(I,(posCut+1):L)=x(Selmother,(posCut+1):L);
            r2=rand();
            if r2<=Pm    %变异
                posMut=round(rand()*(L-1)+1);
                nx(i,posMut)=~nx(i,posMut);
            end
        else
            nx(i,:)=x(SelFather,:);
        end
    end
    x=nx;
    for i=1:NP
        fx(i)=fitness(Dec(a,b,x(i,:),L);
    end
end
fv=-inf;
for i=1:NP
    fitx=fitness(Dec(a,b,x(i,:),L));
    if fitx > fv
        fv=fitx;
        xv=Dec(a,b,x(i,:),L);
    end
end
end

function result=Initial(length)     %初始化函数
    for i=1:length
        r=rand();
        result(i)=round(r);
    end
end
function y=Dec(a,b,x,L)     %二进制转十进制
    base=2.^((L-1):-1:0);
    y=dot(base,x);
    y=a+y*(b-1)/(2^L-1)'
end


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基本遗传算法(GA)的算法原理、步骤、及Matlab实现 的相关文章

  • 通过qemu-img命令将raw image转换成VMware虚拟硬盘vmdk

    为了在VMware中跑QNX系统 xff0c 我需要想办法将编译BSP生成的img文件固化到VMware的虚拟硬盘中去 xff0c 之前一直找不到方法 xff0c 到渐渐的只能用很笨的方法几次中专 将生成的img文件通过win32DiskI
  • WSL2 Ubuntu安装Qt(包括QtCreator)

    最近因为需要在Linux下使用qtcreator做一些界面开发的预研和学习 xff0c 主要是因为要交叉编译Qt 但又不想再使用虚拟机了 xff0c 真的太消耗内存了 于是就想着直接使用Windows10 下面的WSL2 怎么安装WSL2这
  • 架构师成长之路工具篇(1):markdown撰写文档

    今天笔者想说的工具就是markdown xff0c 正所谓工欲善其事必先利其器 xff0c 选择高效的工具自然能提升工作效率 笔者使用的markdown工具是 xff1a typora word太重 xff0c 太复杂 xff0c 在写文档
  • Artifact xxxx:Web exploded: Error during artifact deployment. See server log........

    从Git上拉取了一个新项目到idea xff0c 结果一运行就报错 xff0c 错误下图 看大家的解决方法基本都是重新部署Tomcat Maven或者项目 xff0c 还有什么jar包冲突要删除的 xff0c 齐齐试了一遍 xff0c 并没
  • 如何优雅的退出qemu虚拟环境

    在console环境下 xff0c 先 按 ctrl 43 a xff0c 释放之后再按 x 键 既可terminate qemu 注 xff1a 1 a 和 x 均为小写 2 必须先释放ctrl 43 a 之后 再按x键
  • xmake经验总结1:解决c++ future/promise抛出std::system_error的问题

    1 背景 1 1 场景 编译器 xff1a gcc 9 4 运行系统 xff1a Ubuntu 20 04 4 LTS xmake v2 6 7 场景 xff1a 其大致场景是使用c 43 43 的future promise功能 xff0
  • 神经网络实现手写数字识别(MNIST)

    一 缘起 原本想沿着 传统递归算法实现迷宫游戏 gt 遗传算法实现迷宫游戏 gt 神经网络实现迷宫游戏的思路 xff0c 在本篇当中也写如何使用神经网络实现迷宫的 xff0c 但是研究了一下 xff0c 感觉有些麻烦不太好弄 xff0c 所
  • 从高考到吃“软”饭

    上大学之前 xff0c 我是一个连本科和专科都分不清的农村小娃 那时的我天真的以为 xff0c 专科就是教授比较专业的知识 xff0c 而本科就是学得比较广而不深 上大学之后 xff0c 我算是开眼界了 xff0c 各种社团真是百花齐放 对
  • 解决visio对象在word中显示不全的问题

    作为一个软件工程师 xff0c 编写技术文档是常有的事情 xff0c 使用visio绘制各种图形 如 xff0c 流程图 xff0c 结构图 xff0c 框架图 xff0c 状态图等等 也是再正常不过的事情 如果我们在word中撰写文档时
  • git submodule使用以及注意事项

    一 背景 在平时的软件开发过程中常常会有这样的场景 xff0c 自己负责的某个模块会依赖其他模块或者第三方的library 这时你自己的模块是一个独立的代码仓库 xff0c 你想要实现这样一种功能 xff0c 当你从你的模块的代码仓库里把代
  • Webpack5 - 基本使用

    一 webpack有何作用 webpack是一个Javascript应用程序的模块打包器 它可以递归地构建一个应用程序的模块依赖关系图 xff0c 然后将所有模块打包在一起 为什么需要模块打包器 xff1a 现在的应用程序模块文件很多 xf
  • Vue.js - VueRouter的Hash与History模式 / 手写VueRouter

    一 Hash与History模式 Hash模式History模式url地址外观http localhost 8081 abouthttp localhost 8080 about原理基于锚点 xff0c 监听锚点变化时触发的onhashch
  • Vue.js - Vue.js响应式原理(1/2)

    一 数据驱动 数据响应式 xff1a 数据改变 xff0c 则视图改变 xff0c 避免频繁的Dom操作 xff0c 提高运行效率 双向绑定 xff1a 数据改变 xff0c 则视图改变 xff1b 视图改变 xff0c 则数据也随之改变
  • Vue.js - 模拟Vue.js响应式原理(2/2)

    项目仓库 xff1a https gitee com big right right vue responsive tree master L8 一 类的说明 Vue类 xff1a 保存传入的选项数据 xff0c 把选项data中的成员注入
  • OpenFlow Switch Specification 1.3.0 (三)

    六 OpenFlow 安全通道 xff08 OpenFlow Channel xff09 OpenFlow 通道是连接每一个交换到控制器的接口 通过这个接口 xff0c 控制器配置和管理交换机 xff0c 从交换机接收事件 xff0c 向交
  • MATLAB并行加速方法

    用MATLAB运行计算任务时 xff0c 有时会遇到程序中有很多重复计算部分 xff0c 多次循环中 xff0c 每一次的计算之间无相互依赖 xff08 即后一次的计算不需要使用到前一次的计算结果 xff09 xff0c 可能仅改变了输入参
  • 一名本科毕业女程序员的2013总结

    姓名 xff1a XXX 性别 xff1a 女 学历 xff1a 大学本科 毕业时间 xff1a 2013 06 31 参加工作 xff1a 2013 07 03 单位 xff1a 北京 某国企下属单位 职位 xff1a 程序员 1 初始
  • .NET用NCO连接SAP RFC---写数据到SAP

    1 环境 xff1a a win7 43 64位操作系统 b VS2012 c nco3 0 xff08 64bit 下载网址 xff1a http www dllbang com dll sapnco dll xff09 xff0c d
  • .NET Framwork,C#入门开发教程,零基础必看

    初识 NET Framwork和开发过程 一 什么是 NET Framework NETFramework是一个开发平台 xff0c 可以在其上使用多种语言开发程序 xff1a 如C xff0c VB xff0c C 43 43 xff08
  • 如何清除IIS缓存

    问题描述 xff1a 在IIS的默认网站下创建了一个虚拟目录名A xff0c 然后删除这个虚拟目录 后来需要重新创建一个同名虚拟目录 xff0c 映射的还是原来的项目文件 xff0c 只是项目文件的物理路径发生了变化 xff0c 这个新虚拟

随机推荐