Может ли кто-нибудь дать мне ответ «оптимизация траектории для чайников»?

Итак, сейчас я занимаюсь проектом по оптимизации траектории. Я понимаю его принцип: минимизируйте затраты на топливо для путешествия или попытайтесь максимизировать вес космического корабля в пункте назначения, и это выдает оптимальную траекторию для этого. Я просто не уверен.. как это сделать на самом деле? Я много читаю о таких вещах, как «праймер-векторы» и методы, основанные на форме, и даже гамильтонианы (которые пугают до чертиков этого бедного инженера), и я просто не уверен, с чего начать конструирование оптимальная траектория?

Есть ли способ объяснить это для чайников или есть книга, чтобы объяснить это для чайников?

Заранее спасибо!

Хотя в настоящее время есть четыре голоса «за», есть также три голоса, которые нужно закрыть, и пока нет полезных комментариев, как улучшить вопрос, поэтому я постараюсь помочь. Два голосования за закрытие были сделаны по той причине, что вопрос «слишком широк», и это, вероятно, правда. Это не значит, что это плохой вопрос, но он не подходит для Stack Exchange. Я бы порекомендовал вам попытаться сузить этот вопрос до более конкретного вопроса, на который можно легко ответить в нескольких предложениях, максимум в нескольких абзацах. Щас вся гипотетическая книга "оптимизация траектории для чайников"
действительно необходимо, чтобы ответить на этот вопрос, и это слишком много для одного вопроса. Например, вы можете задать один вопрос о простых векторах ; процитируйте отрывок, в котором используется этот термин, и дайте ссылку на источник, а также задайте вопрос, относящийся к нему. Вы также можете просмотреть десятки вопросов и ответов здесь об «оптимизации траектории» (обратите внимание на альтернативное написание) space.stackexchange.com/search?q=trajectory+optimization, а затем задать вопрос о конкретной теме, которая не полностью объяснена. для тебя.
ваше здоровье! Благодарю за помощь, очень новичок на этом сайте! постараюсь быть более узким в будущем!
Я считаю этот сайт наиболее полезным, если я могу разбить его на отдельные вопросы. Поместите самую простую версию вопроса в заголовок вопроса и оставьте уточнение для основной части вопроса.
@uhoh Кажется, рекомендация книги действительно была бы полезна. У вас есть такая книга, о которой вы знаете?
@DoctorMohawk У меня нет опыта, чтобы знать «хорошие книги», но несколько пользователей здесь собрали некоторые ресурсы и ссылки на тему исследования космоса . Новый вопрос, излагающий конкретную проблему, требующую ответа, плюс рекомендация книги могут вызвать его. Если вы «прилично разбираетесь в питоне», есть ли у вас какие-либо мысли о stackoverflow.com/q/51609953/3904031 ?
Да, вопрос чертовски широк ... Оптимизация перехода между двумя копланарными круговыми орбитами с помощью упрощенной задачи двух тел (1 массивное + 1 легкое тело) уже сложна. Затем вы получаете некруговые, некомпланарные, не двухтеловые, неимпульсивные ожоги, помощь гравитации, временные ограничения, температурные ограничения (никакого маневра Оберта против Солнца!), аэродинамическое торможение, массивный корабль в реальной системе n тел, несферические тела, световое давление, нечистый вакуум, и каждый из них увеличивает сложность на порядок. Насколько точны и гибки вы готовы пойти?
Я категорически не согласен со всеми, что этот вопрос следует закрыть как слишком широкий. Основываясь на ответах, которые вызвал этот вопрос, я думаю, что он должен остаться. Я хочу работать над ответом на эту проблему, который заполняет все, что я узнал о методе праймер-вектор/косвенный, но это просто много работы (я бы хотел, чтобы вы могли сохранить черновики и вернуться и закончить ответ над недели времени)

Ответы (3)

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

Список для чтения

Я начну собирать некоторые общие ссылки здесь.

Книги

Другой

Этапы проектирования траектории

Начальная загрузка

Чтобы спланировать миссию, вам нужно определить некоторые общие ограничения миссии. Если это новая проблема, вам может потребоваться запустить решение, чтобы понять, какие ограничения могут существовать.

