遗传算法的python代码

  遗传算法 GA—模拟自然界遗传机制和生物进化论而成的一种并行随机搜索最优化方法。它的过程分为种群初始化、计算适应度、交叉、变异,然后进行多代的迭代后得到比较好的个体。
  下面是我的参考代码。
首先导入必要的库:

import numpy as np
import matplotlib.pyplot as plt
import openpyxl as xl
import pandas as pd
import random
import math

一些必要的参数:

N=100  #种群大小
Gmax=2000  #最大迭代数
all_max=0   #最优值
pm=0.02
pc=0.7
def f(x1,x2):   #适应度函数
    return 21.5+x1*math.sin(4*math.pi*x1)+x2*math.sin(20*math.pi*x2)

种群初始化,可以看到比较简单,只需要几句代码:

 A=[]
for i in range(0,N):
	A.append([random.uniform(-3, 12.1),random.uniform(4.1, 5.8)])

计算适应度,轮盘赌那里用了矩阵的where函数,比较方便:

fitness=[]
for i in range(0,N):                #计算
	fitness.append(f(A[i][0],A[i][1]))
fit=np.array(fitness)
ans = sum(fit)
Max_now=max(fit)                     #获得最大值
if Max_now>all_max: 
	all_max=Max_now
s=0
for i in range(0,N):   #计算轮盘赌的权值
	s=fit[i]/ans+s
	fit[i]=s
A2=[]
for i in range(0,N):   #进行轮盘赌,获得下一代
	n=random.uniform(0, 1)
	which=np.where(fit >n )[0][0]
	A2.append(A[which])#获得下一代

交叉操作:

mating=np.random.rand(N)
select=np.where(mating<=pc)#获得能交配的下标
i=0
while i<len(select[0]): #这里是交配的过程
	digit= random.randint(0, 1)
	if i+1<len(select[0]):
		A2[select[0][i]][digit:],A2[select[0][i+1]][digit:]=A2[select[0][i+1]][digit:],A2[select[0][i]][digit:]  #互换
	i=i+2

最后的变异操作;

for a in A2:
	variation=np.random.rand(2)
	if variation[0]<=pm:
		a[0]=random.uniform(-3, 12.1)
	if variation[1]<=pm:
		a[1]=random.uniform(4.1, 5.8)

至此代码部分已经完毕,看看其运行结果。x轴是迭代代数,y轴是得到的最优解。
在这里插入图片描述
最终的运行结果如图所示,可以发现其具有比较突兀的增长,而且最终的结果也并不靠近最具最优解。还需要继续改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值