r - 将固定和可变参数传递给 Optimx

标签 r mathematical-optimization

这是一个语法问题,可能有一个简单的解决方案,但我无法在 optimx 包的 SO 上的任何地方找到它。

最小的工作示例和问题

我有一个功能,如:

ToOptimise = function(a,b,d,e){
(a-1)^2 + (b-2)^2 + (d-3)^2 +(e-4)^2
}

我可以很容易地优化 mle2 中的选择参数:
library(bbmle)

Calib2 = mle2(ToOptimise,
              start = list(a = 1, d = 10),
              fixed = list(b = 2, e = 2))

这并不是真正正确的工具,因为它不是最大似然问题。

我想找到一种方法来轻松地将固定和可优化的参数传递给 Optimx

我计划进行多次校准,随时固定不同的参数,因此不想在某些参数中重做函数硬编码。

我的尝试不起作用
library(optimx)

ToOptimiseVector = function(Theta){
  a = Theta[1]
  b = Theta[2]
  d = Theta[3]
  e = Theta[4]
  (a-1)^2 + (b-2)^2 + (d-3)^2 +(e-4)^2
}


Calib1  = optimx( par = c(1,2,1,2),
                  fn = ToOptimiseVector,
                  Theta[2] = 2, Theta[4] = 2)

Stack Overflow 上的另一个相关问题

另一个不考虑固定和可优化参数的 optimx 语法问题是:
  • R- Optimx for exponential function with 2 parameters - cannot evaluate function at initial parameter values
  • 最佳答案

    添加了 opt fn 的参数.只要通过这个 opt矢量变成 optimx() .任何非 NA 值都将变为固定值。

    ToOptimiseVector <- function(Theta, opt = rep(NA, 4)){
    
    # Check if any of opt is not NA
    if (any(!sapply(opt, is.na))) {
         i = !sapply(opt, is.na)
    # Fix non-NA values
         Theta[i] <- opt[i]
         }
    
    a <- Theta[1]
    b <- Theta[2]
    d <- Theta[3]
    e <- Theta[4]
    return((a-1)^2 + (b-2)^2 + (d-3)^2 +(e-4)^2)
    }
    

    似乎工作。
    Calib1  = optimx( par = c(1,2,1,2), fn = ToOptimiseVector, opt = c(NA, 2, NA, 2))
    
    Calib2  = optimx( par = c(1,2,1,2), fn = ToOptimiseVector)
    
    > Calib1
                   p1       p2      p3       p4 value fevals gevals niter convcode kkt1  kkt2 xtimes
    Nelder-Mead 0.9998974 5.517528 3.00022 10.83214     4    103     NA    NA        0 TRUE FALSE   0.02
    BFGS        1.0000000 4.000000 3.00000  8.00000     4      6      3    NA        0 TRUE FALSE   0.00
    > Calib2
                  p1       p2     p3       p4        value fevals gevals niter convcode  kkt1 kkt2 xtimes
    Nelder-Mead 1.000936 1.999793 3.0006 4.000256 1.344336e-06    227     NA    NA        0 FALSE TRUE   0.01
    BFGS        1.000000 2.000000 3.0000 4.000000 3.566556e-23     16      3    NA        0  TRUE TRUE   0.00
    

    关于r - 将固定和可变参数传递给 Optimx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209922/

    相关文章:

    R - 使用 ggplot2 在 x 轴上绘制儒略日

    使用两个因子重新排列 R 中的矩阵

    r - R中自制距离矩阵

    python - 需要提高 fsolve 的准确性以找到倍数根

    optimization - 在 MIP 求解器 (Gurobi) 中保持切割而不分支

    r - 如何用 dplyr 替换多列中的 NA

    r - 如何编写一个函数,其中输入是数据帧的行,输出是另一个数据帧?

    python - Python 中的随机优化

    c++ - 使用 Gurobi 向模型添加约束时出现问题

    python - CPLEX 给出了两个不同的结果?