【发布时间】:2014-06-09 23:26:52
【问题描述】:
我想使用 optim() 来优化成本函数(fn 参数),并且我将提供梯度(gr 参数)。我可以为 fn 和 gr 编写单独的函数。但是,它们有很多共同的代码,我不希望优化器浪费时间重复这些计算。那么是否有可能提供一个既计算成本又计算梯度的函数?如果是这样,optim() 的调用语法是什么?
举个例子,假设我要最小化的函数是
cost <- function(x) {
x*exp(x)
}
显然,这不是我想要最小化的功能。这太复杂了,无法在此处列出,但该示例可以说明问题。现在,渐变将是
grad <- function(x) {
(x+1)*exp(x)
}
如您所见,如果单独调用这两个函数,将重复一些工作(在本例中为指数函数)。然而,由于 optim() 采用两个单独的参数(fn 和 gr),似乎没有办法避免这种低效率,除非有一种方法可以定义一个函数,如
costAndGrad <- function(x) {
ex <- exp(x)
list(cost=x*ex, grad=(x+1)*ex)
}
然后将该函数传递给 optim(),它需要知道如何提取成本和梯度。
希望能解释问题。就像我说的那样,我的函数要复杂得多,但想法是一样的:两种计算(成本和梯度)都有相当多的代码,我不想不必要地重复。
顺便说一句,我是一个 R 新手,所以我可能缺少一些简单的东西!
非常感谢
【问题讨论】:
-
我认为闭包的概念在这里可能有用(adv-r.had.co.nz/…)。就您而言,我没有足够的信息来提供比这更具体的答复。
标签: r optimization mathematical-optimization