OpenMDAO SimpleGADriver 惩罚

OpenMDAO SimpleGADriver penalty

在OpenMDAO 的SimpleGADriver 中,惩罚因子是应用于缩放约束值还是原始约束值?

在我的问题中,我有一个 objective 和几个不同数量级的约束,因此我在定义它们时应用比例因子,例如:model.add_objective('obj', ref=1e6)。这样,在驱动程序级别,我拥有 1.

数量级的所有功能

我设置了 penalty_exponent=2penalty_parameter=20,它们都很高,但驱动程序似乎更喜欢具有低 objective 函数值的高度不可行点。

如有任何提示,我将不胜感激。

代码正在将惩罚应用于缩放目标和约束。相关行是 here,特别是行

obj_values = self.get_objective_values()fun = obj + penalty * sum(np.power(constraint_violations, exponent))

get_objective_values() 方法默认 returns 驱动程序缩放值中的东西。约束的工作方式相同。