Genetic Algorithm遗传算法整理

2024-08-22 17:58

本文主要是介绍Genetic Algorithm遗传算法整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一、简介
      • 二、算法流程
      • 三、参数
      • 四、代码
      • 五、参考资料

一、简介

遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

二、算法流程

遗传算法和自然选择的过程类似,在种群里面进行繁衍,产生的下一代加入种群,并根据一定的条件淘汰掉部分个体,保持种群个数一定,然后继续下一个循环,当循环次数达到界限或者种群中出现满足要求的个体,停止循环。

遗传算法的过程如下:
在这里插入图片描述
我们以数据集的特征选择为例,讲一下里面的一些专有名词。

  • 参数编码:一般二进制编码用的稍微多一些,0表示特征没有被选择,1表示特征被选择,一个解决方案会形成一个 1 ∗ n 1*n 1n的数组,其中n是数据集的特征数;
    在这里插入图片描述

  • 适应度函数(fitness function):用于评价当前个体(特征选择的方案)对环境的适应度(性能),用于在繁殖之后淘汰掉部分个体;

  • 选择操作:从种群中选择用于繁衍的双亲,选择的方法是轮盘赌(Roulette Wheel Selection)或者轮盘赌的变体。

  • 交叉(crossover)操作:类似于染色体交换基因,如果使用二进制编码,会有三种操作模式:(1)单点交叉(single):比如用于繁衍的双亲是A和B,并且数据集有20个特征,那么在数组里随机选择一个断点,A的前半段和B的后半段组成下一代C,A的后半段和B的前半段组成下一代D;(2)多点交叉:和单点交叉类似,多个断点;(3)均匀交叉(也称一致交叉,uniform):两个配对个体的每个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体;

  • 变异(mutation)操作:以特征选择为例,20个特征会形成一个 1 ∗ n 1*n 1n的数组,部分1的突变为0,部分0的突变为1;

在这里插入图片描述

百度百科对轮盘赌(Roulette Wheel Selection)的解释比较清晰,示例如下:
在这里插入图片描述
若产生随机数为0.81,则6号个体被选中。

之前给同学讲这个算法的时候,讲了一个故事辅助理解。羊群共有30只羊(初始化个体数pop_size),40只羊交配产生20只羊(40*0.5, c r o s s − r a t e ∗ p o p − s i z e cross_-rate*pop_-size crossratepopsize),新产生的20只羊,每个都有可能突变(突变率),最后的60只羊根据适者生存,保留40只,重复这个过程就能选出40只适应能力特别强的羊。

三、参数

遗传算法里面一般有以下参数:

  • 迭代次数:算法结束的标准;
  • 初始种群个体个数:有多少个方案可供选择。如果太多,算法运行时间比较长;太少不一定能选出最好的结果;
  • 交叉率:用于确定下一代的个数, c r o s s − r a t e ∗ p o p − s i z e = n u m − n e w − s o l u t i o n cross_-rate*pop_-size=num_-new_-solution crossratepopsize=numnewsolution
  • 突变率:主要是确定下一代个体是否产生突变,一般随机产生一个0-1之间的数和突变率比较,决定是否突变;

总结:遗传算法好坏初始种群的选择有很大关系,不一定能够找到最佳方案。

四、代码

代码可以看这篇博客遗传算法详解 附python代码实现

这篇博客在产生后代后,筛选种群并不是完全按照适应度大小选择的,为了陷入局部最优,按照“适应度越高,被选择的机会越高,而适应度低的,被选择的机会就低”的原则进行了折中处理:

def select(pop, fitness):    # nature selection wrt pop's fitnessidx = np.random.choice(np.arange(POP_SIZE), size=POP_SIZE, replace=True,p=(fitness)/(fitness.sum()) )return pop[idx]

这个对我的启发比较大。

五、参考资料

【算法】超详细的遗传算法(Genetic Algorithm)解析
百度百科–Roulette Wheel Selection
百度百科–遗传算法
利用 Python 实现 遗传算法(GeneticAlgorithm)

这篇关于Genetic Algorithm遗传算法整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096985

相关文章

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

JavaScript整理笔记

JavaScript笔记 JavaScriptJavaScript简介快速入门JavaScript用法基础语法注释关键字显示数据输出innerHTML innerText属性返回值的区别调试 数据类型和变量数据类型数字(Number)字符串(String)布尔值(Boolean)null(空值)和undefined(未定义)数组(Array)对象(Object)函数(Function) 变量

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

站长常用Shell脚本整理分享(全)

站长常用Shell脚本整理分享 站长常用Shell脚本整理分享1-10 站长常用Shell脚本整理分享11-20 站长常用Shell脚本整理分享21-30 站长常用Shell脚本整理分享31-40 站长常用Shell脚本整理分享41-50 站长常用Shell脚本整理分享51-59 长期更新

我自己常用的eclipse 快捷键整理

---------------- 我自己改的快捷键: 复制当前行单下一行  ctrl alt n   --------------------- 自带快捷键: 快速定位到一行  CTRL+L 向上(下)移动选中的行:ALT+UP/DOWN ARROW 删除行(Delete Line):CTRL+D CTRL + 1也很有用     ----------

C/C++ 网络聊天室在线聊天系统(整理重传)

知识点: TCP网络通信 服务端的流程: 1.创建socket套接字 2.给这个socket绑定一个端口号 3.给这个socket开启监听属性 4.等待客户端连接 5.开始通讯 6.关闭连接 解释: socket:类似于接口的东西,只有通过这个才能跟对应的电脑通信。 每一台电脑都有一个IP地址,一台电脑上有多个应用,每个应用都会有一个端口号。 socket一般分为两种类型,一种是通讯,一种是监听

20190315 把整理和培养自己当作一生的事业,而不是局限在找工作拿offer。

把整理和培养自己当作一生的事业,而不是局限在找工作拿offer,做有本事的人。 来东南读研半年了,明显感觉自己掌握的不过是书本知识级别的中上水平,垃圾收集器这些的只知道背面经,靠脑子硬记,缺乏整理和系统,一头浆糊。 现在一边做实训这个烂项目,一边刷面经,一边刷剑指offer,想投些大公司的实习,又觉得还没准备好,看着各 种面经,都能说个大概,但明显感觉到自己知识的不体系和不深入,**做的项目

数据库系统原理概念整理(备考)

基本概念 数据模型 描述数据的概念和工具 关系数据模型 用关系描述数据 数据模型 包含三个方面 结构 操作 约束 对应于 关系数据模型 关系(表) 关系代数 主外键约束,断言 逻辑数据模型:详尽的描述数据,不关心具体的物理层实现,如关系数据模型中,设计实体及实体间的关系,属性,约束等等。业务逻辑的体现。 逻辑模型 --------查询处理----------物理模型 逻辑方面:SQL结构化查询