Для этого вы можете выбрать конкретную дату начала миссии, когда вы считаете, что траектория может быть выполнима, а также некоторые другие конкретные ограничения (количество доступного топлива, Isp двигателя и т. д.). По словам Окампо (Глава 4 Оптимизация траектории космического корабля , под редакцией Конвея), создавшего программу оптимизации траектории NASA Copernicus , существует четыре основных шага:

  1. Найдите допустимое импульсивное решение (мгновенная дельта-V).
  2. Оптимизируйте импульсивное решение (например, минимизируя дельта-V).
  3. Преобразуйте импульсивные маневры в конечное сжигание (немгновенное сжигание), используя субоптимальное управление, и снова оптимизируйте (на этот раз путем максимизации конечной массы или минимизации требуемой исходной сырой массы).
  4. Восстановите векторы тяги, используя оптимальное управление, и оптимизируйте конечное время.

Я думаю , что шаги 1-2 — это все, что вам действительно нужно для создания графиков C3 или DV. После того, как вы определите свои общие ограничения (ниже), вы можете выбрать конкретный набор дат миссии и выполнить все шаги.

Если эталонные траектории уже существуют, вы можете пропустить шаги 1-2, создать графики C3/DV, а затем выполнить все четыре шага после того, как вы определили даты отправления и прибытия и т. д.

Стоит отметить, что Пол предоставил действительно полезную информацию о том, как выполняется сама оптимизация, в другом ответе на этот вопрос . Я не буду пытаться улучшить его ответ прямо сейчас.

Определите общие ограничения

Куда ты направляешься? Какова минимальная и максимальная продолжительность миссии? Когда самое раннее, что вы могли бы уйти? Последний? Вас интересуют траектории с малой тягой или что-то более гомановское?

Межпланетный

Используйте график свиной отбивной для чрезвычайно приблизительных траекторий, соответствующих выбранным границам.

Для Земли-Марса существует веб-инструмент для создания таких файлов . Этот инструмент, кажется, использует наведение по Ламберту, поэтому он выполняет прямую передачу и, вероятно, не сильно поможет с низкоэнергетическими траекториями, включающими помощь гравитации.

В более общем плане у НАСА есть система поиска траекторий (которая предоставляет много информации по этой теме). Как и в случае с вышеупомянутым приложением, и, по-видимому, в целом, «база данных содержит решения для прямых пересадок и простых гравитационных ассистентов на исходящих участках. Для поиска альтернативных траекторий, не указанных в базе данных, могут использоваться более сложные гравитационные маневры и другие стратегии».

Графики для свиных отбивных нередко содержат большие пустые пространства, где не отображается информация о траектории. Например, рассмотрим это из браузера траекторий НАСА:

Графики траекторий могут включать большие пустые пространства.  Этот, от НАСА, показывает окна отправления и прибытия Земли-Апофиса в определенных пределах.

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

Лунный

Я не видел никаких сюжетов для лунных миссий (пока). Тем не менее, идея, похоже, та же: вы определяете свои ограничения и выбираете класс миссий (например, прямые переходы) для просмотра. Затем вы учитываете либо удельную энергию (C3), либо DV.

Например, рассмотрим эту главу из книги JPL Low-Energy Lunar Transfer Design . Они начинают с рассмотрения трех разных классов миссий: прямая передача, короткие низкоэнергетические, длительные низкоэнергетические. Они изменяют долготу восходящего узла (которая зависит от даты отправления) и показывают, как изменяется дельта-V для лунной вставки для каждого из них.

Орбита выведения дельта-V для разных классов миссий в диапазоне долгот восходящего узла.

Итак, в общем, они выяснили ограничения для своих миссий, а затем определили, какие переменные оказывают наибольшее влияние на DV (или C3).

Разработайте осознанные ограничения

После того, как вы нарисовали графики свинины (или дельта-V), вы можете определить ограничения, которые одновременно отвечают требованиям вашей миссии и обеспечивают наибольшую гибкость (например, длинное окно запуска, наибольшая устойчивость к сбоям и т. д.).

И я пока остановлюсь здесь и вернусь и добавлю больше позже (по мере того, как я узнаю).

