废话不多说,大家直接看代码吧!

"""遗传算法实现求函数极大值—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 遗传算法求函数极值的实现代码相关推荐

  1. python多元函数求解_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  2. python多元函数求极小值_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  3. python计算平方面积_python中求平方

    python学习(2)--变量与表达式 python学习(2)--变量与表达式 1.与java和c语言相通,python中也分为四种运算符: (1)算数运算符(如:+.-.*./); 学过java或者 ...

  4. python 方法的实例_python调用自定义函数的实例操作

    在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...

  5. python中read函数解释_Python内置函数解释教程,readwill(非常详细的代码演示截图),详解,看,了,就,会,很...

    内置函数 abs() 获取绝对值 all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False any() 接受一个迭代器,如果迭代器里有一个元素为真,那么返回True ...

  6. python内置函数调整_python - 内置函数

    一.内置函数 嵌入到主调函数中的函数称为内置函数,又称内嵌函数. 作用是提高程序的执行效率,大多编程语言都有自己的内置函数. 1.作用域相关 deffunc(): name= 'alex' print ...

  7. python中的open函数实例_Python中open函数注意点

    前段日子看了关于Python文件和流的一些文献,其中最基础的便是python的一个内建函数:open!!! 很简单的一个函数,他的原型是这样的: open(name,[,mode[,buffering ...

  8. python默认参数举例_Python之在函数中使用列表作为默认参数

    本文将介绍笔者在工作中遇到的Python的一个坑,那就是使用列表作为默认参数. 我们知道,在Python中,列表(list)是可变对象,所以列表的内容可能会在函数内改变.另一个需要注意的是,使用列表作 ...

  9. python 函数 过程_python学习之函数(三)--函数与过程

    1.函数与过程的区别: 有返回值的是函数,没有返回值的是过程: 函数(function):有返回值 过程(procedure):简单特殊,没有返回值 严格来说,python只有函数,没有过程.没有返回 ...

最新文章

  1. 哈佛医学院解析:触发医学深度学习系统受到「对抗攻击」的诱因有哪些?
  2. linux中的tasklet机制【转】
  3. 阿里达摩院员工业余打造“论文知识图谱”工具:极速搜索,完全可视化
  4. 知名K12公司资深运营谢涵博:线上教育产业瓶颈该如何突破?
  5. 美国读本科出勤率低被休学,无法毕业怎么办
  6. 在tomcat上部署项目需要打成jar_Spring Boot Web 项目教程,SpringBoot与传统Web 优缺对比...
  7. Linux出现NOKEY
  8. Blazor带我重玩前端(二)
  9. rest_framework09:自动生成接口文档(简略)
  10. GNU/Linux下有多少是GNU的?
  11. html5期末考试题答案,HTML5期末考试题型
  12. 桥水基金:对中国股市自上而下的分析
  13. 哲学家名篇粤语诵读文2019年5月1日
  14. ​mybatis collection解析以及和association的区别
  15. 你了解国际版的阿里云吗?
  16. 面试系列之-如何选择外包与自研公司
  17. 【我们就爱穿上古着晒幸福】
  18. 树莓派linux下gpio驱动,树莓派官方自带gpio驱动bcm2708_gpio.c原理分析 linux gpio架构 gpio子系统...
  19. Java数据结构--Linkedlist
  20. 如何查找一篇英文文章中出现频率最高的单词?

热门文章

  1. .NET Core跨平台的奥秘[中篇]:复用之殇
  2. .Net Core下通过Proxy 模式 使用 WCF
  3. Docker~从Dockerfile到Container的过程
  4. 编写高性能 .NET 代码 第二章:垃圾回收 基本操作
  5. Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事
  6. 官方博客明确了 .NET Core RC2/RTM 时间表
  7. linux android sdk gengxinman,Android 实现增量更新
  8. laravel 配置微信公众号时{errcode:-106,errmsg:token check fail}
  9. 【ArcGIS微课1000例】0014:ArcGIS中如何将kml(kmz)文件转shp,并进行投影转换?
  10. 【计算机图形学】实验:VB.net环境下的图形裁剪完整实验操作流程