我如何使用遗传算法?

时间:2014-09-04 08:23:21

标签: r genetic-algorithm

我正在尝试学习如何在r中使用遗传算法(GA)。所以,这是我的代码:

library(genalg)

evalf <- function(x) {
      soln <- dnorm(x, mean = 16, sd = 4) 
      return(soln)
    }

iter = 100
GAmodel <- rbga.bin(size = 5, popSize = 200, iters = iter, mutationChance = 0.002, elitism = F, evalFunc = evalf)

带警告返回, There were 50 or more warnings (use warnings() to see the first 50)如下:

1: In evalVals[object] = evalFunc(population[object, ]) : number of items to replace is not a multiple of replacement length

此外,我认为GA没有返回正确答案,因为我得到如下:

cat(summary.rbga(GAmodel))

返回,

GA Settings
  Type                  = binary chromosome
  Population size       = 200
  Number of Generations = 100
  Elitism               = FALSE
  Mutation Chance       = 0.002

Search Domain
  Var 1 = [,]
  Var 0 = [,]

GA Results
  Best Solution : 0 0 1 0 1 

如果我使用binary2decimal(c(0,0,1,0,1))转换最佳解决方案,则会获得5。但正确的答案应该是16

您能否就如何使用GA解决此问题向我提出建议?

谢谢

1 个答案:

答案 0 :(得分:0)

要使用GA解决此问题,您需要将evalf更改为:

evalf <- function(x) 1/dnorm(binary2decimal(x), mean = 16, sd = 4)

对于更接近解决方案的数据,似乎适应度函数应返回较小的值。 健身函数也应该返回值 - 而不是矢量 - 所以你需要使用binary2decimal转换染色体。