7

我正在使用 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

4

1 回答 1

5

这是包维护者的回答:

max.call 和 max.time 是软限制,不包括在达到这些限制之前执行的本地搜索。该算法不会在结束之前停止本地搜索策略循环,这可能会超出您设置的限制,但会在最后一次搜索后停止。我们以这种方式设计了算法,以确保算法不会在搜索谷的中间停止。这种在任何地方停止的选项将在包的下一个版本中实现。

于 2015-09-16T07:35:43.840 回答