Автоматически вычисляемые биты в SimpleGADriver OpenMDAO с целочисленным значением - PullRequest
0 голосов
/ 21 сентября 2018

Ссылка ниже о документе SimpleGADriver в OpenMDAO описывает «По умолчанию - пустой дикт, где каждая неопределенная переменная считается целым числом, а число битов вычисляется автоматически»

В примере вВ документе значение «xI» рассчитывается в процессе оптимизации как целочисленное значение с диапазоном от -5 до 10.

Однако, когда я изменяю диапазон от -6 до 11 (не длина 2^ (n)), значение «xI» рассчитывается как действительное значение.

Хотя значение «xI» является неопределенной переменной, кажется, что биты значения не рассчитываются автоматически, как указано в документе.

ссылка на документ

[Пример в документе]

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", даже если его диапазон изменился?

1 Ответ

0 голосов
/ 24 сентября 2018

Это ошибка, и она была добавлена ​​в трекер.

Обходным решением на данный момент является выбор диапазона (макс. - мин.), Который имеет степень двойки, но больше, чемвыберите нужный диапазон, а затем измените свой компонент на:

  1. Добавьте большое наказание (для проблемы минимизации) к целевому значению «f», когда вы выходите за пределы желаемого диапазона,

или

Вызовите AnalysisError (может быть импортировано из openmndao.api), когда вы находитесь за пределами желаемого диапазона.Ошибка AnalysisE сообщает GA, что эта точка недопустима, и придает ей большое объективное значение.
...