#openmdao
#openmdao
Вопрос:
Я надеялся получить некоторую информацию о том, как разумно установить ссылки на дефекты в Dymos. Я нашел следующие заметки о масштабировании здесь https://github.com/hweyandtnasa/scaling-tutorial но он по-прежнему перечисляет масштабирование дефектов в Dymos как задачу. Должен ли я просто установить их равными значению ref для состояния, к которому они относятся?
Ответ №1:
Масштабирование псевдоспектральных задач оптимального управления является сложной задачей. Если вы можете получить копию практических методов Джона Беттса для оптимального управления и оценки с использованием нелинейного программирования, я настоятельно рекомендую это. Беттс предлагает использовать одинаковое масштабирование как для значений переменных состояния, так и для дефектов. Часто это хорошее эмпирическое правило, но, как и в случае с большинством подходов к масштабированию, оно не является универсальным. Словосочетания «дефекты», которые определяют, является ли динамика физически правильной, — это просто разница между наклоном аппроксимирующего полинома и вычисленными уравнениями движения.
В ситуациях, когда значения состояния велики, но незначительные скорости изменения значительны, по моему опыту, требуется другое масштабирование. Примерами состояний, в которых они могут быть истинными, являются элементы орбиты самолета или космического корабля. Совсем недавно у нас была ситуация, когда передача космического корабля на орбиту с малой тягой не соответствовала физике. Например, прямая кишка с полулатусом обычно измеряется в км, поэтому в масштабе тысяч при нахождении на околоземной орбите). В используемых единицах измерения «значительная» разница в дефекте была меньше 1E-6 (используется пороговое значение для выполнимости). В этом случае проблема была решена путем увеличения defect_scaler на несколько порядков (что эквивалентно уменьшению defect_ref на несколько порядков).
Я бы также рекомендовал эту статью от Росса, Гонга, Карпенко и Проулкса. В нем изложены некоторые хорошие эмпирические правила и есть доступный пример в брахистохроне. Он ссылается на большие затраты. Dymos пока не обеспечивает автоматическую оценку стоимости, но они тесно связаны с множителями Лагранжа задачи, которые выводятся в выводе pyoptsparse, если вы используете SNOPT.
Репозиторий github, на который вы указали, был работой стажера и основывался на этом методе масштабирования, разработанном Sagliano. Мы обнаружили, что это хорошо работает во многих ситуациях, но это также не панацея.
В конечном итоге нам нужны некоторые параметры автоматического масштабирования в Dymos и / или OpenMDAO, но мы не уверены, когда они могут найти свой путь в фреймворк. В нашей прошлой работе подходы к масштабированию обычно более тесно привязывались к уравнениям движения, и Dymos разработан как более общий, поскольку пользователь может указать любой EOM, который он выберет.
Комментарии:
1. спасибо за все справочные материалы, Роб, это будет очень полезно. Таким образом, меньший defect_ref заставляет оптимизатор пытаться приблизить состояние, вычисленное из интерполирующего полинома, к состоянию, вычисленному из EOM — имеет смысл. Похоже, это одна из тех вещей, в которых опыт и интуиция играют определенную роль.
Ответ №2:
В Dymos, если вы оставляете defect_ref
значение неустановленным при вызове set_state_options
, то поведение по умолчанию заключается в том, чтобы сделать значение defect_ref
равным ref
значению. Вот почему это делается:
Дефекты — это различия между вычисленной скоростью состояния из функции полиномиальной интерполяции и фактической скоростью состояния, вычисленной ODE.
Как вы можете видеть здесь: defect = (f_approx-f_computed) * dt_dstau
dt_dstau
просто настраивает вещи в нормализованном временном пространстве, tau
но оно также умножается на единицу времени ( tau
является безразмерным). Это означает, что дефекты вычисляются в тех же единицах измерения, что и сами состояния. Таким образом, разумное предположение о масштабировании заключается в том, чтобы соответствовать масштабированию между состояниями и дефектами. Как следует из ответа Роба Фалька, это не всегда правильное решение, но это хорошая отправная точка.
Комментарии:
1. Спасибо, Джастин, это имеет смысл. Для начала я оставляю их по умолчанию.