A. 请问编程小白,想自学遗传算法编程,用于证券市场交易策略效果模拟与
建议学c#,语法简练优雅,类库功能丰富。
c#的框架类库目前已超过15000个类型。很多功能都被封装好了,不用你自己去一一实现,相当于站在巨人的肩膀上。
C#开发windows平台的应用程序非常成熟,开发效率很高。
B. MATLAB中的遗传算法最佳适应度值和平均适应度曲线怎么描绘
每一代群体中每一个个体的适应度都必须算出来对吧,把它存在一个向量里面,然后将每一代中适应度最大的max()和平均值mean()取出来放在一个向量里面,当进化完毕的时候画出这个向量就行了
C. 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
选择完后就是进行交配和变异,这个两个步骤很好理解。就是对基因序列进行改变,只不过改变的方式不一样
交配:
[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()
完整代码可以在github查看
欢迎访问我的个人博客
阅读全文
D. 有没有用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
E. 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()
F. 数据挖掘为什么要用java或python
主要是方便,python的第三方模块很丰富,而且语法非常简练,自由度很高,python的numpy、scipy、matplotlib模块可以完成所有的spss的功能,而且可以根据自己的需要按照定制的方法对数据进行清洗、归约,需要的情况下还可以跟sql进行连接,做机器学习,很多时候数据是从互联网上用网络爬虫收集的,python有urllib模块,可以很简单的完成这个工作,有些时候爬虫收集数据还要对付某些网站的验证码,python有PIL模块,可以方便的进行识别,如果需要做神经网络、遗传算法,scipy也可以完成这个工作,还有决策树就用if-then这样的代码,做聚类不能局限于某几种聚类,可能要根据实际情况进行调整,k-means聚类、DBSCAN聚类,有时候可能还要综合两种聚类方法对大规模数据进行聚类分析,这些都需要自行编码来完成,此外,基于距离的分类方法,有很多距离表达方式可以选用,比如欧几里得距离、余弦距离、闵可夫斯基距离、城市块距离,虽然并不复杂, 但是用python编程实现很方便,基于内容的分类方法,python有强大的nltk自然语言处理模块,对语言词组进行切分、收集、分类、统计等。
综上,就是非常非常方便,只要你对python足够了解,你发现你可以仅仅使用这一个工具快速实现你的所有想法
G. python 遗传算法问题
遗传算法(GA)是最早由美国Holland教授提出的一种基于自然界的“适者生存,优胜劣汰”基本法则的智能搜索算法。
遗传算法也是借鉴该基本法则,通过基于种群的思想,将问题的解通过编码的方式转化为种群中的个体,并让这些个体不断地通过选择、交叉和变异算子模拟生物的进化过程,然后利用“优胜劣汰”法则选择种群中适应性较强的个体构成子种群,然后让子种群重复类似的进化过程,直到找到问题的最优解或者到达一定的进化(运算)时间。
H. 如何在遗传算法中设置变量约束条件
1、首先打开matlab软件,在“APP(应用)”选项卡中选择“Optimization(优化)”工具箱。
I. 利用遗传算法求解区间[0, 31]上的二次函数y=x 2次方 的最大值
靠 你也太懒了
J. 如何安装python遗传算法包
包里有setup文件吗?
有的话双击点开,就自动装上了