我正在尝试学习如何在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解决此问题向我提出建议?
谢谢
答案 0 :(得分:0)
要使用GA解决此问题,您需要将evalf更改为:
evalf <- function(x) 1/dnorm(binary2decimal(x), mean = 16, sd = 4)
对于更接近解决方案的数据,似乎适应度函数应返回较小的值。 健身函数也应该返回值 - 而不是矢量 - 所以你需要使用binary2decimal转换染色体。