【问题标题】:apply condition to the optimized parameters using optim使用 optim 将条件应用于优化的参数
【发布时间】:2021-04-23 02:00:21
【问题描述】:

假设我想使用下面的函数优化参数x 的向量

fr <- function(x) {   
    x1 <- x[1]
    x2 <- x[2]
    x3 <- x[2]
    x4 <- x[2]
    100 * (x2 - x1 * x1)^2 + (1 - x1)^2 + x3 + x4
 }

temp <- optim(c(1, 1.5, 1.8, 1.9), fr)

正在优化的 x 无法排序,即它们具有自然顺序,x 的第一个元素始终是最小的,最后一个元素始终是最大的。我也想在优化后保留这些。 优化完成后,优化后的参数如下:

temp$par
[1] 0.3334119 0.1011343 3.2182704 2.7068277

无论如何我可以对优化参数应用条件,使它们按升序排列,即满足以下条件

temp$par[1] < temp$par[2] < temp$par[3] < temp$par[4]    

【问题讨论】:

    标签: r optimization


    【解决方案1】:

    fr 中排序x,然后使用sort(temp$par) 作为结果。请注意,par 这里 not 对应于问题中的x。问题中的x 对应于fr 中的x 以及此处的sort(tmep$par),因此fr 中的计算仅适用于有序x 值。

    fr <- function(par) {   
        x <- sort(par)
        x1 <- x[1]
        x2 <- x[2]
        x3 <- x[2]
        x4 <- x[2]
        100 * (x2 - x1 * x1)^2 + (1 - x1)^2 + x3 + x4
     }
    
    temp <- optim(c(1, 1.5, 1.8, 1.9), fr)
    
    temp$convergence
    ## [1] 0
    
    x <- sort(temp$par); x
    ## [1] 0.9898021 0.9898025 1.9933419 2.0045291
    

    【讨论】:

    • 实际上,被优化的x 无法排序,即它们有一个自然的顺序,x 的第一个元素总是最小的,最后一个元素是最大的。我也想在优化后保留这些。
    • 明白了。感谢您的时间和解释
    • 已转cmets回答。
    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2021-04-25
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多