0
我正在教程中運行「Sellar exmaple」的代碼。根據tutorial page上給出的文檔,ExecComp
只是宣佈正常Component
的簡寫。所以我嘗試在示例中重新定義ExecComp
作爲正常的Component
s並在相同的示例中使用它們。OpenMDAO:使用普通組件替換ExecComps組件更改輸出
的ExecComp
S IN的例子中定義如下 - 是我所定義
self.add('obj_cmp', ExecComp('obj = x**2 + z[1] + y1 + exp(-y2)',
z=np.array([0.0, 0.0]), x=0.0, y1=0.0, y2=0.0),
promotes=['*'])
self.add('con_cmp1', ExecComp('con1 = 3.16 - y1'), promotes=['*'])
self.add('con_cmp2', ExecComp('con2 = y2 - 24.0'), promotes=['*'])
正常Component
S作爲如下 -
目的組分
class SellarObjective(Component):
def __init__(self):
super(SellarObjective, self).__init__()
self.add_param('x', val=0.0)
self.add_param('y2', val=0.0)
self.add_param('y1', val=0.0)
self.add_param('z', val=np.zeros(2))
self.add_output('obj', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
unknowns['obj'] = params['x']**2 + params['z'][0] + params['y1'] + exp(-params['y2'])
def linearize(self, params, unknowns, resids):
J = {}
J['obj', 'x'] = 2 * params['x']
J['obj', 'y2'] = (-1) * exp(-params['y2'])
J['obj', 'y1'] = 1.0
J['obj', 'z[0]'] = 1.0
return J
約束1
class SellarConstraint1(Component):
def __init__(self):
super(SellarConstraint1, self).__init__()
self.add_param('y1', val=0.0)
self.add_output('con1', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
unknowns['con1'] = 3.16 - params['y1']
def linearize(self, params, unknowns, resids):
J = {}
J['con1', 'y1'] = -1.0
return J
約束2
class SellarConstraint2(Component):
def __init__(self):
super(SellarConstraint2, self).__init__()
self.add_param('y2', val=0.0)
self.add_output('con2', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
unknowns['con2'] = params['y2'] - 24.0
def linearize(self, params, unknowns, resids):
J = {}
J['con2', 'y2'] = 1.0
return J
我舉例說明這些新聲明Component
S IN的重新編寫執行情況 -
self.add('obj_cmp', SellarObjective(), promotes=['*'])
self.add('con_cmp1', SellarConstraint1(), promotes=['*'])
self.add('con_cmp2', SellarConstraint2(), promotes=['*'])
一切都在代碼中其他是一樣的的教程。但是在執行它們之後,當我比較結果時 - 結果不匹配。
我在這裏錯過了一些明顯的東西嗎?感謝您的時間。
'Z [1]',而不是'Z [0]'是我的一個很瑣碎的錯誤。對於那個很抱歉。 –
衍生錯誤有點棘手。在聲明數組的派生時,將數組中的每個條目作爲單獨的變量處理。 –