【问题标题】:Solving univariate optimization problems simultaneously in R在 R 中同时解决单变量优化问题
【发布时间】:2020-10-27 02:24:08
【问题描述】:

我将使用一个非常简单的例子来解释我的问题(真正的问题涉及一个非常复杂的单变量函数)。考虑以下单变量函数

f <- function(x, p){ 10 - (x - p)^2 }

其中 p 属于 {-500, -499,..., -1, 0, 1,..., 499, 500}。

对于每个 p 值,我想找到使 f 最大化的 x 值。这转化为 1001 个 x 值。

我知道可以在 R 软件中使用 i) 一个 for 循环,ii) 一个 while 循环,iii) 函数 apply,以及 iv) 函数 foreach(doParallel 包)。但是,我想知道您是否可以告诉我是否有更有效的方法来解决上述 R 软件中的优化问题。

我知道上面的优化问题很容易解决。然而,问题的重点是在 R 中同时解决多个优化问题的有效过程。

非常感谢您的帮助。

【问题讨论】:

    标签: r for-loop optimization while-loop doparallel


    【解决方案1】:

    函数optimize()可以用来获取函数的最大值。 然后,您可以按照以下方式对参数的值进行覆盖:

    p<-seq(-500,500,1)
    fn <- function(param,p,...){return( 10 - (param - p)^2) }
    
    
    ll <- lapply(pp,function(i)
      optimize(f= fn, 
               par =c(-1000), 
               p=i, 
               interval = c(-100000000,1000000000),
               maximum = TRUE))
    
    ll[[which.max(sapply(ll,'[[','maximum'))]]
    

    【讨论】:

    • 太好了。我会试试你的建议。但是,我有一个问题:“par = c(-1000)”在优化函数中的作用是什么?谢谢。
    • 很好,如果它适用于您的问题,只需将问题标记为已解决:)。回答您的问题:par = -1000 的角色只是赋予参数的初始值(我只是随机放置一个,您可以放置​​任何数字),优化从该值开始。检查method= 参数以查看不同类型的现有优化也很重要。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多