оптимизация функции для поиска глобальных и локальных пиков с помощью R - PullRequest
1 голос
/ 09 декабря 2010

Y У меня есть 6 параметров, для которых я знаю макси и мини значения. У меня есть сложная функция, которая включает в себя 6 параметров и возвращает 7-е значение (скажем, Y). Я говорю сложный, потому что Y не имеет прямого отношения к 6 параметрам; Между ними много встроенных функций.

  1. Я хотел бы найти комбинацию из 6 параметров, которая возвращает наибольшее значение Y. Сначала я попытался вычислить Y для каждой комбинации, построив гиперкуб, но у меня недостаточно памяти на компьютере. Поэтому я ищу виды цепей Маркова, которые развиваются в пространстве параметров с разделителями и могут преодолевать локальные пики.
  2. когда я даю одну комбинацию из 6 параметров, я хотел бы знать самое высокое локальное значение Y. Я пытался написать код с итеративной цепочкой, такой как марковский, но я не уверен, как обрабатывать, когда цепочка достигает края пространства параметров. Очевидно, для этого уже должны существовать некоторые алгоритмы.

Вопрос: Кто-нибудь знает, какие функции в R лучше всего подходят для этих двух вещей? Я читал, что optim () может быть подходящим для определения глобального пика, но я не уверен, что он может работать со сложными функциями (я предпочитаю спрашивать, прежде чем приступать к длительному (для меня) процессу написания кода). А для местных пиков? optim () не должен быть в состоянии сделать это

Заранее спасибо за любой отрывок

Жюльен из Франции

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

Посмотрите на Задачу по оптимизации и математическому программированию в CRAN. Я лично нашел алгоритм дифференциальной эволюции очень быстрым и надежным. Это реализовано в пакете DEoptim. Пакет rgenoud - еще один хороший кандидат.

0 голосов
/ 10 декабря 2010

Мне нравится использовать алгоритм Метрополис-Гастингс .Поскольку вы ограничиваете каждый параметр диапазоном, простая вещь, которую нужно сделать, это позволить распределению вашего предложения просто быть равномерным по всему диапазону.Таким образом, вы не сбежите с краев.Он не будет быстрым, но если вы позволите ему работать достаточно долго, он хорошо сэмплирует ваше пространство.Образцы будут собираться на каждом пике и распределяться вокруг них таким образом, чтобы отражать локальную кривизну.

...