В самом широком смысле оптимизация траектории — это просто поиск наилучшего пути (и контрольных значений для создания этого пути), которые удовлетворяют динамике. Динамика в данном случае представляет собой либо орбитальную динамику (например, задачу Кеплера о двух телах с правильными эфемеридами), динамику подъема ракеты, либо баллистическую/подъемную динамику входа в атмосферу. Функцию стоимости можно создать разными способами, в зависимости от того, что вы хотите получить в итоге. Например, вы можете оптимизировать динамику для создания определенного состояния в конце фиксированного интервала времени. Или вы можете свести к минимуму расход топлива в поездке (что максимизирует массу полезной нагрузки). Или вы можете минимизировать время, необходимое для достижения определенного конечного состояния, используя наименьшее количество (дросселируемой/векторной тяги).

Как только вы определите, что представляют собой ваши динамические уравнения и какова ваша «функция стоимости», вы можете перевести это в набор уравнений, которые сможете решить. Этот процесс называется «транскрипцией» в номенклатуре оптимизации траектории. Вообще говоря, есть два способа расшифровать проблему. «Косвенный» метод предполагает, что вы должны сформулировать условия оптимальности сначала аналитически, а затем дискретизировать эти условия за некоторое количество временных шагов N. В результате получится нелинейная система уравнений с М Н переменные, где M — количество переменных для описания состояния в данный момент времени (например, количество дифференциальных уравнений); плюс п Н управляющие переменные, где P — количество элементов управления, применяемых на каждом временном шаге. Например, в задаче с двумя телами в декартовых координатах у вас будет четыре переменных состояния на каждом временном шаге (положение по оси x, скорость по оси x, положение по оси y и скорость по оси y). Регулятор может представлять собой регулируемую тягу, которая всегда направлена ​​в направлении скорости. Таким образом, на каждом временном шаге будет только 1 элемент управления. Часто это может быть утомительно, так как большую часть работы приходится выполнять вручную.

Альтернативный вариант называется «прямой» метод. В этом случае вы должны сначала дискретизировать уравнения, а затем сформулировать условия оптимальности. Таким образом, вместо того, чтобы формулировать условия для бесконечного пространства (косвенный метод), вы формулируете их только для конечномерного пространства (конечное число переменных состояния + управления). Преимущество этого метода состоит в том, что проблема теперь становится нелинейной задачей оптимизации с ограничениями (которую легче программировать напрямую и решать с помощью программных пакетов).

Под эгидой прямых методов существует несколько различных способов дискретизации проблемы. Один из способов называется коллокацией, когда мы заставляем динамику согласовываться в определенные моменты времени (при этом предполагается какая-то схема интерполяции между этими точками, например, линейная или квадратичная интерполяция). Другой подход называется стрельбой, что похоже на метод проб и ошибок, когда несоответствие (также известное как ограничение дефекта) на каждом временном шаге дискретизируется, а также сводится к минимуму. Я не использовал методы стрельбы для оптимизации траектории, но я использовал метод коллокации, поэтому я обращусь к нему напрямую.

Ключевой трюк метода коллокации заключается в том, чтобы знать, как вычислить нелинейные ограничения равенства, используя динамику проблемы. Основная идея заключается в том, что на каждом временном шаге необходимо ограничить прогнозируемое значение из динамики равным истинному значению в конце временного шага. Предположим, мы рассматриваем i-й временной шаг, который имеет переменные состояния Икс я и Икс я + 1 соответственно во времени т я и т я + 1 . Предположим также, что уравнение динамики можно записать в виде Икс ˙ знак равно ф . Если мы проинтегрируем обе части этого уравнения по времени на интервале от т я к т я + 1 , мы получили

Икс я + 1 Икс я знак равно т я т я + 1 ф д т .

Интеграл можно дискретизировать многими способами. Для простоты возьмем что-то вроде правила трапеций. Тогда мы можем получить

Икс я + 1 знак равно Икс я + ф я + ф я + 1 2 Δ т .

Определим значение, предсказанное динамикой, как Икс я + 1 п знак равно Икс я + ф я + ф я + 1 2 Δ т . Фактическое значение в конце этого временного шага равно Икс я + 1 . Итак, чтобы наложить динамическое ограничение, мы просто устанавливаем прогнозируемое значение равным истинному значению в конце этого временного интервала. Математически пишем: Икс я + 1 п Икс я + 1 знак равно 0 . Мы пишем это так, потому что большинство пакетов нелинейного программирования требуют, чтобы вы записывали ограничения равенства с RHS, равным нулю.

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

