遗传算法理解(通俗易懂)

2023-11-17

最近研究模糊识别的一些经典算法,为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各个主要执行步骤。
  
     例:求下述二元函数的最大值:

      

    (1) 个体编码
           遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种
       符号串。本题中,用无符号二进制整数来表示。
           因 x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它
       们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可
       行解。
           例如,基因型 X=101110 所对应的表现型是:x=[ 5,6 ]。
           个体的表现型x和基因型X之间可通过编码和解码程序相互转换。

(2) 初始群体的产生
          遗传算法是对群体进行的进化操作,需要给其淮备一些表示起始搜索点的初始
      群体数据。
         本例中,群体规模的大小取为4,即群体由4个个体组成,每个个体可通过随机
     方法产生。
          如:011101,101011,011100,111001
         
 (3) 适应度汁算
          遗传算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其遗传
       机会的大小。
          本例中,目标函数总取非负值,并且是以求函数最大值为优化目标,故可直接
       利用目标函数值作为个体的适应度。

 (4)  选择运算
          选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。一般要求适应度较高的个体将有更多的机会遗传到下一代
      群体中。                   
本例中,我们采用与适应度成正比的概率来确定各个个体复制到下一代群体中
     的数量。其具体操作过程是:
         •  先计算出群体中所有个体的适应度的总和  fi  ( i=1.2,…,M );
         •  其次计算出每个个体的相对适应度的大小 fi / fi ,它即为每个个体被遗传
             到下一代群体中的概率,
         •  每个概率值组成一个区域,全部概率值之和为1;
         •  最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区
             域内来确定各个个体被选中的次数。

(5)  交叉运算
        交叉运算是遗传算法中产生新个体的主要操作过程,它以某一概率相互交换某
    两个个体之间的部分染色体。
       本例采用单点交叉的方法,其具体操作过程是:
       • 先对群体进行随机配对;
       • 其次随机设置交叉点位置;
       • 最后再相互交换配对染色体之间的部分基因。

(6)  变异运算
         变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进
     行改变,它也是产生新个体的一种操作方法。
        本例中,我们采用基本位变异的方法来进行变异运算,其具体操作过程是:
        • 首先确定出各个个体的基因变异位置,下表所示为随机产生的变异点位置,
          其中的数字表示变异点设置在该基因座处;
        • 然后依照某一概率将变异点的原有基因值取反。

对群体P(t)进行一轮选择、交叉、变异运算之后可得到新一代的群体p(t+1)。

从上表中可以看出,群体经过一代进化之后,其适应度的最大值、平均值都得
    到了明显的改进。事实上,这里已经找到了最佳个体“111111”。       
[注意]      
        需要说明的是,表中有些栏的数据是随机产生的。这里为了更好地说明问题,
   我们特意选择了一些较好的数值以便能够得到较好的结果,而在实际运算过程中
   有可能需要一定的循环次数才能达到这个最优结果。


PS:一个matlab中实现GA算法的实例:

function [xv,fv] = myGA(fitness, a, b, NP, NG, Pc, Pm, eps)
%	用遗传算法求解一维无约束优化问题
%
%	待优化的目标函数 fitness
%	自变量下界 a 
%	自变量上界 b 
%	种群个体数 NP
%	最大进化代数 NG
%	杂交概率 Pc
%	变异概率 Pm
%	自变量离散精度 eps
%	目标变量取最大值时自变量的值: xm
%	目标函数的最大值 fv
%
%	Example:
%		function F = fitness(x)
%		F = x^3-60*x^2+900*x+100;   
%   -------------------------------
%		[xv,fv] = myGA(@fitness,0, 30, 50, 100, 0.9, 0.04, 0.01);
%	--------------------------------------------------
%		xv = 10
%		fv = 4100
%
%	本程序在《精通MATLAB最优化计算》页315程序的基础上修改

L = ceil(log2((b-a) / eps + 1));				%编码长度
x = zeros(NP, L);								%种群
nx = zeros(size(x));							%滚动数组
fx = zeros(NP, 1);								%适应度
for i = 1:NP
	x(i,:) = Initial(L);
end

fv = -inf;

for k = 1 : NG
	for i = 1 : NP
		fx(i) = fitness(Dec(a, b, x(i, :), L));
		if (fx(i) > fv)
			xv = Dec(a, b, x(i, :), L);
			fv = fx(i);
		end
	end
	
	sumfx = sum(fx);
	Px = fx / sumfx;
	
	PPx = zeros(NP, 1);
	PPx(1) = Px(1);									%概率叠加
	for i = 2 : NP
		PPx(i) = PPx(i - 1) + Px(i);
	end
	
	selFather = 0;
	for i = 1 : NP
		sita = rand();
		for j = 1 : NP
			if (sita <= PPx(j))
				selFather = j;						%使用轮盘赌法进行选择父亲
				break;
			end
		end
		
		selMother = floor(rand() * NP) + 1;			%母亲随机选择
		posCut = floor(rand() * (L - 1)) + 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 = floor(rand() * L) + 1;
				nx(i, posMut) = ~nx(i, posMut);
			end
		else
			nx(i, :) = x(selFather, :);
		end
	end
	
	x = nx;
