【智能算法】遗传算法原理及示例

news2024/12/29 10:58:46

目录:遗传算法

  • 一、流程图
  • 二、遗传编码
  • 三、适应度函数
    • 3.1 常见的适应度函数
      • 3.1.1 原始适应度函数
      • 3.1.2 标准适应度函数
  • 四、基本遗传操作
    • 4.1 选择操作
      • 4.1.1 比例选择
      • 4.1.2 轮盘赌选择
    • 4.2 交叉操作
      • 4.2.1 二进制交叉
      • 4.2.2 单点交叉
      • 4.2.3 两点交叉
      • 4.2.4 多点交叉
    • 4.3 变异操作
      • 4.3.1 二进制变异
  • 三、遗传算法示例
    • 3.1 编码
    • 3.2 生成初始种群
    • 3.3 适应度函数
    • 3.4 选择操作
    • 3.5 交叉
    • 3.6 变异

一、流程图

在这里插入图片描述

二、遗传编码

常用的遗传编码算法有霍兰德二进制码、格雷码、实数编码和字符编码等。我们这里只讲解二进制编码:

二进制编码是将原问题的结构变换为染色体的位串结构。在二进制编码中,首先要确定二进制字符串的长度 ,该长度与变量的定义域和所求问题的计算精度有关。

在这里插入图片描述

三、适应度函数

适应度函数是一个用于对个体的适应性进行度量的函数。通常,一个个体的适应度值越大,它被遗传到下一代种群中的概率也就越大。

3.1 常见的适应度函数

在遗传算吗中,有许多计算适应度的方法,其中最常用的适应度函数有以下两种:

3.1.1 原始适应度函数

在这里插入图片描述

采用原始适应度函数的优点是能够直接反映出待求解问题的最初求解目标,其缺点是有可能出现适应度值为负的情况。

3.1.2 标准适应度函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、基本遗传操作

遗传算法中的基本遗传操作包括选择、交叉和变异 种,而每种操作又包括多种不同的方法,下面分别对它们进行介绍。

4.1 选择操作

选择操作是指根据选择概率按照某种策略从当前种群中挑选出一定数目的个体,使它们能够有更多的机会被遗传到下一代中。常用的选择策略可分为比例选择、排序选择和竞技选择三种类型。

4.1.1 比例选择

比例选择方法的基本思想是:各个个体被选中的概率与其适应度大小成正比。

常用的比例选择策略包括轮盘赌选择和繁殖池选择。

4.1.2 轮盘赌选择

轮盘赌选择法又被称为转盘赌选择法或轮盘选择法。在这种方法中,个体被选中的概率取决于该个体的相对适应度。而相对适应度的定义为:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从统计角度看,个体的适应度值越大,其对应的扇区的面积越大,被选中的可能性也越大。这种方法有点类似于发放奖品使用的轮盘,并带有某种赌博的意思,因此亦被称为轮盘赌选择。

4.2 交叉操作

交叉操作是指按照某种方式对选择的父代个体的染色体的部分基因进行交配重组,从而形成新的个体。交配重组是自然界中生物遗传进化的一个主要环节,也是遗传算法中产生新的个体的最主要方法。根据个体编码方法的不同,遗传算法中的交叉操作可分为二进制交叉和实值交叉两种类型。

4.2.1 二进制交叉

二进制交叉是指二进制编码情况下所采用的交叉操作,它主要包括单点交叉、两点交叉、多点交叉和均匀交叉等方法。

4.2.2 单点交叉

单点交叉也称简单交叉,它是先在两个父代个体的编码串中随机设定一个交叉点,然后对这两个父代个体交叉点前面或后面部分的基因进行交换,并生成子代中的两个新的个体。假设两个父代的个体串分别是:

在这里插入图片描述

在这里插入图片描述

4.2.3 两点交叉

两点交叉是指先在两个父代个体的编码串中随机设定两个交叉点,然后再按这两个交叉点进行部分基因交换,生成子代中的两个新的个体。

假设两个父代的个体串分别是:

在这里插入图片描述
在这里插入图片描述

4.2.4 多点交叉

多点交叉是指先随机生成多个交叉点,然后再按这些交叉点分段地进行部分基因交换,生成子代中的两个新的个体。

这里不再赘述!

4.3 变异操作

变异是指对选中个体的染色体中的某些基因进行变动,以形成新的个体。变异也是生物遗传和自然进化中的一种基本现象,它可增强种群的多样性。遗传算法中的变异操作增加了算法的局部随机搜索能力,从而可以维持种群的多样性。根据个体编码方式的不同,变异操作可分为二进制变异和实值变异两种类型。

4.3.1 二进制变异

当个体的染色体采用二进制编码表示时,其变异操作应采用二进制变异方法。该变异方法是先随机地产生一个变异位,然后将该变异位置上的基因值由“0”变为“1”,或由“1”变为“0”,产生一个新的个体。

