У меня есть два компонента comp1 и comp2, которые образуют задачу, которую нужно запускать несколько раз. Для этого я обнаружил, что могу использовать UniformDriver (я не знаю, является ли он наиболее подходящим для моей цели). Тем не менее, я хотел бы отправить отзыв из comp2 в comp1. Итак, после первого запуска я получаю вывод от comp2, который для следующего запуска должен быть вводом для comp1. Я думаю, что следующий пример немного проясняет, что я хотел бы сделать:
from openmdao.api import Component, Group, Problem, UniformDriver
class Times2Plus(Component):
def __init__(self):
super(Times2Plus, self).__init__()
self.add_param('x', 1.0)
self.add_param('z', 2.0)
self.add_output('y', shape=1)
def solve_nonlinear(self, params, unknowns, resids):
unknowns['y'] = params['x'] * 2.0 + params['z']
class Power3(Component):
def __init__(self):
super(Power3, self).__init__()
self.add_param('y', shape=1)
self.add_output('x', shape=1) # feedback to params['x'] as input in next run
def solve_nonlinear(self, params, unknowns, resids):
unknowns['x'] = params['y'] ** 3.0
prob = Problem(root=Group())
prob.driver = UniformDriver(num_samples=5)
prob.root.add('comp1', Times2Plus())
prob.root.add('comp2', Power3())
prob.root.connect('comp1.y', 'comp2.y')
prob.setup()
prob.run()
По сути, выход x компонента Power3 предыдущего запуска должен быть подключен к входу x компонента Times2Plus. Кроме того, у меня есть заранее известный параметр z для компонента Times2Plus, который отличается для каждого запуска. Как лучше всего включить этот изменяющийся параметр и опцию обратной связи?