首页 文章

对于fn和gr,R optim具有相同的功能

提问于
浏览
5

我想使用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 回答

  • 3

    nlm 函数执行优化,并且它希望将梯度信息作为属性返回到作为原始函数值返回的值 . 这与您在上面显示的内容类似 . 请参阅 nlm 帮助中的示例 .

相关问题