我想使用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新手,所以可能有一些我想念的简单!
非常感谢
1 回答
nlm
函数执行优化,并且它希望将梯度信息作为属性返回到作为原始函数值返回的值 . 这与您在上面显示的内容类似 . 请参阅nlm
帮助中的示例 .