关于OpenMDAO中SciPy Optimizer迭代计数bug及退出状态优化的问询
OpenMDAO v3.20.2优化报告的问题及改进建议
1. 迭代计数不匹配问题
使用SciPyOptimizer的SLSQP优化器时,优化报告中的迭代计数与SciPy原生打印的计数不一致:
- SciPy输出显示迭代次数为20
- 但通过
p.driver.opt_result['iter_count']获取到的计数是43
修复方案:
在scipy_optimizer.py文件中,将迭代计数设置为SciPy OptimizeResult返回的nit值,即添加代码:
self.iter_count = result.nit
nit是SciPy优化结果中记录的实际迭代次数,用它覆盖当前计数逻辑即可解决不匹配问题。
2. 退出状态信息不足问题
当前优化器仅输出FAIL作为失败状态,缺乏具体终止原因。而SciPy优化结果的status字段会明确说明终止原因,比如达到迭代限制、约束违反等,这些信息对排查问题更有实用价值。
改进建议:
将SciPy返回的status对应的详细终止原因整合到OpenMDAO的优化输出或报告中,替代单一的FAIL提示,让用户直接获取优化终止的具体原因。
相关输出示例
Iteration limit reached (Exit mode 9) Current function value: 1.5695626156067153 Iterations: 20 Function evaluations: 42 Gradient evaluations: 16 Optimization FAILED. Iteration limit reached ----------------------------------- Time: 94.89042663574219 p.driver.opt_result['iter_count'] Out[2]: 43
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

