Как сделать форму параметра переменной?

#openmdao

#openmdao

Вопрос:

Предположим, я оптимизирую количество ветряных турбин на ветропарке. Форма макета — это переменная, управляемая оптимизатором. Если я не объявляю форму или значение в параметре, я получаю сообщение об ошибке:

ValueError: Shape of output 'U' must be specified because 'val' is not set

но форма U зависит от размера входного параметра, который неизвестен.

Должен ли я создать внешний модуль, в который оптимизатор записывает форму, и заставить мой компонент прочитать форму? Или есть гораздо более простой способ? Спасибо!

Комментарии:

1. Можете ли вы сформулировать свою проблему так, U чтобы она соответствовала максимально возможному размеру входных данных? Внутренне вы можете заставить solve_nonlinear изменять его до соответствующего размера при каждом вызове. Если это не изменяет размер, это должно быть относительно недорогой операцией.

Ответ №1:

на самом деле это не может быть неизвестно. Обычно я бы делал это с аргументом __init__ метода. Когда вы настраиваете свой класс, вы передаете размер нужных вам переменных (или некоторое число, которое позволяет вам вычислить размер класса, например n_turbines). Я бы сделал это в подклассе проблем, который вы определяете.

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

Комментарии:

1. Поздравляю с доктором философии Джастином. Какие-нибудь обновления к этому ответу случайно? Спасибо!

2. Я рад помочь, но я думаю, что мне нужен более конкретный пример. Можете ли вы создать примерный пример, который мы могли бы использовать в качестве основы для обсуждения?