【问题标题】:Optimization of a function of 2 parameters2个参数的函数优化
【发布时间】:2013-03-19 08:34:09
【问题描述】:

我的问题可能很常见,但我不知道如何调整这个问题的答案

我有一个带有两个参数 (a,b) 的函数 F,我必须找到这个函数的最大值。

现在,我这样做了:

optimization_of_F<-function(a,b){
  solution=c(0,0,0) #initialization 
  a=seq(0, 5, by=0.1)
  b=seq(0.1, 5, by =0.1)

  for (d in a){ 
    for (k  in b){ 
      if  ( F(d, k) > solution[1] )  {
        solution[1]= F(d,k)
        solution[2]= d
        solution[3]= k
      }  
    }     
  }
  return(solution)
}

但是这种方式太长了,我想优化一下。我该怎么做?

【问题讨论】:

  • 您是否意识到除了循环的最后一次迭代之外,您正在覆盖solution
  • 另外,不要调用函数F,因为这意味着FALSE
  • 如果它比临时解决方案更好,我只是在编写解决方案。

标签: r optimization


【解决方案1】:

试试这个,F 是你的函数,c(0,0) 是初始猜测,c=2d=pi/3 是提供给 F 的固定参数,

optim(c(0,0), F, c=2, d=pi/3)

【讨论】:

  • 如果我的函数 F 有其他参数,我该如何使用“优化”?示例:F(a,b,c,d) 与 c 和 d 由我修复。
  • 我做了一个测试,但它不起作用。 test&lt;-function(a, b, c){ sum= a + b + c return(sum) } optim(c(0,0), test, c=1 )
  • optim只会优化F的第一个参数,所以它需要是向量c(a,b)。试试F = function(p=c(1,1), c=1){(p[1] - c)^2 + (p[2]-2*c)^2}
  • stat.ethz.ch/R-manual/R-devel/library/stats/html/optim.html 的示例部分也很有帮助 (?optim)。
【解决方案2】:

我觉得这会让你更接近你正在寻找的东西:

a=seq(0, 5, by=0.1)
b=seq(0.1, 5, by =0.1)
outer(a, b, FUN=F)

【讨论】:

  • 它似乎有效。有没有办法将 a 和 b 的值保留在外部矩阵中?
  • 有点。你可以用rownames(MatrixName) &lt;- acolnames 做同样的事情。您还可以构建一个array,本质上是一个矩阵,其中每个单元格都有三个值。
猜你喜欢
  • 2021-03-11
  • 2020-01-23
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多