遗传算法(Genetic Algorithm)

news2025/1/9 15:29:18

本文为阅读《遗传算法原理及应用》的笔记和心得
ISBN:7-118-02062-1

遗传算法简介

遗传算法是模拟生物在自然环境中的遗传和进化过程中而形成的一种自适应全局优化概率搜索算法
总的来说,求最优解解或近似最优解的方法主要有三种:枚举法、启发式算法和搜索算法。

  • 枚举法:枚举出可行解集合内的所有可行解,以求出精确最优解。该方法的求解效率比较低。
  • 启发式算法:寻求一种能产生可行解的启发式规则,以找到一个最优解或近似最优解。效率较高,无通用性。
  • 搜索算法:寻求一种搜索算法,该算法在可行解结合的一个子集内进行搜索操作,以找到问题的最优解或近似最优解。能在近似解的质量和求解效率上达到一种较好的平衡。

遗传算法中,将 n 维决策变量 X = [ x 1 , x 2 , x 3 , ⋯   , x n ] T \mathrm{X}=\left[ \mathrm{x}_1, \mathrm{x}_2, \mathrm{x}_3, \right. \cdots , \left. \mathrm{x}_{\mathrm{n}} \right] ^{\mathrm{T}} X=[x1,x2,x3,,xn]T
用 n 个记号 X_i ( i=1, 2, 3, … , n)所组成的符号串X来表示: X = X 1 X 2 ⋅ ⋅ ⋅ X n ⇒ X = [ x 1 , x 2 , x 3 , ⋯   , x n ] T \mathrm{X}=\mathrm{X}_1\mathrm{X}_2\cdot \cdot \cdot \mathrm{X}_{\mathrm{n}}\Rightarrow \mathrm{X}=\left[ \mathrm{x}_1, \mathrm{x}_2, \mathrm{x}_3, \right. \cdots , \left. \mathrm{x}_{\mathrm{n}} \right] ^{\mathrm{T}} X=X1X2XnX=[x1,x2,x3,,xn]T
把每一个 X i X_i Xi看作一个遗传基因,它的所有可能取值称为等位基因,这样,X就可看做由 n 个遗传基因所组成的一个染色体。

最简单的等位基因是由 0 和 1 这两个整数组成的,相应的染色体就可表示为一个二进制符号串。

染色体 X 也称为个体 X ,对于每一个个体 X ,需要按照一定规则确定出其适应度,个体的适应度与其对应的个体表现型 X 的目标函数相关联。
X 越接近于目标函数的最优点,其适应度越大;反之,其适应度越小。

生物的进化是以集团为主体的。与此相对应,遗传算法的运算对象是由 M 个个体所组成的集合,称为群体

遗传算法的过程:
遗传算法的运算过程也是一个反复达代过程、第 t 代群体记做P ( t ),经过一代遗传和进化后,得到第 t+1 代群体,它们也是由多个个体组成的集合,记做 P (t +1)。这个群体不断地经过遗传和进化操作,并且每次都按照优胜劣汰的规则适应度较高的个体更多地遗传到下一代,这样最终在群体中将会得到一个优良的个体 X,它所对应的表现型 X将达到或接近于问题的最优解 X ∗ X^* X

生物的进化过程主要是通过染色体之间的交叉和染色体的变异来完成的。
与此相对应,遗传算法中最优解的搜索过程也模仿生物的这个进化过程,使用所谓的遗传算子 ( genetic operators )作用于群体 P( t ) 中,进行下述遗传操作,从而得到新一代群体P ( t+1 )。

  • 选择(selection):根据各个个体的适应度,按照一定的规则或方法,从第 t 代群体 P( t )中选择出一些优良的个体遗传到下一代群体P ( t+1 )中。
  • 交叉(crossover):将群体 P ( t )内的各个个体随机搭配成对,对每一对个体,以某个概率(crossover rate)交换它们之间的部分染色体。
  • 变异(mutation):对群体P ( t )中的每一个个体,以某一概率(称为变异概率, mutation rate)改变某一个或某一些基因座上的基因值为其他的等位基因。

使用上述三种遗传算子(选择算子,交叉算子,变异算子)的遗传算法的主要运算过程如下所述:

  1. 初始化。设置进化代数计数器 t <- 0;设置最大进化代数 T ; 随机生成 M 个个体作为初始群体P ( 0 )。
  2. 个体评价。计算群体 P( t )中各个个体的适应度。
  3. 选择运算。将选择算子作用于群体。
  4. 交叉运算。将交叉算子作用于群体。
  5. 变异运算。将变异算子作用于群体。群体 P ( t )经过选择、交叉、变异运算之后得到下一代群体 P (t + 1)。
  6. 终止条件判断。若 i ≤ T,则: t <- t +1,转到步骤二; 若 t > T,则以进化过程中所得到的具有最大适应度的个体作为最优解输出,终止计算。

遗传算法的手工模拟计算示例

