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