end

%--------------------------------------------------------
%	初始化种群
function  result = Initial(length)
result = zeros(size(length()));
for i = 1 : length
	r = rand();
	result(i) = round(r);
end

%----------------------------------------------------------
%	编码转换
function y = Dec(a, b, x, L)
base = 2 .^ ((L - 1) : -1: 0);
y = dot(base, x);
y = a + y * (b - a) / (2 ^ L - 1);


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

遗传算法理解(通俗易懂) 的相关文章

  • 如何将Matlab代码库与Android集成?

    我有一个算法和 MATLAB 中的一些其他代码 我想在我的 Android 应用程序中使用它 我怎样才能做到这一点 我可以从 MATLAB 制作 jar 文件以便与 Android 一起使用吗 我必须做点别的事吗 如果您还有其他产品 适用于
  • 如何使用Matlab提高PSD的分辨率

    我有音频信号 我用 Matlab 读取该信号 并使用 pwelch 获取其 PSD 这是我正在使用的代码 x Fs audioread audioFile wav x x 1 mono xPSD f pwelch x hamming 512
  • MATLAB 中的抗锯齿线和标记

    您好 我在 MATLAB 中有一张图像 我希望这条线是平滑的 看看从 0 4 到 0 8 的线 这太可怕了 当在图中使用 LineSmoothing on 运算符时 我得到了这个 我在线条上做得很好 但它也使标记变得平滑 而且它们太可怕了
  • 如何建立数据流挖掘的滑动窗口模型?

    我们遇到的情况是 流 来自传感器的数据或服务器上的点击流数据 采用滑动窗口算法 我们必须将最后 例如 500 个数据样本存储在内存中 然后 这些样本用于创建直方图 聚合并捕获有关输入数据流中异常的信息 请告诉我如何制作这样的滑动窗 如果您询
  • 如何在 R 或 MATLAB 中为散点图创建阴影误差条“框”

    我想在 R 或 MATLAB 中创建一个简单的散点图 涉及两个变量 x 和 y 它们有与之相关的错误 epsilon x 和 epsilon y 然而 我不是添加误差线 而是希望在每个 x y 对周围创建一个 阴影框 其中框的高度范围从 y
  • 将单元格转换为双精度

    gt gt C 1 2 CF 2 C 1 2 CF 2 gt gt whos C Name Size Bytes Class Attributes C 2x2 478 cell 我怎样才能转换C into double以便 gt gt C
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 如何获取活动对象 MATLAB GUI 的句柄

    我正在尝试使用 MATLAB GUI 创建日历 我有两个Edit Text对象 edittext1 and edittext2 我想做这个 我把光标放在edittext1然后在日历中选择日期 它会进入文本字段edittext1 同样对于ed
  • 白色像素簇提取

    我正在研究指纹毛孔提取项目 并陷入毛孔 白色像素簇 提取的最后阶段 我有两个输出图像 我们可以从中获取毛孔 但不知道该怎么做 这两个图像的尺寸不同 image1 的尺寸为 240 320 image2 的尺寸为 230 310 这是我的图像
  • 如何从绘图处理程序中绘图?

    我有绘图的处理程序或图形的处理程序 例子 h plot 1 0 2 10 xx get h xx DisplayName Annotation 1x1 handle Color 0 0 1 LineStyle LineWidth 0 500
  • 为什么 MATLAB 本机函数 cov(协方差矩阵计算)使用与我预期不同的除数?

    给定一个 M 维和 N 个样本的数据矩阵数据 例如 data randn N M 我可以计算协方差矩阵 data mu data ones N 1 mean data cov matrix data mu data mu N 如果我使用原生
  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 在 matlab 代码中使用 dll 文件

    我需要使用 Matlab 中由 dll 文件定义的函数 我有一个例子 那个家伙将 dll 转换为 mexw32 文件 但我知道我是如何做到这一点的 我尝试使用加载库但它没有创建任何文件 我怎样才能做到这一点 loadlibrary http
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja

