Поскольку проблема openmdao 1.x обрабатывает только один драйвер, а оптимизаторы по-прежнему должны быть драйверами, как можно реализовать многоуровневую формулировку? Должен ли я использовать две задачи? Должен ли я вызывать оптимизатор непосредственно в методе компонентаsolve_nonlinear? Спасибо.
Как настроить многоуровневую формулировку MDO с openmdao 1.x?
Ответы (2)
Произошли некоторые изменения, и Problem
перестала быть системой. Лучший способ сделать это сейчас — создать Component
, который содержит подзадачу, сообщает ей, когда запускать, и передает данные внутрь и наружу. См. пример здесь:
Как использовать вложенные проблемы в OpenMDAO 1.x ?
Запланированный способ справиться с этим будет заключаться в использовании вложенных экземпляров Проблема. Это еще не реализовано в классе задач, но это очень легко реализовать вручную.
Все, что вам нужно сделать, это определить свой собственный методsolve_nonlinear в подклассе задачи. если вы собираетесь использовать аналитические производные, вам также потребуется реализовать методы Jacobian и apply_linear, а также использовать постоптимальную чувствительность, если у вас есть вложенные оптимизаторы. Или вы можете заставить конечную разницу произойти в содержащей родительской группе.
Вашsolve_linear будет принимать словари params, unknowns и resids и передавать соответствующие переменные в вектор задач. По сути, фреймворк был разработан, чтобы не знать, используете ли вы вложенные задачи. Фреймворк верхнего уровня считает, что внутренний — это обычный компонент.