Решение одномерных задач оптимизации одновременно в R - PullRequest
1 голос
/ 11 июня 2019

Я собираюсь использовать очень простой пример для объяснения моей проблемы (настоящая проблема касается очень сложной одномерной функции). Рассмотрим следующую одномерную функцию

f <- function(x, p){ 10 - (x - p)^2 }

, где p принадлежит {-500, -499, ..., -1, 0, 1, ..., 499, 500}.

Я хотел бы найти значение x, которое максимизирует f, для каждого значения p. Это переводит в 1001 значения х.

Я знаю, что это можно сделать в R-программном обеспечении с помощью i) цикла for, ii) цикла while, iii) применения функции и iv) функции foreach (пакет doParallel). Однако мне было интересно, не могли бы вы сказать мне, существует ли более эффективный способ решения вышеуказанной проблемы оптимизации в R-software, пожалуйста.

Я знаю, что описанная выше проблема оптимизации тривиальна Тем не менее, вопрос сосредоточен на эффективной процедуре для решения нескольких оптимизационных задач одновременно в R.

Большое спасибо за вашу помощь.

1 Ответ

2 голосов
/ 11 июня 2019

Функция optimize() может использоваться для получения максимального значения функции. Затем вы можете применить значения параметров следующим образом:

p<-seq(-500,500,1)
fn <- function(param,p,...){return( 10 - (param - p)^2) }


ll <- lapply(pp,function(i)
  optimize(f= fn, 
           par =c(-1000), 
           p=i, 
           interval = c(-100000000,1000000000),
           maximum = TRUE))

ll[[which.max(sapply(ll,'[[','maximum'))]]
...