2015-08-03 16 views
6

Ich verwende simuliertes Annealing, wie in Rs Paket GenSa implementiert (Funktion GenSA), um nach Werten von Eingangsvariablen zu suchen, die zu "guten Werten" (verglichen mit einigen Basiswerten) von a führen hochdimensionale Funktion. Mir ist aufgefallen, dass die maximale Anzahl der Aufrufe der Zielfunktion keine Auswirkung auf die Laufzeit hat. Mache ich etwas falsch oder ist das ein Fehler?Simuliertes Annealing in R: GENSA Laufzeit

Hier ist eine Modifikation des Beispiels in GenSA Hilfedatei gegeben.

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)) 

Auch wenn die max.call angegeben 10.000 zu sein, GenSA ruft die Zielfunktion mehr als 46.000 mal (beachten Sie, dass das Ziel in einer lokalen Umgebung um genannt wird die Anzahl der Anrufe zu verfolgen). Das gleiche Problem tritt auf, wenn versucht wird, über max.time die maximale Laufzeit anzugeben.

Antwort

4

Dies ist eine Antwort vom Paketbetreuer.

„max.call und max.Zeit sind weiche Grenzen, die nicht die lokale Suche enthalten, die vor dem Erreichen dieser Grenzen durchgeführt werden Der Algorithmus nicht auf die lokale stoppt Suchstrategie Schleife vor seinem Ende und dies kann die Begrenzung überschreiten, die Sie gesetzt haben, aber nach dieser letzten Suche stoppen. Wir haben den Algorithmus so entworfen, um sicherzustellen, dass der Algorithmus nicht in der Mitte der Suche Tal gestoppt wird Die Option, irgendwo anzuhalten, wird in der nächsten Version des Pakets implementiert. "