Масштабирование функций в OpenMDAO

Есть ли способ применить логарифмическое масштабирование к целям/ограничениям проекта в OpenMDAO? В моей задаче оптимизации мне приходится иметь дело с целевой функцией, которая принимает большие значения и значительно варьируется в пространстве проектирования (между порядками 10 ^ 6 и 10 ^ 7), поэтому в идеале я хотел бы, чтобы драйвер обрабатывал журнал Цель. Я пока модифицировал свою целевую функцию напрямую, но было бы удобнее сделать это на уровне драйвера. Это возможно?

Загадки Python - Генерация простых чисел!
Загадки Python - Генерация простых чисел!
Обычно существует несколько способов решения задач даже пограничной сложности. Как же определить оптимальное и эффективное решение?
0
0
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В настоящее время драйверы openmdao не поддерживают нелинейное масштабирование, и правильным подходом является использование компонента. В прошлом я иногда делал отдельный «целевой» компонент, который существует для применения некоторых преобразований к необработанной цели. Это позволяет вам вставлять его в свою модель, когда это необходимо, без необходимости изменять исходные расчеты.

Золотая середина между «изменить компонент» и «попросить API-интерфейс драйвера OpenMDAO сделать это за вас» — использовать ExecComp.

prob.model.add_subsystem('log_scale', om.ExecComp('log_f = log(f)')
prob.model.connect('some_comp.f', 'log_scale.f')
prob.driver.add_objective('log_scale.log_f')

exec-comp будет обрабатывать производные этого преобразования для вас. Все, что вам нужно сделать, это подключить вашу цель к правильному входу экземпляра ExecComp.

Если я предоставлю аналитические партиалы через метод calculate_derivatives в some_comp и свяжу some_comp.f с log_scale.f, как вы предложили, будут ли партиалы log_f автоматически вычислены exec-comp?

Kasia 04.04.2022 18:08

Да. ExecComps использует дифференциацию сложных шагов внутри для вычисления своих частей. OpenMDAO автоматически объединит аналитические производные вашего компонента с ExecComp.

Justin Gray 05.04.2022 19:42

Другие вопросы по теме