2015-08-03 12 views
6

Sto utilizzando ricottura simulata, come implementato nel pacchetto R GenSa (funzione GenSA), per cercare i valori delle variabili di input che risultano in "valori buoni" (rispetto ad alcuni valori di riferimento) di un funzione altamente dimensionale. Ho notato che l'impostazione del numero massimo di chiamate della funzione obiettivo non ha alcun effetto sul tempo di esecuzione. Sto facendo qualcosa di sbagliato o si tratta di un bug?Ricottura simulata in R: tempo di funzionamento GenSA

Ecco una modifica dell'esempio riportato nel file della guida 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)) 

Anche se il max.call è specificato per essere 10.000, GenSA chiama la funzione obiettivo più di 46.000 volte (si noti che l'obiettivo viene richiamata all'interno di un ambiente locale al fine di monitorare il numero di chiamate). Lo stesso problema si verifica quando si tenta di specificare il tempo di funzionamento massimo tramite max.time.

risposta

4

Questa è una risposta da parte del manutentore del pacchetto:.

"max.call e max.time sono limiti soft che non includono le ricerche locali che vengono eseguite prima di raggiungere questi limiti L'algoritmo non si ferma locale ciclo della strategia di ricerca prima della sua fine e questo può superare la limitazione che hai impostato, ma si fermerà dopo quest'ultima ricerca. Abbiamo progettato l'algoritmo in questo modo per assicurarci che l'algoritmo non si fermi nel mezzo della ricerca della valle. l'opzione di fermarsi ovunque verrà implementata nella prossima versione del pacchetto. "

Problemi correlati