首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么R中的遗传算法没有指定的实际生成数

为什么R中的遗传算法没有指定的实际生成数
EN

Stack Overflow用户
提问于 2016-04-13 18:36:35
回答 1查看 95关注 0票数 0

我正在使用R的genalg库,并试图在运行二进制泛型算法时保存所有代。在库中似乎没有一种内置的方法,所以我试图通过评估函数保存每个染色体,x

为了测试这个方法,我尝试在评估函数中插入print(x),以便能够看到所有被评估的染色体。然而,印刷染色体的数量并不总是与我所怀疑的相匹配。

我以为印刷染色体的数量将等于群体大小的迭代次数,但似乎并不是一直都在尝试。

问题是,我想知道每个染色体属于哪一代(或迭代),我无法判断染色体的数目是否与iterpopSize不同。

这是什么原因,以及我如何“修复”它。还是有另一种方法来保存每条染色体,以及它属于哪一种迭代?

下面是一个例子,我认为评估函数会打印2x5染色体,但只打印8条染色体。

代码语言:javascript
运行
复制
library(genalg)
library(ggplot2)

dataset <- data.frame(
    item = c("pocketknife", "beans", "potatoes", "unions", "sleeping bag", "rope", "compass"),
    survivalpoints = c(10, 20, 15, 2, 30, 10, 30),
    weight = c(1, 5, 10, 1, 7, 5, 1))

weightlimit <- 20

evalFunc <- function(x) {

    print(x)

    current_solution_survivalpoints <- x %*% dataset$survivalpoints
    current_solution_weight <- x %*% dataset$weight

    if (current_solution_weight > weightlimit)
        return(0) else return(-current_solution_survivalpoints
}


iter = 2
popSize = 5
set.seed(1)
GAmodel <- rbga.bin(size = 7, popSize = popSize, iters = iter, mutationChance = 0.1,elitism = T, evalFunc = evalFunc)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-13 19:16:27

从函数代码来看,似乎在每一次迭代(生成)中都会从种群中选择一个染色体子集(在您的示例中为5染色体),并且具有一定的概率(在您的例子中为0.1)并进行变异。只对每一代变异的染色体调用评估函数(当然,对于第一次迭代中的所有染色体,以了解它们的初始值)。

注意,这个子集不包括精英组,在您的示例中,这个组定义为1元素大(您错误地传递了elitism=TRUE,TRUE被隐式转换为1)。

无论如何,要了解每一代的总体情况,您可以通过monitorFun参数传递一个监视器函数,例如:

代码语言:javascript
运行
复制
# obj contains a lot of informations, try to print it
monitor <- function(obj) {
  print(paste(" GENERATION :", obj$iter))
  print("POPULATION:")
  print(obj$population)
  print("VALUES:")
  print(obj$evaluations)
}

iter = 2
popSize = 5
set.seed(1)
GAmodel <- rbga.bin(size = 7, popSize = popSize, 
                    iters = iter, mutationChance = 0.1,
                    elitism = 1, evalFunc = evalFunc, monitorFunc = monitor)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36606802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档