我正在使用R中的genalg包进行一些优化。有没有办法从过去几代中获得最适合的染色体?我正在寻找其他"足够接近"解决方案,但在我看来,rbga对象中的所有信息都来自当前(最终)生成。
例如,我可以让100条染色体在400 - 500年代中返回最低评估值吗?
编辑:我想我可以运行该功能
rbga.bin(size=10, popSize=200, iters= , mutationChance=0.01)
对于迭代次数=(400,401,402,...,498,499,500),并在每增加一代之后拉出最佳值,但这将非常慢。
答案 0 :(得分:1)
您迭代的世代不会被rbga.bin()
函数保存,因此在算法结束后,您无法在迭代400-500中获得最佳染色体。
但是,如果您在rbga.bin()
电话中添加监听功能,则可以获得所需的信息。因此,请将此monitor
函数包含在您的脚本中:
monitor <- function(obj) {
if (obj$iter >= 400) {
print(paste("GENERATION:", obj$iter))
print(obj$population[which.min(obj$evaluations), ])
}
}
并在monitorFunc = monitor
中添加rbga.bin()
,如下所示:
rbga.bin(size=10, popSize=200, iters=500, mutationChance=0.01, monitorFunc = monitor)
如果您愿意,可以保存输出而不是仅打印输出。