После того, как у вас есть целевая функция и функция ограничения равенства (обе функции переменных состояния и элементов управления на всех временных шагах), вам также необходимо будет указать нижние и верхние границы для каждой из переменных состояния и управляющих переменных на всех временных шагах. Эти ограничения обычно физически мотивированы, например, масса должна быть положительной, или радиус орбиты не может превышать 2 астрономических единиц и т. д. Кроме того, вам часто приходится предоставлять начальное предположение, удовлетворяющее нижней и верхней границам. Иногда задача оптимизации траектории может быть чувствительна к вашему первоначальному предположению, поэтому хорошей идеей будет выбрать ее как можно ближе к тому, что, по вашему мнению, должно быть истинным решением (например, если у вас есть какая-то физическая интуиция в проблеме, теперь пора им пользоваться).

Когда у вас есть вся эта информация, вы можете просто передать ее решателю нелинейного программирования (например, fmincon Matlab, ipopt и т. д.). Обычно существуют различные методы, которые можно использовать для решения нелинейных задач оптимизации с ограничениями, такие как последовательное квадратичное программирование (SQP), методы активных множеств (ASM) или методы внутренних точек (IP). Из методов, которые я использовал при оптимизации траектории для орбитальной механики, я обнаружил, что методы внутренних точек являются самыми быстрыми и надежными. Независимо от того, какой метод нелинейного программирования вы выберете, убедитесь, что при проверке сходимости проверяются как выполнимость (насколько сильно мы нарушаем ограничения), так и оптимальность первого порядка (насколько мы близки к тому, чтобы оказаться на дне чаши). /долина). Оба значения должны быть небольшими, чтобы считаться «конвергентным» решением.

Прежде чем вы начнете программировать код оптимизации траектории для орбитальной механики, я настоятельно рекомендую попробовать более простую задачу с известным решением. Так называемая проблема релейного управления является хорошим примером одномерной задачи оптимального управления, включающей одномерное движение. В этой задаче нужно найти оптимальное ускорение, необходимое для достижения определенного расстояния за минимальное время, при котором ваша конечная скорость также равна нулю. Это классическая задача с большой физической интуицией (и даже с аналитическим решением). Интуитивно, лучший контроль будет состоять в том, чтобы ускориться как можно быстрее к цели назначения до определенной точки, а затем максимально быстро замедлиться, пока вы едва достигнете точки назначения со скоростью, равной нулю.

Вы можете увидеть, как эта проблема bang-bang может быть расшифрована с использованием метода прямого словосочетания (в комплекте с кодом Matlab) в блоге Sam Pfrommer:

http://sam.pfrommer.us/tutorial-direct-collocation-trajectory-optimization-with-matlab

Для получения дополнительной информации об оптимизации траектории в целом, с более сложными примерами, такими как проблема управления тележкой, я предлагаю прочитать/посмотреть учебник Мэтью Келли по этой теме:

https://epubs.siam.org/doi/pdf/10.1137/16M1062569

[Это будет черновик ответа, поскольку я узнаю больше и получу больше времени, чтобы заполнить его и отредактировать с помощью символьной математики - сейчас он будет очень грубым, и этот ответ со временем будет меняться]

Основная упрощенная задача

Общая проблема состоит в том, чтобы взять космический корабль из набора начальных условий р ( 0 ) , в ( 0 ) , м ( 0 ) к набору терминальных условий р ( т ф ) , в ( т ф ) куда ты ( т ) представляет собой непрерывное управление, для которого необходимо решить направление тяги ракеты с учетом функции стоимости Дж быть сведена к минимуму. Функция стоимости обычно представляет собой минимальное время или максимальную массу терминала для задачи времени со свободным концом или максимальную орбитальную энергию для задачи с фиксированным временем. Могут быть другие дискретные элементы управления, такие как время переключения или другие непрерывные элементы управления, если задействовано регулирование, наряду с ограничениями пути и другими сложностями, которые я пока проигнорирую.

Если дать решение ты ( т ) для всех t, тогда проблема сведется к простой задаче с начальными значениями (IVP) со связанной системой обыкновенных различных уравнений (ОДУ), которую можно проинтегрировать вперед с помощью решателя ОДУ, такого как метод Рунге-Кутта-Фельберга (RKF45) или решатель Дорманда-Принса (RKDP) в пакете Matlab ode45.

