Я пытаюсь связать выходную переменную меньшего размера одного компонента с определенным фрагментом входной переменной в другом. Обратное возможно (подключение фрагмента большего вывода к меньшему входу) с помощью ключевого слова src_indices, как в примере ниже.
import numpy as np
import openmdao.api as om
p = om.Problem()
p.model.add_subsystem('C1', om.AddSubtractComp('y', 'x', vec_size=3,
units=None, desc='', var_set=''))
p.model.add_subsystem('C2', om.AddSubtractComp('y', 'x', vec_size=2,
units=None, desc='', var_set=''))
p.model.connect('C1.y', 'C2.x', src_indices=[0, 1])
p.setup()
p.run_model()
print(p['C2.y'])
Однако что, если я хочу вместо этого подключить C2.y к C1.x[0:2]? Кажется, должно быть ключевое слово «целевые индексы» для отражения src_indices, но я ничего не нашел. Я пробовал это:
p.model.connect('C2.y', 'C1.x', src_indices=[0, 1, 0])
и это работает, но теперь у меня есть y[0], подключенный к x[2], что нежелательно. Можно ли сделать это?
К сожалению, OpenMDAO 2 не поддерживает подключение вывода к некоторому подмножеству ввода. В качестве обходного пути вы можете создать компонент «адаптер», который принимает меньший массив в качестве входных данных и выводит больший массив. Например:
import numpy as np
import openmdao.api as om
p = om.Problem()
p.model.add_subsystem('C2', om.AddSubtractComp('y', 'x', vec_size=2, units=None, desc=''))
p.model.add_subsystem('Adapter', om.ExecComp('y[:2]=x', x=np.zeros(2), y=np.zeros(3)))
p.model.add_subsystem('C1', om.AddSubtractComp('y', 'x', vec_size=3, units=None, desc=''))
p.model.connect('C2.y', 'Adapter.x')
p.model.connect('Adapter.y', 'C1.x')
p.setup()
p['C2.x'] = 5.
p.run_model()
print(p['C2.y'])
print(p['C1.y'])
Спасибо, Брет. Просто из любопытства, есть ли системная причина, по которой это невозможно, или просто функция, которая еще не встроена?
Теоретически target_indices
может быть реализовано. Мы уже обсуждали это раньше, но это добавляет немного проверки ошибок и накладных расходов на настройку. Это то и другое, чего мы хотели бы избежать, и потребность в целевых индексах пока не возникает достаточно часто, чтобы это оправдать. Возможно в будущем....
OpenMDAO2 не поддерживает целевые индексы. Вам придется объединить несколько входов вместе с помощью MuxComp: openmdao.org/twodocs/versions/latest/features/building_blocks/…