我有两个函数 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)
,我不确定这个策略是否正确有效。欢迎任何建议和意见。谢谢。
最佳答案
因为你不知道 optim
将如何调用 f
和 g
你将不得不确保任何隐藏的A(x)
在您需要时来自同一个 x
。它可能会调用 f(x1)
、f(x2)
、f(x3)
,然后是 g(x1)
.
一种解决方案可能是内存:
http://cran.r-project.org/web/packages/memoise/index.html
A memoised A(x)
将存储给定输入值的返回值,并在给定相同输入值时返回该值而不重新计算。显然只适用于非随机函数(不要调用任何随机数生成器)。
我不确定你是如何控制缓存的大小的,但是源代码就在那里。
关于r - R优化中的梯度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17874595/