为了更好地理解遗传算法地运算过程,下面用手工计算来简单地模拟遗传算法地各个主要执行步骤。
{ m a x f ( x 1 , x 2 ) = x 1 2 + x 2 2 s . t . x 1 ∈ { 0 , 1 , 2 , ⋅ ⋅ ⋅ , 7 } x 2 ∈ { 0 , 1 , 2 , ⋅ ⋅ ⋅ , 7 } \begin{cases} max&{f}\left({x}_1, {x}_2 \right) ={{x}_1}^2+{{x}_2}^2\\ {s}.{t}.&{x}_1\in \left\{ 0, 1, 2,\cdot \cdot \cdot ,7 \right\}\\ &{x}_2\in \left\{ 0, 1, 2,\cdot \cdot \cdot ,7 \right\}&\\ \end{cases} maxs.t.f(x1,x2)=x12+x22x1{0,1,2,,7}x2{0,1,2,,7}

现对其主要运算过程作如下解释:

1. 个体编码。

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

2. 初始群体的产生。

遗传算法是对群体进行的进化操作,需要给其准备一些表示起始搜索点的初始群体数据。本例中,群体规模的大小取为 4,即群体由 4 个个体组成,每个个体可通过随机方法产生。

3. 适应度计算。

遗传算法中以个体适应度的大小来判定各个个体的优劣程度,从而决定其遗传机会的大小。本例中,目标函数总取非负值,并且是以求函数最大值为优化目标,故可直接利用目标函数值作为个体的适应度。

4. 选择计算。

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

5. 交叉运算

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

6. 变异运算。

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

对群体 P( t ) 进行一轮选择、交叉、变异运算之后可得到新一轮的群体 P ( t+1 )。
经过多次迭代,便可以得到 111111 这一基因序列,解码后即[ 7 , 7 ],max=98。

在这里插入图片描述

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

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

相关文章

【PCB专题】Allegro设置禁止铺铜区域但仍可以走线和打过孔

在PCB设计中我们有时候需要做一些净空区,但是净空区内有一些走线和过孔。如果使用Route Keepout画一个框的话,那是不允许走线和打过孔的,会报DRC。 那么如何才能既禁止区域铺铜,又可以走线和打过孔不报DRC呢? Setup->Areas->Shape Keepout Options选择要禁止…

第二十一篇、基于Arduino uno,控制有源蜂鸣器和无源蜂鸣器发出声音——结果导向

0、结果 说明&#xff1a;有源蜂鸣器按照一定的频率报警&#xff0c;无源蜂鸣器则是一直报警&#xff0c;都采用非阻塞方式编写&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;有源蜂鸣器和无源蜂鸣器看上去一样&#xff0c;但是背面不一…

详解Handler

详解Handler 文章目录 详解Handler1.Handler的工作流程1.1主线程具有如上性质的原因1.2流程图 2.Handler流程中的重要的几个方法2.1Message中的属性2.2.1what2.2.2replyTo2.2.3obtain 2.2Handler.post()与Handler.sendMessage()2.2.1post的源码2.2.1.1sendMessageDelayed()源码…

centos6离线安装docker

参考 RedHat 6.8 离线安装Docker &#xff08;rpm包安装&#xff09; - 神奇二进制 - 博客园 (cnblogs.com) 可参考&#xff0c;但本次安装未参考 CentOS6 完全离线安装Docker - 简书 (jianshu.com) 走了一遍&#xff0c;大雾 (1条消息) 离线安装Docker_洒家肉山大魔王的博客…

萌啦科技参加ICBE跨境电商博览会完美落幕,期待再相会!

“ 萌啦科技联合DNY123、喜运达物流共同亮相2023 ICBE跨境电商博览会&#xff0c;更全面地服务东南亚电商卖家&#xff0c;把握新兴市场电商发展商机&#xff01;” 跨境电商“万人”博览会 5月15日-5月17日&#xff0c;ICBE国际跨境电商交易博览会在广州琶洲保利世贸博览馆隆重…

《商用密码应用与安全性评估》第四章密码应用安全性评估实施要点4.3密码测评要求与测评方法

总体要求测评方法 1.密码算法核查 测评人员应当首先了解信息系统使用的算法名称、用途、位置、执行算法的设备及其实现方式&#xff08;软件、硬件或固件等&#xff09;。针对信息系统使用的每个密码算法&#xff0c;测评人员应当核查密码算法是否以国家标准或行业标准形式发布…

数据结构与算法-二分查找

1.1 什么是算法&#xff1f; 定义 在数学和计算机科学领域&#xff0c;算法是一系列有限的严谨指令&#xff0c;通常用于解决一类特定问题或执行计算 In mathematics and computer science, an algorithm (/ˈlɡərɪəm/) is a finite sequence of rigorous instructions, …

IO读写的基础原理

read系统调用write系统调用read系统调用&#xff0c;并不是直接从物理设备把数据读取到内存中&#xff0c;write系统调用&#xff0c;也不是直接把数据写入到物理设备。调用操作系统的read&#xff0c;是把数据从内核缓冲区复制到进程缓冲区&#xff1b;而write系统调用&#x…

健康医疗类APP开发 满足民众在线医疗需求

生活水平和社会大环境的变化让人们对于医疗服务的要求也随之提高&#xff0c;传统的到医院就诊已经无法更好的满足现代人多元化的医疗服务需求了。于是很多医院诊所等都考虑通过互联网技术来实现诊疗和科普健康知识的目的&#xff0c;为用户提供更加便捷化多元化的健康诊疗服务…

Python魔法属性和方法

1.魔法属性 __doc__ 获取类或方法的描述信息 class Foo:""" 类对象__doc__的属性值"""def func(self):""" 类方法的__doc__属性值 """passfoo Foo()print("类对象的__doc__&#xff1a;", Foo.__do…

电力需求侧管理是什么及意义

安科瑞虞佳豪 电力需求侧管理是指综合采取合理可行的技术、经济和管理措施&#xff0c;在用电环节实施需求响应、节约用电、电能替代、绿色用电、智能用电、有序用电&#xff0c;推动电力系统安全降碳、提效降耗。 我国分别于2010年和2017年发布了两版电力需求侧管理办法。国…

元”启长三角 共享新未来!长三角数字干线元宇宙创新发展论坛暨第一届长三角元宇宙日在长三角绿洲智谷·赵巷成功举办

5月30日下午&#xff0c;由工信部网络安全产业发展中心&#xff08;工信部信息中心&#xff09;、长三角投资&#xff08;上海&#xff09;有限公司、青浦区经济委员会、青浦区科学技术委员会、青浦区科学技术协会指导&#xff0c;北京大数据协会元宇宙专委会主办&#xff0c;长…

ISO21434 项目网络安全管理(三)

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 4.1 网络安全责任 4.2 网络安全规划 4.3 裁剪 4.4 重用 4.5 非上下文组件 4.6 现成组件 4.7 网络安全案例&#xff08;Cybersecurity case&#xff09; 4.8 网络安全评估&#…

网店系统如何建设?如何搭建网店?

互联网的不断发展&#xff0c;越来越多的商家开始意识到建设自己的网店是非常必要和重要的。通过搭建网店系统&#xff0c;商家无需承担大量的租赁、装修等成本&#xff0c;同时可以将商品推广到更广阔的市场&#xff0c;提高销售额。那么&#xff0c;网店系统如何建设呢&#…

[QCA6174]QCA6174 DFS认证4.6.2.3 Channel Shutdown出现跳转之后在原始信道上有弱信号问题分析及解决方案

WIFI DFS测试要求 Master设备需要测试的项目 4.6.2.1 Channel Availability Check ---信道可用性检查 定义其作为雷达脉冲检测机制,当雷达脉冲出现时所占用的信道需要能被设备检测到已经被占用。当相关信道未被占用时,这些信道被称为Avaliable Channel可用信道 4.6.2.2 In…

【TA 100】Flow Map实现水体流动效果

最近刚好学到Shader Graph水体流动&#xff0c;看下其他实现方式记录下 1 什么是flow map 1 什么是Flow map? flowmap的实质:一张记录了2D向量信息的纹理Flow map上的颜色(通常为RG通道) 记录该处向量场的方向&#xff0c;让模型上某一点表现出定量流动的特征。通过在shader中…

Python接口自动化—接口测试用例和接口测试报告模板

简介 当今社会在测试领域&#xff0c;接口测试已经越来越多的被提及&#xff0c;被重视&#xff0c;而且现在好多招聘信息要对接口测试提出要求。区别于传统意义上的系统级别测试&#xff0c;很多测试人员在接触到接口测试的时候&#xff0c;也许对测试执行还可以比较顺利的上…

vue高频面试题(一)

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 VUE Vue2和3对比 脚手架创建项目 之前有个国企&#xff0c;问到了怎么用脚手架创建vue项…

真空热压烧结炉JZM-1200技术参数一览表

真空热压烧结炉是将真空、气氛、热压成型、高温烧结结合在一起设备&#xff0c;适用于粉末冶金、功能陶瓷等新材料的高温热成型。如应用于透明陶瓷、工业陶瓷等金属以及由难容金属组成的合金材料的真空烧结以及陶瓷材料碳化硅和氮化硅的高温烧结&#xff0c;也可用于粉末和压坯…

2. 量化多因子数据清洗——去极值、标准化、正交化、中性化

一、去极值 1. MAD MAD&#xff08;mean absolute deviation&#xff09;又称为绝对值差中位数法&#xff0c;是一种先需计算所有因子与平均值之间的距离总和来检测离群值的方法. def extreme_MAD(rawdata, n): median rawdata.quantile(0.5) # 找出中位数 new_median (abs(…