问题背景
在使用spicy的minimize对规划问题进行求解时,如果未能成功求解问题的最优值,并且出现了Positive directional derivative for linesearch,那么可以尝试以下的四种方案,希望可以帮助到你。
方案一
将问题理解为目标函数是非凸函数,只存在局部最优值。因为选择的那些优化算法通常通过选择下降方向,然后对该方向执行线搜索来工作。我认为Positive directional derivative for linesearch代表着优化器进入了一个位置,它无法找到目标函数值减小的方向(足够快),但也无法验证当前位置是否为最小值。
方案二
尝试将优化的目标值降低几个数量级,如:
Objective(x):
...
return value / 10000000
方案三
对目标函数的返回值,重新设计加平方后开平方,希望能够提高整体目标函数的稳健程度,如:
Objective(x):
...
return np.sqrt(value ** 2)
方案四
调整参数ftol。minimize() 函数中的 ftol 参数用于控制优化过程的收敛条件。它指定在函数值不再显著变化时停止迭代的相对容忍度。具体来说,当两次迭代之间的相对误差小于 ftol 时,算法将被认为已经收敛,进而终止迭代。默认情况下,ftol 的值为 1e-8,尝试将此参数调整为1e-4或者更大。