我正在用 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”,试图用本地优化器解决这个问题。
有没有更好的方法来处理以某种方式从优化器的考虑中删除此函数时它处于其边界?你怎么称呼这种技术?