允许椭圆形信任区域的 Python 信任区域优化代码

计算科学 优化 Python 软件 信任区域
2021-11-25 16:25:06

是否有任何高质量的信任区域优化实现

  1. 允许非球形椭球信任区域,并且
  2. 是用 Python 编写的,还是很容易从 python 调用?

通过非球形椭圆体信任区域,我的意思是每个牛顿步骤解决(或近似解决)以下形式的问题:

minx12xTHx+gTpsuch thatxTCxΔ2,

对于一些对称正定矩阵C矩阵C的作用类似于 Hessian 预条件子,并且可能因牛顿迭代而异 - 例如,参见Steihaug 的经典论文

我环顾四周,还没有找到太多东西。

  • scipy.optimize 只允许球形信任区域。也就是只能解决C=I
  • PETSc 中的 Tao 允许您为 CG-Steihaug 步骤从一组固定的预制预处理器中进行选择,但不能使用您自己的自定义预处理器(据我所知)。
1个回答

Optizelle应该能够处理这个问题。它是开源和 BSD 许可的。具体来说,它将解决形式为

minδxX12Hδx,δx+f(x),δxstδx,δxΔ2
其中用户可以定义任意预条件子P和内积,. 因此,如果您想要一个非球形的信任区域,请将内积重新定义为更倾斜的东西。小心,因为这也会影响渐变的定义。如果您想要一个将优化迭代更改为优化迭代的预处理器,那很好。求解的 CG 系统将是
PHδx=Pf(x).
从技术上讲,如果想每次迭代都改变内积,这也是可能的,但需要非常小心。有一种称为状态操纵器的机制可以注入任意代码。在优化迭代结束时,您可以注入一些代码来更新您的内积,但您还需要更新缓存的梯度,因为这也会受到影响。