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 遗传算法求函数极值的实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java读取文件跳过_在Java中读取文本文件-为什么跳过行?

我是新来的,只是努力尝试读取文本文件.每行上都有一个单词和相应的数字代码.想法是将其读取并将代码和单词放在单独的变量中.我对这个领域了解不多,但是我一直在网上四处寻找,并提出了以下建议&#xff1a;try{FileReader freadernew FileReader(f);BufferedReader inFilenew B…

程序员的项目周期(表情包版)

0. 需求审评会议进行中1. 开发阶段进行中….2. 代码复查阶段3. 测试阶段….4. 需求突然要改….5. 项目上线

巧用Dictionary实现日志数据批量插入

背景最近再做一个需求&#xff0c;就是对站点的一些事件进行埋点&#xff0c;说白了就是记录用户的访问行为。那么这些数据怎么保存呢&#xff0c;人家点一下保存一下&#xff1f;显然不合适&#xff0c;肯定是需要批量保存&#xff0c;提高效率。问题窥探首先&#xff0c;我想…

[导入]php 安全基础 附录B. 函数

附录B. 函数 在我写作本书的时候&#xff0c;http://php.net/quickref.php列出了共3917个函数&#xff0c;其中包括一些类似函数的语法结构&#xff0c;在此我不准备把它们从函数中区分开来&#xff0c;而是把它作为函数看待。 由于函数数量很大&#xff0c;一一说明它们的正确…

python os rename用法_Python os.rename() 方法

Python os.rename() 方法概述os.rename() 方法用于命名文件或目录&#xff0c;从 src 到 dst,如果dst是一个存在的目录, 将抛出OSError。语法rename()方法语法格式如下&#xff1a;os.rename(src, dst)参数src -- 要修改的目录名dst -- 修改后的目录名返回值该方法没有返回值实…

java匿名内部类runnable_java匿名内部类用法总结实例源码

java匿名内部类用法总结实例源码。当需要extends一个类&#xff0c;或implements一个接口的时候&#xff0c;可以直接new一个这个类或接口的对象出来&#xff0c;然后在后面加&#xff5b;&#xff5d;&#xff0c;里面写你准备写在子类里面的所有东西。这样&#xff0c;new出来…

6段Python代码刻画深度学习历史:从最小二乘法到深度神经网络

最小二乘法深度学习的一切都起源于这个数学片段&#xff08;我把它用Python 写了出来&#xff09;&#xff1a;这一方法是 1805 年巴黎数学家阿德利昂玛利埃勒让德首次提出的&#xff08;1805&#xff0c;Legendre&#xff09;&#xff0c;勒让德建立了许多重要的定理&#xff…

win7美化_Potplayer64位美化版,无棒子的tv推送

potplayer 64位是一款视频播放器&#xff0c;potplayer 64位目前正在新功能全力开发中&#xff0c;由于采用delphi编译程序kmplayer的一些弊端&#xff0c;姜龙喜先生为改进播放器本身的一些性能而重新用vc进行构架&#xff0c;有需要的伙伴们可以移步简易下载站获取&#xff0…

如何在 C# 8 中使用 Channels

在面对 生产者-消费者 的场景下&#xff0c; netcore 提供了一个新的命名空间 System.Threading.Channels 来帮助我们更高效的处理此类问题&#xff0c;有了这个 Channels 存在, 生产者 和 消费者 可以各自处理自己的任务而不相互干扰&#xff0c;有利于两方的并发处理&#x…

mockito mock void方法_使用 Junit + Mockito 实践单元测试!

一、前言相信做过开发的同学&#xff0c;都多多少少写过下面的代码&#xff0c;很长一段时间我一直以为这就是单元测试...SpringBootTestRunWith(SpringRunner.class)public class UnitTest1 {Autowiredprivate UnitService unitService;Testpublic void test() {System.out.pr…

Outlook 阅读窗格(Reading Pane)

