Язык программирования R/Оптимизация
Введение
правитьЗадачей оптимизации в математике называется задача о нахождении экстремума (минимума или максимума) вещественной функции в некоторой области. Как правило, рассматриваются области, принадлежащие и заданные набором равенств и неравенств. Смотрите страницу Википедии "Оптимизация".
optimize()
разработана для одноразмерной оптимизиционной задачи.optim()
,nlm()
,ucminf()
(пакет ucminf) могут быть использованы для многоразмерных оптимизационных задач.nlminb()
для вынужденной оптимизации.- Могут быть полезны пакеты quadprog, minqa, rgenoud, trust.
- Были предприняты попытки усилить оптимизацию в R. Смотрите Обновление и улучшение optim(), используя слайды R 2009(англ.)[1], Оптимизационная страница R-forge(англ.)[2] и соответствующие пакеты включающие optimx(англ.).
Одноразмерная задача
правитьПостановка задачи:
> func <- function(x){ + return <- (x-2)^2 + } > (func(-2)) [1] 16 > > # Рисование функции используя функцию 'curve' > curve(func,-4,8) > > # Другой способ нарисовать функцию используя сетку > grid <- seq(-10,10,by=.1) > func(grid) > plot(grid,func(grid)) > > # можно найти минимум, используя функцию optimize() > optimize(f=func,interval=c(-10,10)) $minimum [1] 2 $objective [1] 0
Метод Ньютона
править- Пакет maxLik позволяет максимизировать вероятностную функцию. Также он включает средства для применения метода Ньютона.
- Функция
newtonraphson()
в пакете spuRs.
Метод Нелдера — Мида
править> func <- function(x){ + out <- (x[1]-2)^2 + (x[2]-1)^2 + return <- out + } > > optim(par=c(0,0), fn=func, gr = NULL, + method = c("Nelder-Mead"), + lower = -Inf, upper = Inf, + control = list(), hessian = T)
Метод Бройдена — Флетчера — Гольдфарба — Шанно (BFGS)
правитьСмотрите страницу Википедии "Квазиньютоновские_методы"
> func <- function(x){ + out <- (x[1]-2)^2 + (x[2]-1)^2 + return <- out + }> > optim(par=c(0,0), fn=func, gr = NULL, + method = c("BFGS"), + lower = -Inf, upper = Inf, + control = list(), hessian = T) > optim(par=c(0,0), fn=func, gr = NULL, + method = c("L-BFGS-B"), + lower = -Inf, upper = Inf, + control = list(), hessian = T)
Алгоритм имитации отжига
править- Алгоритм имитации отжига - полезный алгоритм для негладких функций. Он реализован в функции
optim()
.
> func <- function(x){ + out <- (x[1]-2)^2 + (x[2]-1)^2 + return <- out + }> > optim(par=c(0,0), fn=func, gr = NULL, + method = c("SANN"), + lower = -Inf, upper = Inf, + control = list(), hessian = T)
Метод доверенных регионов
правитьТеоретическую информацию можно почитать на http://en.wikipedia.org/wiki/Trust_region(англ.).
Пакет "trust"(англ.) позволяет использовать этот метод.
Симплекс-метод
правитьПакет boot включает симплекс-метод.
Генетический алгоритм
правитьПакет rgenoud реализует генетический алгоритм.[3]
Ссылки
править- Венаблс (Venables) и Рипли (Ripley), глава 16.
- Кэмерон (Cameron) и Триведи (Trivedi), Микроэконометрика, глава 10.
- Браун (Braun) и Мурдох (Murdoch) глава 7[4] очень хорошие ссылки на оптимизацию используя R.
- ↑ Обновление и улучшение optim(), используя слайды R 2009 http://www.agrocampus-ouest.fr/math/useR-2009/slides/Nash+Varadhan.pdf(англ.)
- ↑ R-forge оптимизатор http://optimizer.r-forge.r-project.org/(англ.)
- ↑ Домашняя страница Жасжит Секон (Jasjeet Sekhon): http://sekhon.berkeley.edu/rgenoud/(англ.)
- ↑ Первый курс статистического программирования с R http://portal.acm.org/citation.cfm?id=1385416(англ.)