2015-08-03 8 views
6

Używam symulowanego wyżarzania, zaimplementowanego w pakiecie R. GenSa (funkcja GenSA), w celu wyszukania wartości zmiennych wejściowych, które dają "dobre wartości" (w porównaniu do pewnej wartości wyjściowej) wysoce wymiarowa funkcja. Zauważyłem, że ustawienie maksymalnej liczby połączeń funkcji celu nie ma wpływu na czas działania. Czy robię coś złego, czy jest to błąd?Symulowane wyżarzanie w R: czas działania GenSA

Oto modyfikacja przykładu podana w pliku pomocy 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)) 

Choć max.call określony jest 10000, GenSA wywołuje funkcję celu ponad 46.000 razy (Zauważ, że celem jest nazywany w środowisku lokalnym, aby śledzić liczbę połączeń). Ten sam problem wzrasta, gdy próbuje się określić maksymalny czas działania przez max.time.

Odpowiedz

4

Jest to odpowiedź przez opiekuna pakietu.

„max.call i max.time są miękkie ograniczenia, które nie zawierają lokalnych wyszukiwań, które są wykonywane przed osiągnięciem tych limitów Algorytm nie zatrzymać lokalny pętla strategii wyszukiwania przed jej zakończeniem i może przekroczyć ustawione ograniczenie, ale zatrzyma się po tym ostatnim wyszukiwaniu. Tak zaprojektowaliśmy algorytm, aby upewnić się, że algorytm nie zostanie zatrzymany w trakcie wyszukiwania doliny. opcja zatrzymania w dowolnym miejscu zostanie zaimplementowana w następnej wersji pakietu. "

Powiązane problemy