当前位置:首页 » 编程语言 » 遗传算法python

遗传算法python

发布时间: 2022-02-08 02:56:55

① 利用遗传算法求解区间[0, 31]上的二次函数y=x 2次方 的最大值

靠 你也太懒了

② 有没有用python实现的遗传算法优化BP神经网络的代码

下面是函数实现的代码部分:
clc
clear all
close all
%% 加载神经网络的训练样本 测试样本每列一个样本 输入P 输出T,T是标签
%样本数据就是前面问题描述中列出的数据
%epochs是计算时根据输出误差返回调整神经元权值和阀值的次数
load data
% 初始隐层神经元个数
hiddennum=31;
% 输入向量的最大值和最小值
threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];
inputnum=size(P,1); % 输入层神经元个数
outputnum=size(T,1); % 输出层神经元个数
w1num=inputnum*hiddennum; % 输入层到隐层的权值个数
w2num=outputnum*hiddennum;% 隐层到输出层的权值个数
N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数
%% 定义遗传算法参数
NIND=40; %个体数目
MAXGEN=50; %最大遗传代数
PRECI=10; %变量的二进制位数
GGAP=0.95; %代沟
px=0.7; %交叉概率
pm=0.01; %变异概率
trace=zeros(N+1,MAXGEN); %寻优结果的初始值
FieldD=[repmat(PRECI,1,N);repmat([-0.5;0.5],1,N);repmat([1;0;1;1],1,N)]; %区域描述器
Chrom=crtbp(NIND,PRECI*N); %初始种群
%% 优化
gen=0; %代计数器
X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换
ObjV=Objfun(X,P,T,hiddennum,P_test,T_test); %计算目标函数值
while gen

③ python有没有简单的遗传算法库

首先遗传算法是一种优化算法,通过模拟基因的优胜劣汰,进行计算(具体的算法思路什么的就不赘述了)。大致过程分为初始化编码、个体评价、选择,交叉,变异。

以目标式子 y = 10 * sin(5x) + 7 * cos(4x)为例,计算其最大值

首先是初始化,包括具体要计算的式子、种群数量、染色体长度、交配概率、变异概率等。并且要对基因序列进行初始化

