我正在使用在R的包GenSa(函数GenSA)中实现的模拟退火来搜索输入变量的值,这些输入变量会导致高维函数的“良好值”(与某些基准相比)。我注意到设置目标函数的最大调用次数对运行时间没有影响。我是在做错什么还是这是一个错误?

这是对GenSA帮助文件中给出的示例的修改。

library(GenSA)

Rastrigin <- local({
  index <- 0
  function(x){
    index <<- index + 1
    if(index%%1000 == 0){
      cat(index, "   ")
    }
    sum(x^2 - 10*cos(2*pi*x)) + 10*length(x)
  }
})

set.seed(1234)
dimension <- 1000
lower <- rep(-5.12, dimension)
upper <- rep(5.12, dimension)
out <- GenSA(lower = lower, upper = upper, fn = Rastrigin, control = list(max.call = 10^4))

即使max.call指定为10,000,GenSA调用目标函数也超过46,000次(请注意,在本地环境中调用该目标是为了跟踪调用次数)。尝试通过max.time指定最大运行时间时,也会出现相同的问题。

最佳答案

这是软件包维护者的答案:

10-04 12:23