R语言遗传算法
来源:互联网 发布:成都房地产大数据分析 编辑:程序博客网 时间:2024/05/29 05:05
R语言中有程序包实现了遗传算法,通常使用mcga\genalg\rgenoud
mcga包
mcga主要包括两个函数,mcga与multi_mcga,其中mcga适用于单目标函数最小化问题
而multi_mcga可以使用mcga一样的逻辑实现多目标化的优化
计算f(x) = x&sin(x)
library(GA)library(foreach)library(mcga)getAdjust <- function(x){ if(x>=0 && x<=12.55) { return(-(x*sin(x))) }else{ return(exp(100)) }}m = mcga(popsize = 20,chsize = 1,minval = 0,maxval = 12.55,maxiter = 1000,evalFunc = getAdjust)str(m) #List of 10#$ population: num [1:20, 1] 7.96 7.96 7.96 7.96 7.96 ...#$ costs : num [1:20] -7.91 -7.91 -7.91 -7.91 -7.91 ...#$ popsize : num 20#$ chsize : num 1#$ crossprob : num 1#$ mutateprob: num 0.01#$elitism : num 1#$ minval : num 0#$ maxval : num 12.6#$ maxiter : num 1000#从population可知,我们求得的最优解为7.98,需要注意的是,在计算适应度的函数中,需要限制参数#的范围,由于评估函数的是针对最小化问题的,所以要求最大值,需要加个负号
模型参数介绍
#mcga(popsize, chsize, crossprob = 1.0, mutateprob = 0.01, # elitism = 1, minval, maxval, maxiter = 10, evalFunc)#popsize 种群规模#chsize 参数数量#crossprob 交叉概率,默认为1.0#mutateprob 变异概率,默认为0.01#elitism 直接复制到子代的最佳个体数目,默认为1个#minval 随机生成种群的下边界值#maxval 随机生成种群的上边界值#maxiter 最大世代次数,即繁殖次数,默认为10#evalFunc 一个R函数,用来计算个体适应度,每一个问题都默认是最少化问题
genalg包
genalg包是基于R语言用于二元和浮点染色体的遗传算法,它主要包括了两个函数 rbga.bin与rbga
rbga.bin实现了基于二元染色体的遗传算法,可用于特征选择,其结果最优时对应的染色体的评估结果是最小的
rbga实现了基于浮点染色体的遗传算法,采用待优化的浮点值的最大最小值作为输入,对应最佳染色体的评估结果是最小的
它们的实现过程,都需要自定义评估函数evalFunc,rbga.bin的函数evalFunc以二元染色体为参数,而在rbga函数中,需要一个浮点向量作为参数,它们都可以通过设置monitorFunc对遗传算法的实现过程进行监控,monitorFunc需要rbga对象作为参数
与mcga包不同,genalg包中的rbga对象,可以调用plot函数进行进行可视化,展现遗传算法运行过程中的特征,默认显示最小值和平均的评估值,指示遗传算法执行的进度。直方图用于呈现二元染色体基因的选择频率,即一个基因在当前种群被选择的次数如果是浮点染色体,它将为每个变量绘制直方图来说明当前种群中被选择的值。
参数图用于呈现评估函数与变量值,这对查看变量与评估值之间的相关关系是很有用
library(genalg)#定义适应度函数getAdjust <- function(x){ if(x>=0 && x<=12.55) { return(-(x*sin(x))) }else{ return(exp(100)) }}#定义监控函数monitor = function(rbga0){ #打印种群中的第一个个体的值population[1,] print(rbga0$population[1,])}rbgaObj = rbga(stringMin = c(0),stringMax = c(12.55),popSize = 50,iters = 1000, mutationChance = 0.01,monitorFunc = monitor,evalFunc = getAdjust,verbose = TRUE)str(rbgaObj)#List of 12#$ type : chr "floats chromosome"#$ stringMin : num 0#$ stringMax : num 12.6#$ popSize : num 50#$ iters : num 1000#$ suggestions : NULL#$ population : num [1:50, 1] 7.98 7.98 7.98 7.98 7.98 ...#$ elitism : num 10#$ mutationChance: num 0.01#$ evaluations : num [1:50] -7.92 -7.92 -7.92 -7.92 -7.92 ...#$ best : num [1:1000] -7.92 -7.92 -7.92 -7.92 -7.92 ...#$ mean : num [1:1000] 1.291 -0.251 -1.625 -2.506 -3.273 ...#- attr(*, "class")= chr "rbga"#从population可知,我们求得的最优解为7.98,这与我们上文捉到的最优解相同,对rbgaObj调用,可知,迭代次数的增加。#评估先是骤降,经过一段不稳定的变化之后,在1000次附近趋于稳定。plot(rbgaObj)#当设置参数type = "hist"时,可得直方图,如图可知,可知变量在7.98附近取值的频率最高,可见算法在此处收敛,并得到最优解plot(rbgaObj,type = "hist",breaks = 50)#当设置参数type = "vars"时,可得参数图,从图中可以看出,当变量值在7.98处时,评估值最低,对应全局最优plot(rbgaObj,type = "vars")
模型参数介绍
rbga(stringMin=c(), stringMax=c(), suggestions=NULL, popSize=200, iters=100, mutationChance=NA, elitism=NA, monitorFunc=NULL, evalFunc=NULL, showSettings=FALSE, verbose=FALSE)#stringMin 含有每个基因最小值的向量#stringMax 含有每个基因最大值的向量#suggestions 建议染色体可选列表#popSize 种群规模,个体数量,也是染色体数量,默认200#iters 迭代次数,默认为200#mutationChance 染色体的基因突变机会,默认为 1/(size+1),它影响收敛速度和搜索空间的探测,低的突变率收敛更加快,然而高的突变率增加搜索空间的跨度#elitism 保留到子代的染色体的数目,默认为为种群规模的20%#monitorFunc 监控函数,每产生一代后运行#evalFunc 用户自定义方法,计算给定染色体的适应度#showSettings 如果为TRUE,设置信息会打到屏幕上,默认FALSE#verbose 如果为TRUE,算法将会打印更多的动态信息,默认FALSE
阅读全文
0 0
- R语言遗传算法
- 转载R语言实现遗传算法
- 利用R写遗传算法
- 遗传算法_C语言
- 遗传算法C语言源码
- 遗传算法:go语言实现
- 遗传算法的C语言实现(二)
- Go语言如何实现遗传算法
- Go语言如何实现遗传算法
- Go语言如何实现遗传算法
- R语言决策树算法
- R语言推荐算法
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- 遗传算法
- 一个手风琴效果的jquery动画
- 值得学习的C/C++语言开源项目
- Ubuntu 下 NFS环境的搭建
- scala 随笔(4) implicit 隐式转换 和冲突解决
- AJax请求数据用Jquary向select追加<option>
- R语言遗传算法
- 自定义Stack、Queue类
- C++输入输出
- 计算组合数
- Python自动测试打开chrome时,chrome地址栏总是出现data:;
- solidity数据结构
- HDU 1495 喝可乐(BFS)
- 数据结构之通用树(使用链表实现树的存储结构,双亲孩子表示法)
- python中图片格式的转换