Язык программирования 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 (англ.)