[python]view plain

  • pop_size=500#种群数量

  • max_value=10#基因中允许出现的最大值

  • chrom_length=10#染色体长度

  • pc=0.6#交配概率

  • pm=0.01#变异概率

  • results=[[]]#存储每一代的最优解,N个二元组

  • fit_value=[]#个体适应度

  • fit_mean=[]#平均适应度

  • pop=geneEncoding(pop_size,chrom_length)


  • 其中genEncodeing是自定义的一个简单随机生成序列的函数,具体实现如下

    [python]view plain

  • defgeneEncoding(pop_size,chrom_length):

  • pop=[[]]

  • foriinrange(pop_size):

  • temp=[]

  • forjinrange(chrom_length):

  • temp.append(random.randint(0,1))

  • pop.append(temp)

  • returnpop[1:]

  • 编码完成之后就是要进行个体评价,个体评价主要是计算各个编码出来的list的值以及对应带入目标式子的值。其实编码出来的就是一堆2进制list。这些2进制list每个都代表了一个数。其值的计算方式为转换为10进制,然后除以2的序列长度次方减一,也就是全一list的十进制减一。根据这个规则就能计算出所有list的值和带入要计算式子中的值,代码如下

    [python]view plain

  • #0.0coding:utf-80.0

  • #解码并计算值

  • importmath

  • defdecodechrom(pop,chrom_length):

  • temp=[]

  • foriinrange(len(pop)):

  • t=0

  • forjinrange(chrom_length):

  • t+=pop[i][j]*(math.pow(2,j))

  • temp.append(t)

  • returntemp

  • defcalobjValue(pop,chrom_length,max_value):

  • temp1=[]

  • obj_value=[]

  • temp1=decodechrom(pop,chrom_length)

  • foriinrange(len(temp1)):

  • x=temp1[i]*max_value/(math.pow(2,chrom_length)-1)

  • obj_value.append(10*math.sin(5*x)+7*math.cos(4*x))

  • returnobj_value

  • 有了具体的值和对应的基因序列,然后进行一次淘汰,目的是淘汰掉一些不可能的坏值。这里由于是计算最大值,于是就淘汰负值就好了

    [python]view plain

  • #0.0coding:utf-80.0

  • #淘汰(去除负值)

  • defcalfitValue(obj_value):

  • fit_value=[]

  • c_min=0

  • foriinrange(len(obj_value)):

  • if(obj_value[i]+c_min>0):

  • temp=c_min+obj_value[i]

  • else:

  • temp=0.0

  • fit_value.append(temp)

  • returnfit_value


  • 然后就是进行选择,这是整个遗传算法最核心的部分。选择实际上模拟生物遗传进化的优胜劣汰,让优秀的个体尽可能存活,让差的个体尽可能的淘汰。个体的好坏是取决于个体适应度。个体适应度越高,越容易被留下,个体适应度越低越容易被淘汰。具体的代码如下

    [python]view plain

  • #0.0coding:utf-80.0

  • #选择

  • importrandom

  • defsum(fit_value):

  • total=0

  • foriinrange(len(fit_value)):

  • total+=fit_value[i]

  • returntotal

  • defcumsum(fit_value):

  • foriinrange(len(fit_value)-2,-1,-1):

  • t=0

  • j=0

  • while(j<=i):

  • t+=fit_value[j]

  • j+=1

  • fit_value[i]=t

  • fit_value[len(fit_value)-1]=1

  • defselection(pop,fit_value):

  • newfit_value=[]

  • #适应度总和

  • total_fit=sum(fit_value)

  • foriinrange(len(fit_value)):

  • newfit_value.append(fit_value[i]/total_fit)

  • #计算累计概率

  • cumsum(newfit_value)

  • ms=[]

  • pop_len=len(pop)

  • foriinrange(pop_len):

  • ms.append(random.random())

  • ms.sort()

  • fitin=0

  • newin=0

  • newpop=pop

  • #转轮盘选择法

  • whilenewin<pop_len:

  • if(ms[newin]<newfit_value[fitin]):

  • newpop[newin]=pop[fitin]

  • newin=newin+1

  • else:

  • fitin=fitin+1

  • pop=newpop

  • 以上代码主要进行了3个操作,首先是计算个体适应度总和,然后在计算各自的累积适应度。这两步都好理解,主要是第三步,转轮盘选择法。这一步首先是生成基因总数个0-1的小数,然后分别和各个基因的累积个体适应度进行比较。如果累积个体适应度大于随机数则进行保留,否则就淘汰。这一块的核心思想在于:一个基因的个体适应度越高,他所占据的累计适应度空隙就越大,也就是说他越容易被保留下来。
  • 选择完后就是进行交配和变异,这个两个步骤很好理解。就是对基因序列进行改变,只不过改变的方式不一样

    交配:

    [python]view plain

  • #0.0coding:utf-80.0

  • #交配

  • importrandom

  • defcrossover(pop,pc):

  • pop_len=len(pop)

  • foriinrange(pop_len-1):

  • if(random.random()<pc):

  • cpoint=random.randint(0,len(pop[0]))

  • temp1=[]

  • temp2=[]

  • temp1.extend(pop[i][0:cpoint])

  • temp1.extend(pop[i+1][cpoint:len(pop[i])])

  • temp2.extend(pop[i+1][0:cpoint])

  • temp2.extend(pop[i][cpoint:len(pop[i])])

  • pop[i]=temp1

  • pop[i+1]=temp2


  • 变异:
  • [python]view plain

  • #0.0coding:utf-80.0

  • #基因突变

  • importrandom

  • defmutation(pop,pm):

  • px=len(pop)

  • py=len(pop[0])

  • foriinrange(px):

  • if(random.random()<pm):

  • mpoint=random.randint(0,py-1)

  • if(pop[i][mpoint]==1):

  • pop[i][mpoint]=0

  • else:

  • pop[i][mpoint]=1


  • 整个遗传算法的实现完成了,总的调用入口代码如下
  • [python]view plain

  • #0.0coding:utf-80.0

  • importmatplotlib.pyplotasplt

  • importmath

  • fromselectionimportselection

  • fromcrossoverimportcrossover

  • frommutationimportmutation

  • frombestimportbest

  • print'y=10*math.sin(5*x)+7*math.cos(4*x)'

  • #计算2进制序列代表的数值

  • defb2d(b,max_value,chrom_length):

  • t=0

  • forjinrange(len(b)):

  • t+=b[j]*(math.pow(2,j))

  • t=t*max_value/(math.pow(2,chrom_length)-1)

  • returnt

  • pop_size=500#种群数量

  • max_value=10#基因中允许出现的最大值

  • chrom_length=10#染色体长度

  • pc=0.6#交配概率

  • pm=0.01#变异概率

  • results=[[]]#存储每一代的最优解,N个二元组

  • fit_value=[]#个体适应度

  • fit_mean=[]#平均适应度

  • #pop=[[0,1,0,1,0,1,0,1,0,1]foriinrange(pop_size)]

  • pop=geneEncoding(pop_size,chrom_length)

  • foriinrange(pop_size):

  • obj_value=calobjValue(pop,chrom_length,max_value)#个体评价

  • fit_value=calfitValue(obj_value)#淘汰

  • best_indivial,best_fit=best(pop,fit_value)#第一个存储最优的解,第二个存储最优基因

  • results.append([best_fit,b2d(best_indivial,max_value,chrom_length)])

  • selection(pop,fit_value)#新种群复制

  • crossover(pop,pc)#交配

  • mutation(pop,pm)#变异

  • results=results[1:]

  • results.sort()

  • X=[]

  • Y=[]

  • foriinrange(500):

  • X.append(i)

  • t=results[i][0]

  • Y.append(t)

  • plt.plot(X,Y)

  • plt.show()

  • 最后调用了一下matplotlib包,把500代最优解的变化趋势表现出来。
  • 完整代码可以在github查看

    欢迎访问我的个人博客

    阅读全文

