Основы - решатели для групп MDA - PullRequest
0 голосов
/ 28 сентября 2018

Меня смущают решатели, которые связаны с междисциплинарными группами, как в проблема Селлара .

Какую матрицу они по сути строят?К чему они сходятся?Вполне вероятно, что мне не хватает чего-то очень очевидного.Есть ли литература по этому вопросу?

1 Ответ

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

В конкретном учебном пособии, на которое вы ссылаетесь, нелинейный решатель имеет вид NonlinearBlockGS .Этот решатель не должен создавать какие-либо матрицы частных производных, чтобы сходить свою модель.Он просто запускает компоненты итеративно, передавая данные между ними после каждого включения, пока модель не сойдется.Это эквивалентно итерации с фиксированной точкой.Если вы использовали оптимизатор без градиента с этим решателем, вам не нужно предоставлять OpenMDAO какие-либо частные производные или даже вызывать партиалы.

Однако ваш вопрос о what matrix are they essentially constructing подразумевает, что вы думаете о NewtonSolver , который действительно формирует линейную систему для поиска обновлений переменных состояния на каждом шаге.Если вы использовали NewtonSolver для задачи Селлара, тогда уравнение обновления ньютона будет иметь вид

Newton update linear system

Это обычная формула для обновления ньютона, сконкретные переменные, помеченные из задачи Селлара.В приведенном вами примере нелинейный решатель был добавлен специально в группу cycle, которая содержит только y1 и y2 в качестве выходных переменных дочерних компонентов.Таким образом, частная производная Якобиана обновления Ньютона имеет вид 2x2.

В OpenMDAO решатели могут быть добавлены в разные части иерархии.В этом случае, если NewtonSolver был добавлен в корневую группу (а не в нижнюю группу cycle), тогда система обновлений Newton будет иметь размер 8x8, так как в корне есть 8 различных выходных переменных компонентов.группа.Эти 8 переменных:

  • x (размер 1)
  • z (размер 2)
  • y_1 (размер 1)
  • y_2 (размер1)
  • obj (размер 1)
  • con1 (размер 1)
  • con2 (размер 1)

Наличие решателя ньютонанезависимо от того, какой оптимизатор вы используете (на основе градиента или без градиента), это будет означать, что вам нужны производные.Поэтому вам нужно будет вызвать decalre_partials и либо установить method='fd', либо предоставить аналитические производные.

...