例:设变异前的个体为 0 0 1 1 0 1,若随机产生的变异位置是2,则该个体的第2位由“0”变为“1”。

在这里插入图片描述

三、遗传算法示例

在这里插入图片描述
按照遗传算法,求求解过程如下:

3.1 编码

在这里插入图片描述

3.2 生成初始种群

在这里插入图片描述

3.3 适应度函数

遗传算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其遗传机会的大小。

要计算个体的适应度,首先应该定义适应度函数。由于本例是求 f ( x ) f(x) f(x)的最大值,因此可直接用 f ( x ) f(x) f(x)来作为适应度函数。即:
f ( s ) = f ( x ) f(s)=f(x) f(s)=f(x)
在这里插入图片描述

我总结为以下的几步:

在这里插入图片描述

3.4 选择操作

假设采用轮盘赌的方式选择个体,且依次生成的4个随机数(相当于轮盘上指针所指的数)为0.85、0.32、0.12、0.46,经选择后得到的新的种群为:
在这里插入图片描述

其中,染色体11001在种群中出现了2次,而原染色体01000则因适应值太小而被淘汰。

3.5 交叉

交叉运算是遗传算法中产生新个体的主要操作过程,它以某一概率相互交换某两个个体之间的部分染色体。

我总结为以下几步:

在这里插入图片描述
可见,经交叉后得到的新的种群为:
在这里插入图片描述

3.6 变异

变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变,它也是产生新个体的一种操作方法。

总结:

在这里插入图片描述

然后,对第1代种群重复上述(4)—(6)的操作。

对第1代种群,同样重复上述(4)—(6)的操作,其选择情况如下所示:

在这里插入图片描述
其中若假设按轮盘赌选择时依次生成的4个随机数为0.14、0.51、0.24和0.84,经选择后得到的新的种群为:
在这里插入图片描述

可以看出,染色体11010被选择了2次,而原染色体01101则因适应值太小而被淘汰。

对于第1代种群,其交叉情况如下表所示:

在这里插入图片描述
可见,经杂交后得到的新的种群为:

在这里插入图片描述

可以看出,第3位基因均为0,已经不可能通过交配达到最优解。这种过早陷入局部最优解的现象称为早熟。为解决这一问题,需要采用变异操作。

对于第一代种群,其变异情况如下表所示:
在这里插入图片描述
在这里插入图片描述

接着,再对第2代种群同样重复上述(4)—(6)的操作:

对第2代种群,同样重复上述(4)-(6)的操作。其选择情况如表所示:

在这里插入图片描述

其中若假设按轮盘赌选择时依次生成的4个随机数为0.42、0.15、0.59和0.91,经选择后得到的新的种群为:
在这里插入图片描述
对第二代种群,其交叉情况如下表:

在这里插入图片描述

这时,函数的最大值已经出现,其对应的染色体为11111,经解码后可知问题的最优解是在点 x = 31 x=31 x=31处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Twitter被封号了?最详细的申诉教程在此

由于Twitter检测系统是十分敏感的,所以在运营的时候很容易莫名就出现“此账号被封禁”或者“此账号被冻结”的情况。出现这种情况大多是因为账号发送了垃圾信息、面临安全风险、发太多广告或者太久没上线被判为机器人这几个原因。被封号后,我们可以通过向…

Android DataStore Proto存储接入流程详解与使用

一、介绍 通过前面的文字,我们已掌握了DataStore 的存储,但是留下一个尾巴,那就是Proto的接入。 Proto是什么? Protobuf,类似于json和xml,是一种序列化结构数据机制,可以用于数据通讯等场景&a…

【taichi】在Window10上从源码编译太极(用于AOT)

准备工作 Visual studio 2022 建议勾选以下几个: 建议取消中文语言包,只选英文的(因为中文有几率会出现BUG) 说明:C游戏开发是为了UE AOT用的。 vulkan也是UE AOT要用的。 vulkan貌似不需要显示安装,只…

使用docker-compose部署RocketMQ5.0

