2015-08-03 194 views
6

我使用R的包GenSa(函数GenSA)中执行的模拟退火来搜索导致“良好值”(与某些基线相比)的输入变量的值高维度的功能。我注意到设置目标函数的最大调用次数对运行时间没有影响。我做错了什么或者这是一个错误?模拟退火在R: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被指定为10000,GenSA调用目标函数超过46000倍(注意,目的是为了将来电的号码从本地环境中调用)。尝试通过max.time指定最大运行时间时,同样的问题会增加。

回答

4

这是被包维护者的答案:

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