Как настроить многоуровневую формулировку MDO с openmdao 1.x?

Поскольку проблема openmdao 1.x обрабатывает только один драйвер, а оптимизаторы по-прежнему должны быть драйверами, как можно реализовать многоуровневую формулировку? Должен ли я использовать две задачи? Должен ли я вызывать оптимизатор непосредственно в методе компонентаsolve_nonlinear? Спасибо.


person relf    schedule 16.09.2015    source источник


Ответы (2)


Произошли некоторые изменения, и Problem перестала быть системой. Лучший способ сделать это сейчас — создать Component, который содержит подзадачу, сообщает ей, когда запускать, и передает данные внутрь и наружу. См. пример здесь:

Как использовать вложенные проблемы в OpenMDAO 1.x ?

person Kenneth Moore    schedule 09.02.2016

Запланированный способ справиться с этим будет заключаться в использовании вложенных экземпляров Проблема. Это еще не реализовано в классе задач, но это очень легко реализовать вручную.

Все, что вам нужно сделать, это определить свой собственный методsolve_nonlinear в подклассе задачи. если вы собираетесь использовать аналитические производные, вам также потребуется реализовать методы Jacobian и apply_linear, а также использовать постоптимальную чувствительность, если у вас есть вложенные оптимизаторы. Или вы можете заставить конечную разницу произойти в содержащей родительской группе.

Вашsolve_linear будет принимать словари params, unknowns и resids и передавать соответствующие переменные в вектор задач. По сути, фреймворк был разработан, чтобы не знать, используете ли вы вложенные задачи. Фреймворк верхнего уровня считает, что внутренний — это обычный компонент.

person Justin Gray    schedule 17.09.2015
comment
О, вы указываете мне на тот факт, что проблема является системой (не уверена, что она упоминается где-либо, кроме как в коде)! Так что мы действительно можем использовать вложенные задачи и методsolve_nonlinear. Спасибо. - person relf; 17.09.2015
comment
Привет, у меня есть сомнения относительно этого ответа. Определяем ли мыsolve_nonlinear в подклассе Problem или в корне указанного подкласса, так какsolve_nonlinear изначально является функцией, определенной в Component и Group, поэтому перегрузка метода должна работать только для их подклассов. Если возможно, приведите пример определения такого вложенного класса. Спасибо. - person Divya Manglam; 09.02.2016