OpenMDAO中pyoptsparse IPOPT驱动收敛异常及目标函数缩放问题
OpenMDAO pyoptsparse IPOPT驱动收敛问题与缩放疑问
使用OpenMDAO的pyoptsparse IPOPT驱动时,出现收敛至不可行点的问题,当前采用有限差分偏导数(finite difference partials),怀疑问题根源在于变量、目标函数及约束的缩放:驱动会朝某变量大幅步进,虽能优化目标函数,但同时加剧了约束违例。
初始缩放报告显示,初始点的变量与约束均被缩放至0-1区间,但目标函数缩放后的值为3.4。手动调整adder和scaler将其缩放至1.7后,约束违例情况有所降低。
我的缩放流程
- 运行
om.DOEDriver(om.LatinHypercubeGenerator())获取非线性(非解析)约束的范围; - 记录变量边界,通过变量的极端组合计算目标函数的最小、最大值(目标函数为解析形式,计算简便);
- 设置adder为目标函数最小值的相反数,scaler为取值范围(最大值-最小值)的倒数。
目标函数缩放手动计算过程
未缩放的成本值:
- 模型目标函数最小值:89673.8
- 模型目标函数最大值:275506.5
- Adder = -89714.7404
- Scaler = 5.369e-6
- 驱动目标函数最小值 = (89673.8 + (-89714.7404)) × 5.369e-6 = -2.199e-4
- 驱动目标函数最大值 = (275506.5 + (-89714.7404)) × 5.369e-6 = 0.998
按照上述手动计算,目标函数应恰好缩放至0-1区间,但实际缩放报告输出值为1.7。
相关截图


求助问题
- 我的adder和scaler计算流程是否正确?若不正确,推荐何种缩放方法?
- OpenMDAO为何会将目标函数缩放至1.7?
恳请提供优化建议。
内容的提问来源于stack exchange,提问作者Kasia
相关产品推荐
相关产品推荐

