【问题标题】:Error while optimizing in R在 R 中优化时出错
【发布时间】:2016-02-03 06:01:34
【问题描述】:

我正在创建两个函数 f(i) 和 f(j),我想同时找到 i 和 j 的值,以使 f(i) -f(j) 的差异最小化。 但是在运行下面的代码时出现错误。

我有两个函数,参数 i 和 j 如下

bu1<- function(j){
sum(linkinc_lev1$gdp*(1/(1+ (linkinc_lev1$use_gro*(1+j/100))))
}

bu1<- function(j){
sum(linkinc_lev2$gdp*(1/(1+ (linkinc_lev2$use_gro*(1+i/100))))
}

现在我需要同时找到 i 和 j 的值,以使上述函数的差异最小化。

我在尝试

f1<- function(j,i) abs(bu1(j)-td1(i))
ans_lev1<-optimize(f1, lower=-100, upper=100),

但出现错误Error in td1(i) : argument "i" is missing, with no default

R 中是否有任何方法可以根据两个参数最小化函数?

【问题讨论】:

  • 你有两个函数 bu1 ...但没有 td1。顺便问一下 linkinc_lev1 是什么?一壶果酱,一架黄铜飞机?
  • 哈哈..抱歉,第二个函数是 td1。 linkinc_lev1 只是一个数据框名称,已经提到了:)
  • 以下有帮助吗?你能dput你的数据吗?
  • 我还没有检查,很快就会回复您。谢谢:)

标签: r optimization solver minimize


【解决方案1】:

是的,几乎所有优化器都在参数向量上工作。您应该将您的功能修改为类似

f1<- function(param) abs(bu1(param[2])-td1(param[1]))

即该函数接受一个参数“param”,并在函数内部从中获取感兴趣的值。

注意:如果你使用abs(),你最终会得到一个不可微的目标函数。您必须选择一个可以处理它的优化器(例如,SANN 和 Nelder-Mead 可以)。我宁愿做

f1 <- function(param) (bu1(param[2])-td1(param[1]))^2

仍然是相同的解决方案,但现在可微分,您可以将其提供给大多数优化器。

【讨论】:

    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2017-07-07
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多