Перейти к содержанию

Язык программирования R/Оптимизация

Материал из Викиучебника — открытых книг для открытого мира

Введение

[править]

Задачей оптимизации в математике называется задача о нахождении экстремума (минимума или максимума) вещественной функции в некоторой области. Как правило, рассматриваются области, принадлежащие и заданные набором равенств и неравенств. Смотрите страницу Википедии "Оптимизация".

Одноразмерная задача

[править]

Постановка задачи:

> 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)

Алгоритм имитации отжига

[править]
> 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.
  1. Обновление и улучшение optim(), используя слайды R 2009 http://www.agrocampus-ouest.fr/math/useR-2009/slides/Nash+Varadhan.pdf(англ.)
  2. R-forge оптимизатор http://optimizer.r-forge.r-project.org/(англ.)
  3. Домашняя страница Жасжит Секон (Jasjeet Sekhon): http://sekhon.berkeley.edu/rgenoud/(англ.)
  4. Первый курс статистического программирования с R http://portal.acm.org/citation.cfm?id=1385416(англ.)