人工智能学习笔记(遗传算法初步)

遗传算法是根据大自然中生物体进化规律而设计提出的
是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过自然进化过程搜索最优解的方法
遗传算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程(摘自百度百科)

1、遗传算法的目的
解决经典数学方法无法有效地求出最优解的复杂的大规模的难题

2、基本框架
(1)编码
由于遗传算法不能直接处理问题空间的参数,因此必须通过编码将要求解的问题表示成遗传空间的染色体或者个体
二进制编码可以将某个变量值代表的个体表示为一个[0,1]二进制串
(2)适应度函数
进化论中的适应度是表示某一个个体对环境的适应能力,也表示该个体繁殖后代的能力。遗传算法的适应度函数也叫做评价函数,是用来判断群体中的个体优劣程度的指标,它是根据所求问题的目标函数来进行评估的
遗传算法在搜索进化过程中一般不需要其他外部信息,仅用适应度函数来评估个体或者解的优劣,并用来作为遗传操作的依据
由于在遗传算法中,适应度函数要比较排序并在此基础上计算选择概率,所以适应度函数的值要取正值
因此将目标函数映射成求最大值形式且函数值非负的适应度函数是必要的

(3)初始群体选取
遗传算法中初始群体中的个体是随机产生的,一般可以采取两种方法
a.根据问题设法把握最优解所占的空间在整个问题空间中的分布范围,然后在这个分布范围内设定初始群体
b.先随机生成一定数目的个体,然后从中挑出最好的个体加到初始群体中,这个过程不断迭代直到初始群体中个体数达到了预先确定的规模

3、算法的运算步骤
(1)初始化
设置进化代数的计数器 t = 0,设置最大进化代数为T,随机生成m个个体作为初始群体 p(0)
(2)个体评价(计算适应度)
计算群体 P(t) 中各个个体的适应度
(3)选择运算
将选择算子作用于群体
选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代
(4)交叉运算
将交叉算子作用于群体
(5)变异运算
将变异算子作用于群体
即对群体中的个体串的某些基因座上的基因值作变动,群体 P(t)经过选择、交叉、变异运算之后得到下一代群体 P(t+1)
(6)终止条件判断
若 t = T,则以进化过程中所得到的具有最大适应度个体作为最优解输出

遗传操作包括三个基本算子:选择、交叉、变异

大致流程如下:
在这里插入图片描述

下面举一个例子来手动实现一下算法
在这里插入图片描述

1、个体编码
遗传算法的运算对象是表示个体的符号串,所以我们要把变量x1、x2编码为一种符号串
在这个题目中,x1、x2的范围是0~7之间的整数,所以我们可以用3位二进制数来表示,然后用把它们连接在一起组成的6位二进制数来表示个体的基因型,x1、x2原本的十进制数就是他们的表现型
例如 x1 = 5,x2 = 7 那么个体的基因型就是101111

2、初始群体的产生
初始群体的个数我们可以自己来规定,在这个题目中我们假设初始群体规模为4,也就是说群体由4个个体组成,每个个体的基因型通过随机数来生成
假设我们生成了这样一组基因型:011101,101011,011100,111001

3、适应度计算
遗传算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其遗传机会的大小
这里我们可以直接将目标函数作为个体适应度的指标

4、选择运算
选择运算就是把当前群体里面适应度较高的个体按照某种规则遗传到下一代群体中
一般适应度高的个体将更有机会遗传到下一代
在这个题目中我们可以采用与适应度成正比的概率来确定各个个体遗传到下一个群体中的数量
(1)首先计算出群体中每个个体的适应度并求和
(2)其次计算出每个个体相对适应度的大小(个体适应度/群体中各个个体适应度的总和),这个就作为个体被遗传到下一代的概率
(3)然后我们可以使用轮盘赌选择法,让每个概率值组成一个区域,全部概率值为1
(4)最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区域内来确定各个个体被选中的次数
在这里插入图片描述

5、交叉运算
交叉运算是遗传算法中产生新个体的主要过程,这个过程通过某种概率来交换两个个体的部分染色体
这个题目可以使用单点交叉
(1)首先对群体中的个体随机配对
(2)然后随机生成交叉点的位置
(3)最后相互交换交叉点之后的部分基因
在这里插入图片描述

6、变异运算
变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变,它也是产生新个体的一种操作方法
(1)首先我们随机生成变异点的位置
(2)然后按照相应变异点的位置将基因取反
在这里插入图片描述

这样我们对群体 P(t) 进行一轮的选择、交叉、变异就得到了新一代群体 P(t+1)
在这里插入图片描述
从图中可以看出,群体经过一代进化之后,其适应度的最大值、平均值都得到了明显的改进
事实上,这里已经找到了最佳个体 111111
但是在很多实际情况中,我们可能需要进行一定的循环次数才能找到最优个体

参考文献
《遗传算法原理及应用》周明,孙树栋
https://blog.csdn.net/b2b160/article/details/4680853/
https://www.bilibili.com/video/BV1zp4y1U7Ti?spm_id_from=333.999.0.0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你数过天上的星星吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值