我有两个函数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)
。因为我不知道R中的optim
如何迭代f(x)
和g(x)
,我不确定这种策略是否正确有效。欢迎任何建议和意见。感谢。
答案 0 :(得分:1)
因为您不知道optim
将如何调用f
和g
,所以您必须确保任何被隐藏的A(x)
来自同一地点x
f(x1)
当你需要它时。它可能会调用f(x2)
,f(x3)
,g(x1)
,然后调用A(x)
。
一种解决方案可能是备忘录:
http://cran.r-project.org/web/packages/memoise/index.html
记忆{{1}}将存储给定输入值的返回值,并在给定相同输入值时返回该值而不重新计算。显然只适用于非随机函数(不要调用任何随机数生成器)。
我不确定你如何控制缓存的大小,但源代码就在那里。