Поскольку нам не дано ты ( т ) и вместо этого должен решить для этого управления так, чтобы терминальные граничные условия выполнялись, он становится двухточечной краевой задачей (TPBVP).

Косвенный метод

«Косвенный» метод использует вариационное исчисление (CoV) и раздел математики, называемый теорией оптимального управления, в котором используется принцип максимума (или минимума) Понтрягина. Применительно к проблеме оптимизации траекторий ракет это становится теорией праймер-векторов Лоудена, где большая часть математической основы была сделана для инженера.

Косвенный метод обычно использует методы стрельбы (или многократной стрельбы) для интегрирования предположения о начальных условиях вперед во времени до конечного состояния. Остаток всех граничных значений строится, а затем используется инструмент поиска корней, такой как метод Левенберга-Марквардта или метод квази-Ньютона доверительной области (ванильный метод Ньютона-Рафсона будет иметь трудности со сходимостью с этой нелинейной проблемой).

Опуская математическое развитие, задача для ракеты в вакууме с учетом обратного квадрата потенциала центральной силы грамм ( р ) знак равно 1 р 3 р где конечная масса должна быть максимизирована, функция стоимости представляет собой простую задачу Майера:

Дж знак равно ф ( р ф , В ф , м ф , т ф ) знак равно м ф

[EDIT: нужен комментарий о нормализации] Гамильтониан я буду формулировать как:

ЧАС знак равно п р Т В + п В Т [ 1 р 3 р + Т 1 б ] + п м ( р 0 грамм 0 Т м я с п )

[...все еще в процессе...]

Косвенный метод может быть решен с использованием функций fsolveили lsqnonlinфункций Matlab для поиска корней и ode45решателя для интеграции IVP и стрельбы. Или bvp4c/bvp5cможно использовать решатели словосочетаний для интеграции состояния и стоимости, а также для применения внутренних ограничений.

Ограничения косвенного метода:

  1. По мере возрастания сложности задачи угадывать стоимость становится очень сложно и больше похоже на художественную форму.
  2. Решение часто становится чувствительным к небольшим возмущениям в начальных координатах и ​​не сходится (особенно в жестких задачах, таких как экспоненциальная атмосфера).
  3. Ограничения пути (такие как динамическое давление или ограничения угла атаки) становятся трудными для использования.
  4. Сложность уравнения начального вектора становится сложной при рассмотрении ограничений полета и пути в атмосфере.
  5. Уравнения трансверсальности сложно вывести, и они представляют собой художественную форму.

Преимущества непрямого метода:

  1. Быстро, особенно при использовании интеграторов с пошаговой настройкой или аналитическом вычислении траектории.
  2. Относительно просто для неограниченных решений в вакууме, требующих только решателя ОДУ и алгоритма поиска корня.

Прямой метод

Прямой метод использует некоторые for ортогонального словосочетания и дискретизации для преобразования TPBVP в задачу нелинейного программирования. Это исключает из задачи реберное состояние и уравнения реберного состояния, а также условия трансверсальности. Обычно не существует единственного решения задачи, удовлетворяющего терминальным условиям, но функция стоимости Дж ( т ) применяется непосредственно для нахождения решения, удовлетворяющего терминальным ограничениям.

[...опущено огромное количество деталей, о которых я пока только узнаю...]

Функция Matlab fminconили привязки Matlab, которые ipoptможно использовать для решения такого рода проблем, SNOPTявляются широко используемым коммерческим пакетом, используемым для решения такого рода проблем, который также имеет привязки Matlab.

К преимуществам прямого метода относятся:

  1. Отсутствие угадывания начальных значений ребер, гораздо меньшая чувствительность к начальному контрольному предположению
  2. Нет уравнений состояния
  3. Отсутствие условий трансверсальности
  4. Гораздо проще применить ограничения внутреннего пути непосредственно к проблеме.
Чтобы добавить к этому ответу, прямой метод очень хорошо справляется с плохими первоначальными предположениями. Следовательно, он может служить отправной точкой для косвенного метода оптимизации.
Да, спустя 2,5 года я действительно должен посмотреть, смогу ли я обновить это лучше, так как теперь я понимаю намного больше.