随机推荐

  • 《React后台管理系统实战:七》用户管理:获取/添加/修改/删除用户、菜单权限管理

    一 基础页面 1 请求数据 数据 http localhost 5000 manage user list status 0 data users id 5e7d7953d4a98d1a1c1cf00a username jim passw
  • 好爽啊

    爽你妹 转载于 https www cnblogs com zhangxiangning p 10303124 html
  • Python手册(Machine Learning)--statsmodels(多变量统计)

    MultivariateStatistics 多变量统计 主成分分析 Principal Component Analysis 因子分析 Factor Analysis 典型相关 Canonical Correlation 多元方差分析 M
  • Muduo库源码剖析(十)——总结

    Muduo网络库的核心代码模块 Channel 封装fd的对应事件变化情况 和关注事件 fd events revents callbacks 两种channel listenfd acceptorChannel connfd connec
  • 和平精英体验服显示服务器未影响,《和平精英》体验服申请条件是什么?一定要注意这两点!...

    和平精英 体验服是很多玩家了解游戏新版本内容的一个重要窗口 很多新玩法和新地图都会现在体验服中上线测试以后才会在正式服务器中上线 不过很多玩家对于如何才能进入体验服游戏 还根本一无所知 那这次小编就来和大家好好聊聊这个问题 如果感兴趣的话
  • VS报错E1696 无法打开类似于stdio.h等头文件的解决办法

    VS报错E1696 无法打开类似于stdio h等头文件的解决办法 我的VS版本是2022的 然后我今天把同事在VS2017上的code 一个完整的解决方案 从svn上拿过来 结果发现 一大堆E1696的错误 主要表现就是项目中includ
  • Working mode of block password

    本文授权自 MagicBoy Working mode of block password Network security 1 电子密码本ECB electronic codebook mode 3 密码反馈CFB cipher feed
  • Weex实现富文本展示

    Weex默认不支持富文本展示 需要我们手动实现 已知的方式有两种 第一种方式 使用Weex Ui中的wxc rich text组件 它提供了丰富的功能样式 但是其局限性也是显而易见的 不能直接识别h5样式 第二种方式 第一步 自定义组件 请
  • 幼儿园html网页代码,html幼儿园网站页面div+css

    实例简介 幼儿园网站全站代码 使用div css技术 可参考下载 实例截图 核心代码 schoolyr schoolyr baojian html css alixixi css baojian css css css jiaoxue cs
  • python 注解, 装饰器@ 详解

    目录 1 组合数据类型注解方式 2 自定义类注解 3 参数是函数的注解 4 变量注解 5 装饰器 python注解包含 组合数据类型注解 自定义类注解 变量注解 参数是函数的注解等 python的注解 能够让python 像java C语言
  • qt creator debug无法调试 进入 qt源码

    qt creator无法调试qt源码的问题 如果自己写的代码无法调试请移步这里 qt下载地址 https download qt io archive qt https download qt io new archive qt 正常来讲
  • .net 5 开发 linux 桌面应用_Electron跨平台桌面应用开发工具

    一 简介 Electron是github发布的跨平台桌面应用开发工具 支持Web技术开发桌面应用 其本身是基于C 开发的 GUI核心来自于Chrome 而JavaScript引擎使用v8 简单来说 Electron相当于一个浏览器的外壳 可
  • Jupyter-02-numpy:创建ndarray 数组

    创建ndarray 数组的方法 import numpy as np 创建ndarray 数组需要调用numpy库 用列表创建 创建一维数组 arr1 np array 1 2 3 4 arr1 s a b c np array s 用元组
  • Scala中的元祖Tuple

    Scala中元祖是一组任意数据类型的集合 与列表一样 元组也是不可变的 但与列表不同的是元组可以包含不同类型的元素 数组 元祖 定义 元素中数据类型相同 元素不同数据类型 声明 val arr Array 1 2 3 var tuple 1
  • 华为服务器系统故障,服务器系统故障

    服务器系统故障 内容精选 换一换 需在所有云服务器上安装Data Provider软件 SAP技术支持人员通过该软件收集云服务器所在的平台信息 以便在SAP系统故障 性能下降时进行定位和分析 SAP NetWeaver所在的服务器上 在创建
  • 导致java.lang.UnsatisfiedLinkError错误的一种解决办法

    欢迎转载请注明出处http blog csdn net ning gg article details 53641254 在程序中加入so文件导致java lang UnsatisfiedLinkError错误的一种解决办法 可能这个解决办
  • 学Java需要的英语水平以及关键词汇总

    还是需要英语的 但是是编程英语 和从小到大学的 英语 不是一回事 Java语言的输出语句 System out print 你好 此处的 System表示 系统 out表示 在 外面 print表示 打印 每一个单词之间使用 英文输入法的点
  • streamlit——搭建学生评分网站(告别问卷星)

    streamlit搭建多人评分网站 文章目录 streamlit搭建多人评分网站 一 引言 二 数据准备 三 streamlit代码 四 数据合并代码 一 引言 当需要对班级内多人进行打分时 为了不使用问卷星等平台进行评分 使用pandas
  • AJAX核心基础知识之倒计时抢购案例

    倒计时 分析 两个时间 目标时间 当前时间 目标时间 当前时间 计算时间差中包含多少小时 多少分钟 多少秒 每间隔一秒钟重新获取当前时间 定时器 重算时间 核心问题 1当前时间不可以获取客户端本地的 本地的时间客户可以肆意修改 获取服务器的
  • 遗传算法理解(通俗易懂)

    最近研究模糊识别的一些经典算法 为更好地理解遗传算法的运算过程 下面用手工计算来简单地模拟遗传算法的各个主要执行步骤 例 求下述二元函数的最大值 1 个体编码 遗传算法的运算对象是表示个体的符号串 所以必须把变量 x1 x2 编码为一种 符