OpenMDAO 的 SimpleGADriver 中自动计算的具有整数值的位

Automatically calculated bits in SimpleGADriver of OpenMDAO with integer value

下面的 link 关于 OpenMDAO 中的一个 SimpleGADriver 文档描述 "Default is an empty dict, where every unspecified variable is assumed to be an integer, and the number of bits is calculated automatically"

在文档中的示例中,"xI"值是在优化过程中计算的一个整数值,范围从-5到10。

但是,当我将范围从 -6 更改为 11(不是 2^(n) 的长度)时,"xI" 值被计算为实际值。

虽然"xI"值是未指定的变量,但好像文档中提到的值的位不是自动计算的。

link of the document

[文档中的例子]

from openmdao.api import Problem, Group, IndepVarComp, SimpleGADriver
from openmdao.test_suite.components.branin import Branin

prob = Problem()
model = prob.model = Group()

model.add_subsystem('p1', IndepVarComp('xC', 7.5))
model.add_subsystem('p2', IndepVarComp('xI', 0.0))
model.add_subsystem('comp', Branin())

model.connect('p2.xI', 'comp.x0')
model.connect('p1.xC', 'comp.x1')

model.add_design_var('p2.xI', lower=-5.0, upper=10.0)
model.add_design_var('p1.xC', lower=0.0, upper=15.0)
model.add_objective('comp.f')

prob.driver = SimpleGADriver()
prob.driver.options['bits'] = {'p1.xC': 8}

prob.setup()
prob.run_driver()

对于"xI"整数值,即使范围改变了,有什么解决办法吗?

这是一个错误,已添加到跟踪器中。

目前的解决方法是选择一个范围 (max - min),它是 2 的幂,但大于您想要的范围,然后将您的组件修改为:

  1. 当您超出所需范围时,对 objective 值 "f" 添加较大的惩罚(针对最小化问题),

  1. 当您超出所需范围时,引发 AnalysisError(可以从 openmndao.api 导入)。 AnalysisError 告诉 GA 这个点是无效的,并且给它一个很大的 objective 值。