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多元函数求解_使用遗传算法求二元函数的最小值
二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...
- python多元函数求极小值_使用遗传算法求二元函数的最小值
二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...
- python计算平方面积_python中求平方
python学习(2)--变量与表达式 python学习(2)--变量与表达式 1.与java和c语言相通,python中也分为四种运算符: (1)算数运算符(如:+.-.*./); 学过java或者 ...
- python 方法的实例_python调用自定义函数的实例操作
在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...
- python中read函数解释_Python内置函数解释教程,readwill(非常详细的代码演示截图),详解,看,了,就,会,很...
内置函数 abs() 获取绝对值 all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False any() 接受一个迭代器,如果迭代器里有一个元素为真,那么返回True ...
- python内置函数调整_python - 内置函数
一.内置函数 嵌入到主调函数中的函数称为内置函数,又称内嵌函数. 作用是提高程序的执行效率,大多编程语言都有自己的内置函数. 1.作用域相关 deffunc(): name= 'alex' print ...
- python中的open函数实例_Python中open函数注意点
前段日子看了关于Python文件和流的一些文献,其中最基础的便是python的一个内建函数:open!!! 很简单的一个函数,他的原型是这样的: open(name,[,mode[,buffering ...
- python默认参数举例_Python之在函数中使用列表作为默认参数
本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使用列表作 ...
- python 函数 过程_python学习之函数(三)--函数与过程
1.函数与过程的区别: 有返回值的是函数,没有返回值的是过程: 函数(function):有返回值 过程(procedure):简单特殊,没有返回值 严格来说,python只有函数,没有过程.没有返回 ...
最新文章
- 哈佛医学院解析:触发医学深度学习系统受到「对抗攻击」的诱因有哪些?
- linux中的tasklet机制【转】
- 阿里达摩院员工业余打造“论文知识图谱”工具:极速搜索,完全可视化
- 知名K12公司资深运营谢涵博:线上教育产业瓶颈该如何突破?
- 美国读本科出勤率低被休学,无法毕业怎么办
- 在tomcat上部署项目需要打成jar_Spring Boot Web 项目教程,SpringBoot与传统Web 优缺对比...
- Linux出现NOKEY
- Blazor带我重玩前端(二)
- rest_framework09:自动生成接口文档(简略)
- GNU/Linux下有多少是GNU的?
- html5期末考试题答案,HTML5期末考试题型
- 桥水基金:对中国股市自上而下的分析
- 哲学家名篇粤语诵读文2019年5月1日
- ​mybatis collection解析以及和association的区别
- 你了解国际版的阿里云吗?
- 面试系列之-如何选择外包与自研公司
- 【我们就爱穿上古着晒幸福】
- 树莓派linux下gpio驱动,树莓派官方自带gpio驱动bcm2708_gpio.c原理分析 linux gpio架构 gpio子系统...
- Java数据结构--Linkedlist
- 如何查找一篇英文文章中出现频率最高的单词?
热门文章
- .NET Core跨平台的奥秘[中篇]:复用之殇
- .Net Core下通过Proxy 模式 使用 WCF
- Docker~从Dockerfile到Container的过程
- 编写高性能 .NET 代码 第二章:垃圾回收 基本操作
- Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事
- 官方博客明确了 .NET Core RC2/RTM 时间表
- linux android sdk gengxinman,Android 实现增量更新
- laravel 配置微信公众号时{errcode:-106,errmsg:token check fail}
- 【ArcGIS微课1000例】0014:ArcGIS中如何将kml(kmz)文件转shp,并进行投影转换?
- 【计算机图形学】实验:VB.net环境下的图形裁剪完整实验操作流程