④ 使用流行的遗传算法python库是哪个

刚从github上面安装了两个遗传算法的库,tpot和gplearn。才刚接触遗传算法,不敢多讲

⑤ 如何在遗传算法中设置变量约束条件

1、首先打开matlab软件,在“APP(应用)”选项卡中选择“Optimization(优化)”工具箱。

⑥ python 哪个包里有 遗传算法

scikit-opt调研过很多遗传算法库,这个挺好用的。

#目标函数
defdemo_func(x):
x1,x2,x3=x
returnx1**2+(x2-0.05)**2+x3**2
fromgaimportGA

调用遗传算法求解:

ga=GA(func=demo_func,lb=[-1,-10,-5],ub=[2,10,2],max_iter=500)
best_x,best_y=ga.fit()

⑦ MATLAB中的遗传算法最佳适应度值和平均适应度曲线怎么描绘

每一代群体中每一个个体的适应度都必须算出来对吧,把它存在一个向量里面,然后将每一代中适应度最大的max()和平均值mean()取出来放在一个向量里面,当进化完毕的时候画出这个向量就行了

⑧ python 遗传算法问题

遗传算法(GA)是最早由美国Holland教授提出的一种基于自然界的“适者生存,优胜劣汰”基本法则的智能搜索算法。
遗传算法也是借鉴该基本法则,通过基于种群的思想,将问题的解通过编码的方式转化为种群中的个体,并让这些个体不断地通过选择、交叉和变异算子模拟生物的进化过程,然后利用“优胜劣汰”法则选择种群中适应性较强的个体构成子种群,然后让子种群重复类似的进化过程,直到找到问题的最优解或者到达一定的进化(运算)时间。

⑨ 如何安装python遗传算法包

包里有setup文件吗?
有的话双击点开,就自动装上了

⑩ 请问编程小白,想自学遗传算法编程,用于证券市场交易策略效果模拟与

建议学c#,语法简练优雅,类库功能丰富。
c#的框架类库目前已超过15000个类型。很多功能都被封装好了,不用你自己去一一实现,相当于站在巨人的肩膀上。
C#开发windows平台的应用程序非常成熟,开发效率很高。

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:626
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:356
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:71
php微信接口教程 发布:2025-04-16 17:07:30 浏览:296
android实现阴影 发布:2025-04-16 16:50:08 浏览:787
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:337
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:202
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:798
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:355
土压缩的本质 发布:2025-04-16 16:13:21 浏览:582