Имитация отжига в R: время работы GenSA

Я использую имитацию отжига, реализованную в пакете R GenSa (функция 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 указано равным 10 000, GenSA вызывает целевую функцию более 46 000 раз (обратите внимание, что цель вызывается в локальной среде, чтобы отслеживать количество вызовов). Та же проблема возникает при попытке указать максимальное время работы через max.time.


person Jebus    schedule 03.08.2015    source источник


Ответы (1)


Это ответ сопровождающего пакета:

max.call и max.time — это мягкие ограничения, которые не включают локальные поиски, выполняемые до достижения этих ограничений. Алгоритм не останавливает цикл стратегии локального поиска до его окончания, и это может превысить установленное вами ограничение, но остановится после этого последнего поиска. Мы разработали алгоритм таким образом, чтобы гарантировать, что алгоритм не остановится в середине поиска долины. Такая возможность остановки в любом месте будет реализована в следующем релизе пакета.

person Jebus    schedule 16.09.2015