r

mcga包

我们使用mcga包的mcga()函数,可以实现多变量的遗传算法。

mcga包是一个遗传算法快速的工具包,主要解决实值优化的问题。它使用的变量值表示基因序列,而不是字节码,因此不需要编解码的处理。mcga实现了遗传算法的交配和突变的操作,并且可以进行大范围和高精度的搜索空间的计算,算法的主要缺点是使用了256位的一元字母表。
例1:设fx=(x1-5)^2 + (x2-55)^2 +(x3-555)^2 +(x4-5555)^2 +(x5-55555)^2,计算fx的最小值,其中x1,x2,x3,x4,x5为5个不同的变量。
首先,安装mcga包。

library(mcga)

参数说明:

popsize,个体数量,即染色体数目
chsize,基因数量,限参数的数量
crossprob,交配概率,默认为1.0
mutateprob,突变概率,默认为0.01
elitism,精英数量,直接复制到下一代的染色体数目,默认为1
minval,随机生成初始种群的下边界值
maxval,随机生成初始种群的上边界值
maxiter,繁殖次数,即循环次数,默认为10
evalFunc,适应度函数,用于给个体进行评价
接下来,我们给定一个优化的问题,通过mcga()函数,计算最优化的解。

f<-function(x){x1<-0;x2<-0;x3<-0;x4<-0;x5<-0;x=(x1-5)^2+(x2-55)^2+(x3-555)^2+(x4-5555)^2+(x5-55555)^2;min(x)}
m <- mcga(popsize=200,chsize=5,  minval=0.0, maxval=999999,  maxiter=2500, crossprob=1.0, mutateprob=0.01, evalFunc=f)
print(m$population[1,])

genalg包
从直观上看,如果想得到fx的最小值,其实当x1=sqrt(exp(1))=1.648721, x2=log(pi)=1.14473时,fx=0为最小值。同样地,如果使用穷举法,通过循环的方法找到这2个变量,估计会很费时的,我也不做测试了。下面我们看一下rbga()函数的遗传算法的运行情况。
参数说明:

stringMin,设置每个基因的最小值
stringMax,设置每个基因的最大值
suggestions,建议染色体的可选列表
popSize,个体数量,即染色体数目,默认为200
iters,迭代次数,默认为100
mutationChance,突变机会,默认为1/(size+1),它影响收敛速度和搜索空间的探测,低机率导致更快收敛,高机率增加了搜索空间的跨度。
elitism,精英数量,默认为20%,直接复制到下一代的染色体数目
monitorFunc,监控函数,每产生一代后运行
evalFunc,适应度函数,用于给个体进行评价
showSettings,打印设置,默认为false
verbose,打印算法运行日志,默认为false
接下来,我们给定一个优化的问题,通过rbga()函数,计算最优化的解。

library(genalg)
?rbga
evaluate <- function(string=c()) {
    returnVal = NA;
    if (length(string) == 2) {
        returnVal = abs(string[1]-pi) + abs(string[2]-sqrt(50));
    } else {
        stop("Expecting a chromosome of length 2!");
    }
    returnVal
}

monitor <- function(obj) {
    # plot the population
    xlim = c(obj$stringMin[1], obj$stringMax[1]);
    ylim = c(obj$stringMin[2], obj$stringMax[2]);
    plot(obj$population, xlim=xlim, ylim=ylim, 
    xlab="pi", ylab="sqrt(50)");
}

rbga.results = rbga(c(1, 1), c(5, 10), monitorFunc=monitor, 
    evalFunc=evaluate, verbose=TRUE, mutationChance=0.01)

plot(rbga.results)
plot(rbga.results, type="hist")
plot(rbga.results, type="vars")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值