【问题标题】:nlminb in R returns a value of -Inf for the objective functionR 中的 nlminb 为目标函数返回 -Inf 值
【发布时间】:2021-05-25 10:24:27
【问题描述】:

注意 不幸的是,我无法提供可重现的示例,因为我有一个相当大的代码段。我认为粘贴 300 多行代码不是一个好主意,所以我提供了一个框架和一些伪代码来尝试解释问题。

问题 我正在使用nlminb 解决 R 中的优化问题。这 除了具有我的目标函数的一个特定数据集外,优化器运行良好。以下提供了有关该问题的一些上下文(语法简化)。

# Function with parameters to optimize
#
# my_function = function(params, additional_values1, additional_values2, data){
#      Perform calculations
#      return(value)
# }

# init = vector of initial values
# my_data = relevant data
#
> optimize = nlminb(init, my_function, 
                    additional_values1 = matrix1, additional_values2 = matrix2, 
                    data = my_data, hessian = T)
> optimize
$par
[1] -2.367386  3.032712 -1.146100  3.620519

$objective
[1] -Inf

$convergence
[1] 0

$iterations
[1] 5

$evaluations
function gradient 
       8       24 

$message
[1] "X-convergence (3)"

0 的收敛表明优化器已经收敛,但是目标函数返回值-Inf

是否可以在目标函数上设置下限,或者让nlminb 提供目标函数的最后一个实数值(连同相应的参数值)?

我尝试过使用nlminbcontrol parameters,但是我没有成功。

【问题讨论】:

    标签: r optimization mathematical-optimization convergence


    【解决方案1】:

    请提供一个可重现的例子。您可以在目标函数中检查返回值是否为-Inf,然后让函数报告参数或以其他方式调试函数。

    一般来说,收敛仅仅意味着满足了某个停止条件;所以你不应该太相信它:

    nlminb(c(0, 0), function(x) -Inf)
    ## $par
    ## [1] 0 0
    ## 
    ## $objective
    ## [1] -Inf
    ## 
    ## $convergence
    ## [1] 0
    ## 
    ## $iterations
    ## [1] 1
    ## 
    ## $evaluations
    ## function gradient 
    ##        2        2 
    ## 
    ## $message
    ## [1] "X-convergence (3)"
    

    【讨论】:

    • 很难生成可重现的示例,因为代码很长、很复杂并且有些专有。我认为粘贴 300 多行代码作为可重现的示例并不是一个好主意。上面给出的代码+伪代码应该足以表达问题,
    猜你喜欢
    • 2021-04-09
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2020-06-11
    • 1970-01-01
    • 2015-06-16
    • 2017-12-24
    相关资源
    最近更新 更多