R:GenSA运行时间的模拟退火

时间:2015-08-03 13:01:01

标签: r optimization simulated-annealing

我正在使用模拟退火,在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指定最长运行时间时会出现同样的问题。

1 个答案:

答案 0 :(得分:5)

这是包维护者的答案:

  

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