当针对框约束时从 Levenberg-Marquardt 中删除函数的技术

计算科学 优化 约束优化
2021-11-29 06:46:42

我正在用 Levenberg-Marquardt 解决一个有点大(20 多维)的求根问题。其中一个函数在 [0, 2] 上有框约束。当它违反这些界限时,它将无法找到函数的零。将其留在解决方案中并让优化器尝试找到最小值并不能为问题的其余部分找到一个好的解决方案。

我尝试了几种不同的技术在该函数中插入零,最天真的是:

if ( y0[m] <= 0 || y0[m] >= 2 )
  z[n] = 0
else
  z[n] = H0tf
end

(其中 y0[m] 是有界的自变量,z[n] 是产生的零函数,而 H0tf 是一个有点复杂的函数)。

我还尝试了不那么天真的方法来引入这些零,在 0 和 2 附近引入了各种势能,以便函数变得平滑而不是不连续。

所有这些方法的总体困难在于,现在在无界情况下,优化器需要解决全局优化问题,其中在 0 和 2 处可能存在零,并且在 [0, 2 ] 范围,它变得非常“hacky”,试图用本地优化器解决这个问题。

有没有更好的方法来处理以某种方式从优化器的考虑中删除此函数时它处于其边界?你怎么称呼这种技术?

1个回答

您是否尝试在最小二乘目标函数中添加惩罚正则化方案?

Levenburg-Marquardt 算法试图最小化残差其中是您的参数向量。您可以尝试添加一个惩罚项,以惩罚求解器建议将麻烦的参数放置在边界附近。r(xi)xi

r(xi)=r(xi)+p(xi)

这里是惩罚项,当您的一个参数被卡住或接近边界时,它将是非零的。显然,您应该只接受的解决方案。p(xi)p(xi)=0

顺便说一句,您是否尝试过信任区域反射算法。这些事情可能是特定于问题的,但我对它的效率和稳健性印象深刻。这是scipy中的默认选项。