Обработка рамочных ограничений в оптимизации Nelder-Mead путем искажения пространства параметров - PullRequest
0 голосов
/ 01 мая 2020

У меня есть вопрос о конкретной c реализации алгоритма Нелдера-Мида (1), который обрабатывает ограничения блока необычным образом. Я не могу найти что-либо об этом ни в одной статье (25 статей), в учебнике (обыскала 4 из них) или в целых числах rnet.

У меня типичная проблема оптимизации: min f(x) с ограничением на поле -0.25 <= x_i <= 250

Ожидаемый подход будет использовать функцию штрафа и убедиться, что все экземпляры f(x) "непривлекательны", когда x выходит за пределы.

Алгоритм работает иначе: рассматриваемая реализация не касается f(x). Вместо этого он искажает пространство параметров, используя обратную гиперболи c tangens atanh(f). Теперь симплексный алгоритм может свободно работать в пространстве без границ и выбирать любую точку. Прежде чем получить f(x), чтобы оценить решение в точке x, алгоритм переключается обратно в нормальное пространство.

На первый взгляд я нашел идею гениальной. Таким образом мы избегаем недостатков штрафных функций. Но сейчас у меня есть сомнения. Искаженное пространство влияет на поведение завершения. Одним из критериев завершения является размер симплекса. Раздувая пространство параметров с помощью atanh(x), мы также увеличиваем размер симплекса.

Эксперименты с алгоритмом также показывают, что он работает не так, как задумано. Я еще не понимаю, как это происходит, но я получаю результаты, которые выходят за пределы. Я могу сказать, что почти половина возвращенных локальных минимумов выходит за пределы.

В качестве примера рассмотрим nmkb (), оптимизирующую функцию rosenbrook, когда мы постепенно изменяем ширину ограничения box:

rosbkext <- function(x) {
  # Extended Rosenbrock function
  n <- length(x)
  sum (100*(x[1:(n-1)]^2 - x[2:n])^2 + (x[1:(n-1)] - 1)^2)
}

np <- 6 #12
for (box in c(2, 4, 12, 24, 32, 64, 128)) {
  set.seed(123)
  p0 <- rnorm(np)
  p0[p0 > +2] <- +2 - 1E-8
  p0[p0 < -2] <- -2 + 1E-8

  ctrl <- list(maxfeval = 5E4, tol = 1E-8)
  o <- nmkb(fn = rosbkext, par = p0, lower = -box, upper = +box, control = ctrl)
  print(o$message)
  cat("f(", format(o$par, digits = 2), ") =", format(o$value, digits=3), "\n")
}

Вывод показывает, что он утверждает, что сходится, но не в трех случаях. И делает это для границ (-2,2) и (-12,12). Я мог бы принять это, но тогда это также терпит неудачу в (-128, 128). Я также попробовал то же самое с неограниченным dfoptim :: nmk (). Нет проблем там. Он отлично сходится.

[1] "Successful convergence"
f( -0.99  0.98  0.97  0.95  0.90  0.81 ) = 3.97 
[1] "Successful convergence"
f( 1 1 1 1 1 1 ) = 4.42e-09 
[1] "Successful convergence"
f( -0.99  0.98  0.97  0.95  0.90  0.81 ) = 3.97 
[1] "Successful convergence"
f( 1 1 1 1 1 1 ) = 1.3e-08 
[1] "Successful convergence"
f( 1 1 1 1 1 1 ) = 4.22e-09 
[1] "Successful convergence"
f( 1 1 1 1 1 1 ) = 8.22e-09 
[1] "Successful convergence"
f( -0.99  0.98  0.97  0.95  0.90  0.81 ) = 3.97 

Почему ограниченный алгоритм имеет больше проблем сходимости, чем неограниченный?


Сноска (1): Я имею в виду реализацию Nelder-Mead используется в пакете optimx в R. Этот пакет вызывает другой пакет dfoptim с функцией nmkb.

1 Ответ

1 голос
/ 02 мая 2020

(Этот вопрос не имеет ничего общего с optimx, который является просто оболочкой для пакетов R, обеспечивающих безусловную оптимизацию.)

Рассматриваемая функция nmkb() в dfoptim пакет для процедур оптимизации без градиента. Подход для преобразования ограниченных областей в неограниченные пространства является общим и может применяться со многими различными функциями преобразования, иногда в зависимости от вида границы и / или типа целевой функции. Он также может применяться, например, для преобразования неограниченных областей интегрирования в ограниченные.

Подход проблематичен c, если оптимум лежит на границе, поскольку оптимальная точка будет отправлена ​​(почти) в бесконечность и в конечном итоге не может быть достигнуто. Процедура не будет сходиться или решение будет совершенно неточным.

Если вы считаете, что алгоритм работает неправильно, вам следует написать авторам этого пакета и - что важно - добавить один или два примера за то, что вы считаете ошибками или неправильными решениями. Без явных примеров кода никто здесь не сможет вам помочь.

(1) Эти преобразования определяют биективные отображения между ограниченными и неограниченными областями, и теория, лежащая в основе этого подхода, очевидна. Вы можете прочитать о возможных преобразованиях в книгах по многомерному исчислению.

(2) Подход со штрафами за пределами имеет свои недостатки, например, целевая функция не будет гладкой на границах, а метод BFGS может больше не подходить.

(3) Вы можете попробовать алгоритм Гука-Дживса с помощью функции hjkb() в том же пакете dfoptim . Это будет медленнее, но использует другой подход для обработки границ, без каких-либо преобразований.

EDIT (после обсуждения с Эрвином Кальвелагеном выше)

Похоже, что локальные минимумы (с некоторыми координатами отрицательные). Если вы установите нижние границы на 0, nmkb() найдет глобальный минимум (1,1,1,1,1,1) в любом случае.
Обратите внимание: начальные значения должны быть выполнимыми, то есть все их координаты больше 0.

...