홈>
주기가있는 Group 클래스가 포함 된 문제를 실행할 때 GS 수렴 정보에 대한 액세스를 이해하지 못했습니다. 이를 설명하기 위해 다음 두 버전의 Sellar 문제를 고려하십시오.
prob = Problem()
model = prob.model
model.add_subsystem('px', IndepVarComp('x', 1.0), promotes=['x'])
model.add_subsystem('pz', IndepVarComp('z', np.array([5.0, 2.0])), promotes=['z'])
model.add_subsystem('d1', SellarDis1.SellarDis1(), promotes=['x', 'z', 'y1', 'y2'])
model.add_subsystem('d2', SellarDis2.SellarDis2(), promotes=['z', 'y1', 'y2'])
nlgbs = model.nonlinear_solver = NonlinearBlockGS()
nlgbs.options['maxiter'] = 8
prob.setup()
A = prob.run_model()
이 버전에서는 변수 A에 다음과 같은 수렴 결과가 있습니다.
(False, 1.3188028447075339e-10, 3.6299074030587596e-12)
그러나 Sellar 문제를 다음과 같은 형식으로 정의 할 때 :
class SellarMDA(Group):
def setup(self):
indeps = self.add_subsystem('indeps', IndepVarComp(), promotes=['*'])
indeps.add_output('x', 1.0)
indeps.add_output('z', np.array([5.0, 2.0]))
cycle = self.add_subsystem('cycle', Group(), promotes=['*'])
d1 = cycle.add_subsystem('d1', SellarDis1.SellarDis1(), promotes_inputs=['x', 'z', 'y2'], promotes_outputs=['y1'])
d2 = cycle.add_subsystem('d2', SellarDis2.SellarDis2(), promotes_inputs=['z', 'y1'], promotes_outputs=['y2'])
nl = cycle.nonlinear_solver = NonlinearBlockGS()
nl.options['maxiter'] = 8
prob = Problem()
prob.model = SellarMDA()
prob.setup()
prob['x'] = 2.
prob['z'] = [-1., -1.]
C = prob.run_model()
변수 C에는 GS 수렴과 관련된 정보가 없으며
(False, 0.0, 0.0)
레코더를 사용하지 않고 첫 번째 버전과 같이 두 번째 버전의 GS 수렴 정보를 얻을 수 있습니까?
- 답변 # 1
관련 질문
- openmdao : Dymos : 역학 방정식을 해결하기 위해 solve_ivp 메서드를 명시 적으로 호출하는 방법은 무엇입니까?
- openmdao - MPI에서 실행하는 동안 비선형 솔버를 사용할 때 최적화가 중단됨
- openmdao - 희소 부분 인덱스를 즉시 업데이트 할 수있는 방법이 있습니까
- OpenMDAO의 평행 유한 차분 계산은 각 프로세스의 각 포인트를 실행합니다
- derivative - (Openmdao 240) 구성 요소의 'compute_partials'기능은이 구성 요소에 대해 'declare_partials'를 FD로 강제 적용하더라도 실행되는 것으로 보입니다
- python - 테스트 코드 'paraboloid_minpy'실행 중 문제
- OpenMDAO를 통한 구조 최적화
- openmdao - 구속 조건을 다른 구성 요소의 출력으로 설정하는 방법은 무엇입니까?
- OpenAerostruct와 OpenMDAO를 함께 사용하는 동안 오류가 발생했습니다
- openmdao - Jacobian 벡터 제품을 계산할 때 오류
솔버가 무엇을하고 있는지 보려면, 남은 인쇄를 켜는 것이 좋습니다. 각 솔버에 대해 개별적으로 수행 할 수 있지만 문제 해결 방법을 사용하여 모두 쉽게 켤 수 있습니다.