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