您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页R语言GA包的简介及相关代码示例

R语言GA包的简介及相关代码示例

来源:宝玛科技网
R语言GA包的简介及相关代码示例

GA包是为了在R语言的环境中实现基于遗传算法分析的工具,包GA提供了相当丰富内部函数供用户使用。GA包的主程序叫做 ga,包含了下列主要参数:

ga(type = c(\"binary\ fitness, ..., min, max, nBits,

population = gaControl(type)@population, selection = gaControl(type)@selection, crossover = gaControl(type)@crossover, mutation = gaControl(type)@mutation, popSize = 50, pcrossover = 0.8, pmutation = 0.1, elitism = max(1, round(popSize * 0.05)), monitor = gaMonitor, maxiter = 100, run = maxiter, maxfitness = -Inf, names = NULL, suggestions, seed) 其中,有效参数是:

type:决定遗传算法分析的决策变量的类型,可能的值为:”binary”表示决策变量为二进制型;”real-valued”表示决策变量为实数型,即决策变量为浮点型实数;”premutation”表示涉及到一个列表排序的问题的变量。

fitness:表示适应性函数,任何一个可行的R的函数,只要它有着

的函数名,都可以代表一个可行解,而且会返回一个描述适应度的数值。

min,max:表示决策变量上下限的向量,在实数类型中,它代表着遗传算法搜索空间的范围。

nBits:表示二进制编码的位数的值。 population:用于随机产生初始种群的R函数

selection:用于模拟自然选择过程的R函数,根据每一个个体的适应度从当前世代中挑选产生新的世代。

pcrossover:表示交叉概率的值,默认概率为0.8 pmutation: 表示变异概率的值,默认概率为0.1 popSize:表示种群大小的量。

elitism:表示在每一次种群更迭中最适应的个体存活下来的比例,默认设定为5%的个体会在更迭中存话而形成新的世代。

monitor:将当前ga对象的状态作为输入值的函数,并显示搜索结果的进化过程。在默认状态下,函数gaMonitor会将每一次更迭结果的平均值与最适值显示出来。

maxiter:表示最大迭代数。

run:表示连续出现一定数目的未改善世代后,GA搜索终止。 maxfitness:表示适应值的上限,满足后GA搜索终止。 names:表示决策变量名的向量。

suggestions:表示结果名称的字符串矩阵。

seed:包含随机数生成器状态的整数向量。这个参数可以用来复

制一个遗传算法搜索的结果。

ga程序至少有type和fitness这两个参数。对于二进制搜索,则必须有nBits参数;对于实数类型的决策变量,则必须有min和max这两个参数。

执行ga程序后,会返回一系列描述对象状态与结果的值,包括: iter:表示当前进行搜索的循环数。 fitness:评价当前种群的适应度

best:在每次GA搜索的循环中最大适应度值。 mean:在每次GA搜索循环中平均适应度至。 fitnessValue:GA搜索结束后最大的适应度值。

solution:表示最终结果的矩阵,其行数为找到的最优解个数,列数为决策变量的个数。

要在R中调用GA包,首先要进行安装,输入以下代码: > install.packages(\"GA\")

安装完成后调用GA包,输入以下代码: > library(GA)

调用完成后便可以使用GA包中的内置函数,以下是GA包在人口增长预测分析的实际应用,数据为非真实数据。

以下为XX市1993-2007年人口数据(表一):

年份 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007

表一

单位:万人 人口数 67.52 68.01 68.50 68.99 69.49 69.99 70.49 71.00 71.51 72.02 72.54 73.06 73.59 74.12 73.65 利用遗传算法对该市2010,2020,2030年人口数进行预测,程序代码如下所示:

> library(GA) > t<-c(1993:2007)

>populationN<-c(67.52,68.01,68.50,68.99,69.49,69.99,70.49,71.00,71.51,72.02,72.54,73.06,73.59,74.12,73.65)

> functionP<-function(x,theta) + 67.52*(1+theta)^(x-1993)

> fitness1<-function(x,y,theta)-sum((y-functionP(x,theta))^2) > GA1<-ga(type=\"real-valued\+ x=t,y=populationN,min=0,max=1,

+ popSize=500,crossover=gareal_blxCrossover,maxiter=5000, + run=200,names= c(\"rate\")) 本程序基于人口自然增长公式,即:

P(t)=P(t0)(1+r)t-t0 式—1

式中:P(t)为规划年人口数;P(t0)为基期年人口数;r为人口年增长率。

程序运行后将显示搜索结果:

Iter = 1 | Mean = -104757579133 | Best = -1.322362 ......

Iter = 346 | Mean = -23958247384 | Best = -0.80307 输入 summary(GA1)将对结果进行分析并显示,从而得到最终的人口自然增长率:

+-----------------------------------+ | Genetic Algorithm |

+-----------------------------------+

GA settings:

Type = real-valued Population size = 500 Number of generations = 5000 Elitism = 25 Crossover probability = 0.8 Mutation probability = 0.1 Search domain rate Min 0 Max 1

GA results:

Iterations = 346 Fitness function value = -0.80307 Solution = rate [1,] 0.007004309

其中0.007004309便是我们此次所求公式中的r即人口自然增长率。

这之后输入代码:

> functionM<-function(x,theta) + 67.52*exp(theta*(x-1993))

> fitness2<-function(x,y,theta)-sum((y-functionM(x,theta))^2) > GA2<- ga(type=\"real-valued\+ x=t,y=populationN,min=0,max=1,

+ popSize=500,crossover=gareal_blxCrossover,maxiter=5000, + run=200,names= c(\"rate2\")) 此代码基于马尔萨斯人口模型即:

p(t)=p(t0)er(t-t0) 式—2

式中:p(t)是t年预测人口数;p(t0)是基期年人口数;r是人口年增长率。

输入summary(GA2)将显示以下结果:

+-----------------------------------+ | Genetic Algorithm |

+-----------------------------------+

GA settings:

Type = real-valued Population size = 500 Number of generations = 5000 Elitism = 25

Crossover probability = 0.8 Mutation probability = 0.1 Search domain rate2 Min 0 Max 1

GA results:

Iterations = 322 Fitness function value = -0.80307 Solution = rate2 [1,] 0.0069798

即得以此公式计算所需的人口增长率,为0.0069798. 为提高预测准确率,现将式—1和式—2加权求和,得式—3

P(t)=w1(p(t0)(1+0.007004309)(t-t0))+w2(p(t0)e0.0069798(t-t0)) 式—3.

式中w1和w2为这两个公式的权重,现利用遗传算法确定各权重值,代码如下:

> function3<-function(x,theta)

+theta[1]*(67.52*(1+0.007004309)^(x-1993))+theta[2]*(67.52*exp(0.0069798*(x-1993)))

> fitness3<-function(theta,x,y)-sum((y-function3(x,theta))^2) > GA3<-ga(type=\"real-valued\+ x=t,y=populationN,min=c(0,0),max=c(1,1),

+ popSize=500,crossover=gareal_blxCrossover,maxiter=5000, + run=200,names= c(\"w1\> summary(GA3)

运行之后得到以下结果:

+-----------------------------------+ | Genetic Algorithm |

+-----------------------------------+

GA settings:

Type = real-valued Population size = 500 Number of generations = 5000 Elitism = 25 Crossover probability = 0.8 Mutation probability = 0.1 Search domain

w1 w2 Min 0 0 Max 1 1

GA results:

Iterations = 350 Fitness function value = -0.77562 Solution = w1 w2 [1,] 0.5955365 0.40475 即可得到式—4:

P(t)=0.5955365(p(t0)(1+0.007004309)(t-t0))+0.40475(p(t0)e0.0069798(t-t0)) 式—4

基于此公式,便可以预测该市2010,2020及2030年的人口数。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务