我正在编写约束连续优化的迭代算法。增强拉格朗日算法(外部)称为边界约束 L-BFGS-B 算法(内部),后者称为线搜索算法。优化问题有 1 到 10,000 个边界约束变量和 100-200 个非线性约束。
程序输出解向量(如果找到)、拉格朗日乘数和终止原因。此外,输出是每个内部和外部迭代的迭代列表、目标值和可能的拉格朗日乘数。
对于有问题的情况,我想提供诊断信息:警告、数字问题(矩阵病态、NaN
s 等)等等。
我正在使用 Scala 来调整 Breeze 库中的一些算法,并添加一个拉格朗日算法。该库中的一些算法到处都有日志语句,而其他算法的日志记录很少。
问题:
- 通常会记录哪些信息以及数值优化算法会输出什么信息?
- 如何在记录与输出之间做出决定?显然,在输出复杂性和日志记录的“侵入性”之间存在权衡。
- 使用包含日志记录的诊断子类创建精益算法类是否有意义?
其他建议,例如设计技巧、参考和开源代码示例,也非常受欢迎。