2013-07-26 13 views
1

У меня есть две функции: f(x) и g(x). Здесь f(x) является целевой функцией для минимизации, а g(x) - функция градиента. Моя проблема заключается в каждом испытании x, тело f(x) вычислит сложную матрицу A(x), которая также будет использоваться в g(x). Ради эффективности я не хочу, чтобы g(x) повторял вычисления A. Я собираюсь сделать A(x) глобальным путем определения A <<- ... в теле f(x). Таким образом, g(x) может напрямую использовать A(x). Потому что я не знаю, как optim в R итерации f(x) и g(x), я не уверен, правильная ли эта стратегия. Любые предложения и комментарии приветствуются. Благодарю.Функция градиента в оптимизации R

+0

Вы должны предоставить минимальный рабочий/воспроизводимый пример вашего кода. – Thomas

ответ

1

Потому что вы не знаете, как optim собирается позвонить f и g вы будете иметь, чтобы убедиться, что любая прятали A(x) из той же x, когда вам это нужно. Он мог бы позвонить f(x1), f(x2), f(x3), а затем g(x1).

Одно из решений могло бы быть мемоизация:

http://cran.r-project.org/web/packages/memoise/index.html

memoised A(x) будет хранить возвращаемое значение для заданных входных значений и возврата, что когда даны одинаковые входные значения без пересчета. Очевидно, что работает только для нестохастических функций (не называть генераторы случайных чисел).

Я не уверен, как вы контролируете размер кеша, но исходный код там есть.

+0

'memoize' - хорошая съемка. Спасибо. – semibruin

Смежные вопросы