简介:使用docker-compose部署rocketmq5.0。文中会介绍docker-compose版本以及需要注意的项第一步:进入hub.docker.com搜索rocketmq我们选择第一个,因为第一个是7个月前更新的,(我看有很多博客使用的依旧是最下面的那种…

家政服务小程序实战教程14-立即预约功能开发

上一篇我们开发了客服功能,本篇我们开始开发预约功能。 1 创建数据源 功能开发之前先需要考虑数据源的规划问题,顾客预约某项服务时,需要告知上门时间、联系地址、联系电话,如果需要注明的事项,还需要标明备注。 先…

Vue 双向绑定原理

Vue2 双向绑定原理 mvvm 双向绑定,采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来 劫持各个属性的 setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 几个要点: 1&#…

分享82个HTML电脑主机模板,总有一款适合您

分享82个HTML电脑主机模板,总有一款适合您 82个HTML电脑主机模板下载链接:https://pan.baidu.com/s/13DGOCgvbxSksMPwJzi2z0g?pwdl0mi 提取码:l0mi Python采集代码下载链接:采集代码.zip - 蓝奏云 云虚拟主机运营商网站模板…

C语言返回类型为指针的一些经典题目(下)

续上一篇文章,上一篇文章题目都很经典,这一篇也不例外。一.返回类型为指针经典题目(下)1.代码(第六题)char *GetMemory3(int num) {char *p (char *)malloc(sizeof(char) * num);return p; } void Test3(void) {char *str NULL;str GetMemory3(100…

应用部署初探:6个保障安全的最佳实践

在之前的文章中,我们了解了应用部署的阶段以及常见的部署模式,包括微服务架构的应用应该如何部署等基本内容。本篇文章将介绍如何安全地部署应用程序。 安全是软件开发生命周期(SDLC)中的关键部分,同时也需要成为 S…

Java反序列化——CommonsCollections中基础知识

一、CC链总结图二、常见类1、Map类 --> TransformedMapMap类是存储键值对的数据结构。 Apache Commons Collections中实现了TransformedMap ,该类可以在一个元素被添加/删除/或是被修改时(即key或value:集合中的数据存储形式即是一个索引对应一个值&a…

2022年Q4业绩超预期,被严重低估的Roku迎来反弹

在资本市场上,Roku应该是流媒体领域最具戏剧性的公司。它曾经被突发的疫情推向股价顶峰,但很快又随着疫情结束跌入谷底。 2022年对于Roku来说,仍然是继续探底的一年。随着股价跌回疫情发生前的水平,争论也开始越来越激烈&#xf…

spring-web HandlerMethodArgumentResolver 源码分析

HandlerMethodArgumentResolver 的使用处,解析参数 org.springframework.web.method.support.InvocableHandlerMethod#getMethodArgumentValues HandlerMethodArgumentResolver 在解析参数时使用,以下是使用处 InvocableHandlerMethod#getMethodArgume…

面试题----集合

概述 从上图可以看出,在Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接⼝。 并且,以 Map 结尾的类都实现了 Map 接⼝List,Set,Map List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆…

2.Telegraf简介

Telegraf简介 Telegraf是Influx公司一款基于插件化的开源指标收集工具.主要结合时序性数据库进行使用,用于性能监控.通常Telegraf会每间隔一段时间抓取一批指标数据并将数据发送给时序性数据库或其他自定义的Output. 官方文档 https://docs.influxdata.com/telegraf/v1.24 与…

分享7个比B站更刺激的老司机网站,别轻易点开

俗话说摸鱼一时爽,一直摸一直爽,作为一个程序员老司机了,一头乌黑浓密的头发还时不时被同事调侃,就靠这10个网站让我健康生活,不建议经常性使用,因为还有一句俗话,那就是“摸鱼一时爽&#xff0…

22- 隐马尔科夫HMM (NLP自然语言算法) (算法)

HMM模型 : from hmmlearn.hmm import GaussianHMM model GaussianHMM(n_components3,n_iter100000, covariance_type diag) model.fit(X) 1、马尔科夫链 有向图模型(贝叶斯网络):用有向图表示变量间的依赖关系; 无向图模型&…

【GlobalMapper精品教程】051:融合Dissolve操作详解

本节讲解globalmapper中融合Dissolve工具的使用。 文章目录 一、工具介绍1. 工具位置2. 融合工具二、案例实战1. 加载实验数据2. 根据字段分组融合案例一:根据地类名称分组,将相同的类型融合到一起。案例二:根据权属地类名称分组,将相同的类型融合到一起。一、工具介绍 1.…

UE4 手把手教你做插件(1) 从代码引用插件

0,前言 我看的是 技术宅阿棍儿 的视频,B站有。 系列视频:从代码引用插件_哔哩哔哩_bilibili 看不懂,只能边查资料边看,讲的顺序有点乱 1,根据视频提示创建第三方插件 注意:如果只有空白插件的情…

如何从手工测试进阶自动化测试?阿里10年测开经验分享...

随着行业的竞争加剧,互联网产品迭代速度越来越快,QA 与测试工程师都需要在越来越短的测试周期内充分保证质量。可是,App 测试面临着很多挑战,比如多端发布、多版本发布、多机型发布等等,导致了手工测试很难完全胜任。因…

使用yolov5和强化学习训练一个AI智能欢乐斗地主(一)

这里写自定义目录标题项目介绍项目过程介绍训练yolov5目标检测斗地主收集数据集yolov5调参项目介绍 你好! 欢迎阅读我的文章,本章将介绍,如何使用yolov5和强化学习训练一个AI斗地主,本项目将分为三个部分,其中包含&am…