遗传算法
原理
遗传算法是一种仿生优化算法,其灵感源于生物进化和基因传的机制。通过模拟生物进化过程中的交叉、变异等操作,逐步优化一个问题的解,以实现最优解的搜索。在遗传算法中,每个解被编码成一个个体,交叉相当于两个个体基因交换,变则是在个体基础上进行随机修改。遗传算法的主要优点是可以处理多变量、多峰和非线性等问题,同时搜索范围较大。
简单来说,遗传算法是模拟自然选择和遗传机制的寻优方法。通过基因杂交,变异可能产生适应性强的后代,通过优胜劣汰的自然选择,适应能力强的基因结构就保存下来。一句话概括就是:优胜劣汰,胜者生存。
基本步骤:
1.初始化群:在优化问题的可行解空间中随机生成一个初始种群。
2.评价个体适应度:对于每个个体,计算其适应度,即问题目标函数的值。
3.选择操作:利用轮盘赌算法或其他选择策略,从当前种群中选择潜在优秀的个体,生成下一代种群。
4.基因操作:包括交叉和变异,对已选个体,在一定概率范围内进行基因的交叉、变异,并生成新的个体。
5.·替换操作:新生个体代替部分原来的个体,生成新的种群。
6.结束判断:根据预设的终止条件,判断是否满足结束条件,收敛或超过限制则结束,否则重复执行上述步骤。
代码示例
import numpy as np
a=-np.pi #变量下界
b=np.pi #变量上界
NP=100 #种群大小
NG=1000 #迭代次数
Pc=0.9 #交叉概率
Pm=0.1 #变异概率
eps=0.1 #离散精度,用于确定二进制码所需码长
def initial(length): # 生成二进制编码的初始种群,大小为(length, )
res=np.zeros(length)
for ii in range(length):
r = np.random.rand()
res[ii]=np.round(r)
return res
def fitness(x): # 计算函数的适应值
return np.sin(x)
def dec(a,b,x,L): # 将二进制编码的数值转换为实际数值
L2 = list(r