打开 Outlook 点一下邮件&#xff0c;在右侧会有每封邮件的内容预览。突然有一天你发现它不在了知道该怎么调出来吗&#xff1f;我是刚学到的。英文: View--->Reading Pane--->Right&#xff08;右侧&#xff09; Bottom&#xff08;底部&#xff09; Off&#xf…

java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能

jsp 和 javaBean 实现计算器功能try {calculator.calculate();} catch (Exception e) {out.write(e.getMessage());}%>简单的计算器第一个参数运算符-*/第二个参数结果package de.bvb.domain;import java.math.BigDecimal;public class Calculator {private String firstNum…

人为什么会出轨?麻省理工学院告诉你:男女配对的真相

该实验出自麻省理工学院著名经济学家Dan Ariely的《The Upside of Irrationality》。结果很有趣&#xff0c;在我们的生活中也尤为常见。实验人员找来100位正值青春年华的大学生&#xff0c;男女各半。然后制作了100张卡片&#xff0c;卡片上写了从1到100总共一百个数字。单数的…

当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?

OpenTelemetry 介绍我在之前的几篇文章都介绍了 OpenTelemetry, 你可以在这里找到OpenTelemetry - 云原生下可观测性的新标准深入研究.NET 5的开放式遥测OpenTelemetry是谷歌和微软共同推进的云原生监控的新规范&#xff0c; 兼容OpenTracing和OpenCensusOpenTelemetry的终极目…

教程大派送

都是华夏的 喜欢的拿去远程控制任我行脱壳 - [Money] 链接地址 :[url]http://download.77169.com/donghua/Crcak/xgyc.zip[/url]让你QQ永远不被***盗走 - [antty] 链接地址: [url]http://download.77169.com/donghua/hackQQ/qqfd.zip[/url]BT下载之疯狂抓鸡 - [奶茶] 链接地址:…

kotlin中mainactivity无法直接调用xml中的控件_使用52North 客户端接口调用OGC WPS服务...

52North是一个来自研究机构、工业界和公共行政管理界的研究者组成的开放国际合作组织&#xff0c;他们通过协作研发流程促进地理信息学创新。具体来说他们开发新的地理信息概念和技术&#xff0c;例如用于管理时空测量数据&#xff0c;以及通过网络共享地理处理技术。他们评估新…

python 密码学 模块_python学习-itsdangerous模块-黑马程序员技术交流社区

博客链接地址&#xff1a;http://www.zhuyannan.top/itsdangerous-加密你的数据/如果你想向不可信的环境发送数据&#xff0c;但又担心数据被别人利用&#xff0c;就可以使用 itsdangerous来加密签名你的数据。接收者可以破译内容&#xff0c;来看看你的包裹里有什么&#xff0…

明天放假,我放价!一个国庆假期教你学会数学建模

原价298元&#xff0c;国庆放价&#xff01;248元即可报名学习&#xff01;数学建模涉及的内容比较广泛&#xff0c;比如碎纸片问题中所涉及的图像识别及神经网络、小区开放问题中所涉及的车流模拟仿真、还有“互联网”时代的出租车资源配置中所涉及的运筹调度。或许数学建模的…

微软开源可扩展存储引擎Extensible Storage Engine

喜欢就关注我们吧&#xff01;昨日&#xff0c;微软副总裁 Scott Van Vliet 在推特上表示&#xff0c;可扩展存储引擎 Extensible Storage Engine&#xff08;ESE&#xff09;现已开源。可扩展存储引擎 Extensible Storage Engine&#xff08;ESE&#xff0c;也称 JET Blue&…

.NET应用程序中异步调用Web Service的几种方法 come from: veryhappy(wx.net)

测试程序界面 图一&#xff0c;调用前界面 图二&#xff0c;调用后界面 详细代码实现 闲言少叙&#xff0c;直接进入主题吧。首先一个声明一个类&#xff08;将来在客户端与服务器间传递&#xff09;&#xff1a; public classClass1 { private int _ID; priv…