莫烦python进化算法_「遗传算法」遗传算法(GA) - seo实验室

本文介绍了遗传算法的基本原理和工作流程,包括随机生成初始种群、适应度函数、选择、交叉和变异等步骤。通过Python代码展示了如何利用遗传算法在多峰曲线函数中寻找最大值,以及对传统遗传算法的改进——微生物遗传算法(Microbial GA),强调了保留优秀基因的重要性。遗传算法在解决优化问题中表现出强大的潜力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遗传算法

遗传算法(Genetic Algorithm)

一个讲得很清楚的博客:非常好理解的遗传算法的例子

简单理解:

用计算机模拟人类进化,适应环境(符合条件)的继续繁衍后代,不适应环境(不符合条件)的淘汰,从而逐步找到最优解。

整体思路:

随机挑选初始种群,根据适应度函数给初始种群中的个体“打分”,通过定义的规则进行选择,将选择出来的个体两两配对进行交叉,并在生成的对象中挑选变异点,将0变1,1变0,生成后代种群,如此循环找到最优个体即为最优解。

初始种群是啥:

利用二进制(一般)表示最终解

例如:需要求解z=x^2+y^2的最大值,x={1,5,3,8},y={5,4,0,6}

用六位二进制数表示由x,y组成的解,例如:001100 表示x=1,y=4

001100 称为一条基因序列,表示的是该问题的一种解决方案

种群是包含多个基因序列(解决方案/个体)的集合

适应度函数是啥,有什么作用:

适应度函数可以理解成“游戏规则”,如果问题较为复杂,需要自定义适应度函数,说明如何区分优秀与不优秀的个体; 如果问题比较简单,例如上述求最大值的问题,则直接用此函数式作为适应度函数即可。作用:评定个体的优劣程度,从而决定其遗传机会的大小。

怎么选择:

定义“适者生存不适者淘汰”的规则,例如:定义适应度高的被选择的概率更大

怎么交叉:

利用循环,遍历种群中的每个个体,挑选另一个体进行交叉。例如,通过遍历为基因序列A挑选出B配对,则取A的前半部分,B的后半部分,组合成新的个体(基因序列)C

如何变异:

随机挑选基因序列上的某一位置,进行0-1互换

在此附上莫烦的python实现代码(解决在多峰曲线函数中寻找最大值的问题,如图所示):

莫烦关于此部分的详细讲解视频/代码:遗传算法 莫烦源码

import numpy as np

import matplotlib.pyplot as plt

DNA_SIZE = 10 #序列长度

POP_SIZE = 100 #种群的个体数目

CROSS_RATE = 0.8 #选择多少个体进行交叉配对

MUTATION_RATE = 0.003 #变异的概率/强度

N_GENERATIONS = 100 #有多少代(主循环的迭代次数)

X_BOUND = [0,5] #输入数据的范围

#需要要找到哪个函数的最大值

def F(x): return np.sin(10*x)*x + np.cos(2*x)*x #返回y值(此例中为高度)

#用0-1按照定义的规模表示一代种群

pop = np.random.randint(1, size=(POP_SIZE, DNA_SIZE)) #默认从0开始,随机(提供选择的数值个数,重复次数(纵向,横向))

#print(pop)

#适应度函数(在本例中直接使用F函数就好,但是要处理返回值为负数的情况)

def get_fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值