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
.