遗传算法python实现求最大值_python 遗传算法求函数极值的实现代码
废话不多说,大家直接看代码吧!
"""遗传算法实现求函数极大值—Zjh"""
import numpy as np
import random
import matplotlib.pyplot as plt
class Ga():
"""求出二进制编码的长度"""
def __init__(self):
self.boundsbegin = -2
self.boundsend = 3
precision = 0.0001 # 运算精确度
self.Bitlength = int(np.log2((self.boundsend - self.boundsbegin)/precision))+1#%染色体长度
self.popsize = 50# 初始种群大小
self.Generationmax = 12# 最大进化代数
self.pcrossover = 0.90# 交叉概率
self.pmutation = 0.2# 变异概率
self.population=np.random.randint(0,2,size=(self.popsize,self.Bitlength))
"""计算出适应度"""
def fitness(self,population):
Fitvalue=[]
cumsump = []
for i in population:
x=self.transform2to10(i)#二进制对应的十进制
xx=self.boundsbegin + x * (self.boundsend - self.boundsbegin) / (pow(2,self.Bitlength)-1)
s=self.targetfun(xx)
Fitvalue.append(s)
fsum=sum(Fitvalue)
everypopulation=[x/fsum for x in Fitvalue]
cumsump.append(everypopulation[0])
everypopulation.remove(everypopulation[0])
for j in everypopulation:
p=cumsump[-1]+j
cumsump.append(p)
return Fitvalue,cumsump
"""选择两个基因,准备交叉"""
def select(self,cumsump):
seln=[]
for i in range(2):
j = 1
r=np.random.uniform(0,1)
prand =[x-r for x in cumsump]
while prand[j] < 0:
j = j + 1
seln.append(j)
return seln
"""交叉"""
def crossover(self, seln, pc):
d=self.population[seln[1]].copy()
f=self.population[seln[0]].copy()
r=np.random.uniform()
if r
print('yes')
c=np.random.randint(1,self.Bitlength-1)
print(c)
a=self.population[seln[1]][c:]
b=self.population[seln[0]][c:]
d[c:]=b
f[c:]=a
print(d)
print(f)
g=d
h=f
else:
g=self.population[seln[1]]
h=self.population[seln[0]]
return g,h
"""变异操作"""
def mutation(self,scnew,pmutation):
r=np.random.uniform(0, 1)
if r < pmutation:
v=np.random.randint(0,self.Bitlength)
scnew[v]=abs(scnew[v]-1)
else:
scnew=scnew
return scnew
"""二进制转换为十进制"""
def transform2to10(self,population):
#x=population[-1] #最后一位的值
x=0
#n=len(population)
n=self.Bitlength
p=population.copy()
p=p.tolist()
p.reverse()
for j in range(n):
x=x+p[j]*pow(2,j)
return x #返回十进制的数
"""目标函数"""
def targetfun(self,x):
#y = x∗(np.sin(10∗(np.pi)∗x))+ 2
y=x*(np.sin(10*np.pi*x))+2
return y
if __name__ == '__main__':
Generationmax=12
gg=Ga()
scnew=[]
ymax=[]
#print(gg.population)
Fitvalue, cumsump=gg.fitness(gg.population)
Generation = 1
while Generation < Generationmax +1:
Fitvalue, cumsump = gg.fitness(gg.population)
for j in range(0,gg.popsize,2):
seln = gg.select( cumsump) #返回选中的2个个体的序号
scro = gg.crossover(seln, gg.pcrossover) #返回两条染色体
s1=gg.mutation(scro[0],gg.pmutation)
s2=gg.mutation(scro[1],gg.pmutation)
scnew.append(s1)
scnew.append(s2)
gg.population = scnew
Fitvalue, cumsump = gg.fitness(gg.population)
fmax=max(Fitvalue)
d=Fitvalue.index(fmax)
ymax.append(fmax)
x = gg.transform2to10(gg.population[d])
xx = gg.boundsbegin + x * (gg.boundsend - gg.boundsbegin) / (pow(2, gg.Bitlength) - 1)
Generation = Generation + 1
Bestpopulation = xx
Targetmax = gg.targetfun(xx)
print(xx)
print(Targetmax)
x=np.linspace(-2,3,30)
y=x*(np.sin(10*np.pi*x))+2
plt.scatter(2.65,4.65,c='red')
plt.xlim(0,5)
plt.ylim(0,6)
plt.plot(x,y)
plt.annotate('local max', xy=(2.7,4.8), xytext=(3.6, 5.2),arrowprops=dict(facecolor='black', shrink=0.05))
plt.show()
一个函数求极值的仿真的作业,参考了别人的matlab代码,用python复现了一遍,加深印象!
以上这篇python 遗传算法求函数极值的实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
遗传算法python实现求最大值_python 遗传算法求函数极值的实现代码相关推荐
- python随机函数random求最大值_Python遗传算法求一元函数最大值
最近接触遗传算法,参考了众多例子,有些又不尽然对,所以自己边理解边修改,然后写出了下面这堆传说中的屎山... PS1:遗传算法原理啥的太多了,就不赘述了,CSDN里面很多帖子都讲得很透彻了; PS2: ...
- python求函数极值_python 遗传算法求函数极值的实现代码
废话不多说,大家直接看代码吧! """遗传算法实现求函数极大值-Zjh""" import numpy as np import rando ...
- Python中求最大值和最小值max()函数、min()函数
[小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中求最大值和最小值 max()函数.min()函数 ● 选 ...
- 【运筹学】运输规划求最大值 ( 运输规划求最大值问题示例 | 转为运输规划求最小值的方式 )
文章目录 一.运输规划求最大值问题 二.运输规划求最大值问题示例 一.运输规划求最大值问题 目标函数求最大值 : 如求利润最大值 , 营业额最大值 ; maxZ=∑i=1m∑j=1ncijxijs.t ...
- python计算平方面积_python中求平方
python学习(2)--变量与表达式 python学习(2)--变量与表达式 1.与java和c语言相通,python中也分为四种运算符: (1)算数运算符(如:+.-.*./); 学过java或者 ...
- python 方法的实例_python调用自定义函数的实例操作
在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...
- python中非可选参数_python基础教程函数参数
python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些 ...
- python抢购火车票源代码_Python动刷新抢12306火车票的代码(附源码)
摘要:这篇Python开发技术栏目下的"Python动刷新抢12306火车票的代码(附源码)",介绍的技术点是"12306火车票.Python.12306.附源码.火车票 ...
- python按照绝对值排序_Python高阶函数sorted排序
sorted用法 sorted是Python提供的功能强大的排序函数.满足字符,数字等排序要求. 对数字进行排序: list = [-12, -2, -24, 20, 39, 10]; print(s ...
- python中if语句求最大值_python 判断三个数字中的最大值实例代码
python 判断三个数字中的最大值,具体代码如下所示: #判断三个数中最大值 n1= int(input('please enter the firest number:')) n2 = int(i ...
最新文章
- Verilog中的条件编译语句 `ifdef、`else、`endif 等
- python查询在查询_python 查询,子查询以及1对多查询
- KNN针对中文文本分类
- 双边滤波器—— Matlab实现
- 通示jQuery实例方法,未DOM对象添加多个方法
- 【nginx】【转】Nginx核心进程模型
- mongodb 可视化_自动爬取疫情数据、交互式地图可视化
- CSU-ACM集训-模板-主席树
- android各版本对应的SDK level(包括android 10)
- NBA球队也使用Salesforce?
- [webpack] Content not from webpack is served from “xxxx“ 并且 http://localhost:8080/ 数据为空解决方案
- 铁路、公路施工企业劳务实名制管理系统解决方案
- 硬件设计——外围电路(晶振电路)
- bilibili视频爬取与水印去除
- Excel:文本数字转换成数字的三种方法(转)
- 小糊涂家装预算软件 官方
- Spring Security | 轻松搞定认证授权~
- 2022临床助理医师考试专业知识模拟题
- TFTP和Syslog
- 关于使用 os.rename(src,dst) 出现的 [WinError2] 找不到系统文件