¿Alguien puede darme una respuesta de 'optimización de trayectoria para tontos'?

Entonces, actualmente estoy haciendo un proyecto sobre optimización de trayectoria. Obtengo el principio de esto, minimizar el costo de combustible para un viaje o tratar de maximizar el peso de la nave espacial en el destino objetivo, y eso arroja una trayectoria óptima para hacerlo. Simplemente no estoy seguro... ¿cómo hacerlo realmente? Estoy leyendo mucho sobre cosas como 'vectores primarios' y métodos basados ​​​​en formas e incluso hamiltonianos (que asustan a este pobre ingeniero) y no estoy seguro de cómo comenzar a construir un trayectoria optima?

¿Hay alguna forma de explicar esto para tontos, o un libro para explicarlo para tontos?

¡Gracias por adelantado!

Si bien actualmente hay cuatro votos a favor, también hay tres votos para cerrar y, sin embargo, no hay comentarios útiles sobre cómo mejorar la pregunta, así que intentaré ayudar. Los dos votos para cerrar se deben a que la pregunta es "demasiado amplia", y eso probablemente sea cierto. No significa que sea una mala pregunta, sino que no es una buena combinación para Stack Exchange. Le recomiendo que intente reducir esto a una pregunta más específica, algo que pueda responderse fácilmente en unas pocas oraciones o en unos pocos párrafos como máximo. Ahora mismo, todo el libro hipotético "optimización de trayectorias para dummies"
es realmente necesario para responder a esta pregunta y eso es demasiado para una sola pregunta. Podría hacer una pregunta sobre vectores primos , por ejemplo; cite un pasaje que use el término y proporcione un enlace a la fuente, y haga una pregunta específica al respecto. También puede ver las docenas de preguntas y respuestas aquí sobre "optimización de la trayectoria" (tenga en cuenta la ortografía alternativa) space.stackexchange.com/search?q=trayectory+optimization y luego preguntar sobre un tema específico que no se explica lo suficiente. para usted.
¡salud! Agradezco la ayuda, muy nuevo en este sitio! intentará ser más estrecho en el futuro!
He encontrado que este sitio es el más útil si puedo dividirlo en preguntas individuales. Coloque la versión más simple de la pregunta en el título de la pregunta y deje una aclaración para el cuerpo de la pregunta.
@uhoh Parece que una recomendación de un libro, de hecho, sería útil. ¿Tienes un libro así que conozcas?
@DoctorMohawk No tengo experiencia para conocer los "buenos libros", pero varios usuarios aquí han reunido algunos recursos y referencias sobre el tema de la exploración espacial . Una nueva pregunta, que describe un problema específico que pide una respuesta más una recomendación de un libro, podría generar una. Si eres "decente en python", ¿tienes alguna idea sobre stackoverflow.com/q/51609953/3904031 ?
Sí, la pregunta es muy amplia... Optimizar la transferencia entre dos órbitas circulares coplanares con un problema simplificado de 2 cuerpos (1 cuerpo masivo + 1 cuerpo ligero) ya es complicado. Luego obtienes quemaduras no circulares, no coplanares, no de 2 cuerpos, no impulsivas, asistencias por gravedad, limitaciones de tiempo, limitaciones térmicas (¡no hay maniobra de Oberth contra el Sol!), aerofrenado, naves masivas en un sistema real de n-cuerpos, cuerpos no esféricos, presión ligera, vacío impuro, y cada uno de estos aumenta la dificultad en un orden de magnitud. ¿Qué tan preciso y flexible estás dispuesto a ir?
Estoy totalmente en desacuerdo con todos en que esta pregunta debe cerrarse por ser demasiado amplia. Basado en las respuestas que provocó esta pregunta, creo que tiene que quedarse. Quiero trabajar en una respuesta a este problema que complete todo lo que he aprendido sobre el método primario-vector/indirecto, pero es mucho trabajo (me gustaría que pudieras guardar borradores y volver y terminar una respuesta semanas de tiempo)

Respuestas (3)

Estoy buscando una respuesta similar, así que pensé en comenzar una aquí y dejar que otros ofrezcan su opinión. Esto es lo que he encontrado hasta ahora.

Leyendo lista

Comenzaré a compilar algunos enlaces generales aquí.

Libros

Otro

Pasos de diseño de trayectoria

Oreja

Para planificar una misión, debe identificar algunas limitaciones generales de la misión. Si se trata de un problema nuevo, es posible que deba iniciar una solución para comprender qué restricciones pueden existir.

Para hacer eso, puede elegir una fecha de inicio de misión específica cuando crea que una trayectoria podría ser factible, así como algunas otras restricciones específicas (alguna cantidad de combustible disponible, Isp del motor, etc.). Según Ocampo (Capítulo 4 de Spacecraft Trajectory Optimization , editado por Conway), quien creó el programa de optimización de trayectoria Copernicus de la NASA , hay cuatro pasos básicos:

  1. Encuentre una solución impulsiva factible (delta-V instantánea).
  2. Optimice la solución impulsiva (por ejemplo, minimizando delta-V).
  3. Convierta las maniobras impulsivas en encendidos finitos (encendidos no instantáneos) usando un control subóptimo y optimice nuevamente (esta vez maximizando la masa final o minimizando la masa húmeda inicial requerida).
  4. Reconstruya los vectores de empuje utilizando un control óptimo y optimice un tiempo final.

Creo que los pasos 1-2 son todo lo que realmente necesita para generar gráficos C3 o DV. Después de identificar sus limitaciones generales (a continuación), puede elegir un conjunto específico de fechas de misión y seguir todos los pasos.

Si ya existen trayectorias de referencia, puede omitir los pasos 1 y 2, generar sus diagramas C3/DV y luego realizar los cuatro pasos una vez que haya determinado las fechas de salida y llegada, etc.

Vale la pena señalar que Paul ha proporcionado muy buena información sobre cómo se realiza la optimización en sí misma en otra respuesta a esta pregunta . No intentaré mejorar su respuesta en este momento.

Identificar restricciones generales

¿Adónde vas? ¿Cuáles son las duraciones mínima y máxima de la misión? ¿Cuándo es lo más temprano que podrías irte? ¿Lo último? ¿Está interesado en trayectorias de bajo empuje o algo más parecido a Hohmann?

Interplanetario

Utilice un diagrama de chuleta de cerdo para trayectorias extremadamente aproximadas que cumplan con los límites seleccionados.

Para Earth-Mars, hay una herramienta basada en la web para generar estos archivos . Esta herramienta parece usar la orientación de Lambert, por lo que realiza transferencias directas y probablemente no ayudará mucho con trayectorias de baja energía que involucren asistencias por gravedad.

De manera más general, la NASA tiene un motor de búsqueda de trayectorias (que proporciona mucha información sobre este tema). Al igual que con la aplicación anterior, y aparentemente en general, "la base de datos contiene soluciones para transferencias directas y asistencia de gravedad simple en tramos de salida. Se pueden usar maniobras de asistencia de gravedad más complejas y otras estrategias para encontrar trayectorias alternativas que no figuran en la base de datos".

No es raro que los diagramas de chuletas de cerdo incluyan grandes espacios vacíos donde no se muestra información de la trayectoria. Por ejemplo, considere este del navegador de trayectoria de la NASA:

Los diagramas de trayectoria pueden incluir grandes espacios vacíos.  Este, de la NASA, muestra ventanas de salida y llegada para la Tierra-Apofis dentro de ciertos límites.

Puede ser que los autores no calcularon las trayectorias en el área blanca porque sabían que el DV sería demasiado alto, o puede ser que simplemente no se muestren porque son órdenes de magnitud más altas que las que se muestran y sesgan el barra de color. La conclusión aquí es que el diagrama de chuleta de cerdo solo debe mostrar trayectorias relevantes.

Lunar

No he visto ninguna trama de chuleta de cerdo para misiones lunares (hasta ahora). Sin embargo, la idea parece ser la misma: identificas tus limitaciones y eliges una clase de misiones (por ejemplo, transferencias directas) para observar. Luego, considere la energía específica (C3) o el DV.

Por ejemplo, considere este capítulo del libro Diseño de transferencia lunar de baja energía del JPL . Comienzan observando tres clases diferentes de misiones: transferencia directa, corta de baja energía, larga de baja energía. Varían la longitud del nodo ascendente (que es función de la fecha de salida) y muestran cómo cambia la delta-V para la inserción lunar para cada uno de estos.

Delta-V de inserción en órbita para diferentes clases de misión en un rango de longitudes del nodo ascendente.

Entonces, en general, han descubierto las restricciones para sus misiones y luego han determinado qué variables ejercen el mayor control sobre DV (o C3).

Desarrollar restricciones informadas

Una vez que haya producido sus diagramas de porkchop (o delta-V), puede identificar las restricciones que cumplen simultáneamente con los requisitos de su misión y brindan la mayor flexibilidad (p. ej., ventana de lanzamiento prolongada, mayor tolerancia a fallas, etc.).

Y me detendré aquí por ahora y regresaré y agregaré más más tarde (a medida que aprenda).

En su forma más amplia, la Optimización de Trayectoria es simplemente encontrar la mejor ruta (y controlar los valores para producir esta ruta) que satisfaga la dinámica. La dinámica, en este caso, es la dinámica orbital (por ejemplo, el problema de 2 cuerpos de Kepler con efemérides adecuadas), la dinámica de ascenso del cohete o la dinámica de reentrada balística/elevadora. La función de costo se puede crear de muchas maneras diferentes, según lo que desee al final. Por ejemplo, puede querer optimizar la dinámica para producir un estado particular al final de un intervalo de tiempo fijo. O quizás desee minimizar el combustible utilizado en el viaje (lo que maximiza la masa de carga útil). O es posible que desee minimizar el tiempo que lleva alcanzar un estado final particular usando la menor cantidad de (empuje regulable/vectorizado).

Una vez que establezca cuáles son sus ecuaciones dinámicas y cuál es su "función de costo", puede traducir eso en un conjunto de ecuaciones que puede resolver. Este proceso se denomina "transcripción" en la nomenclatura de optimización de trayectoria. A grandes rasgos, hay dos formas de transcribir el problema. El método "indirecto" sugiere que debe formular las condiciones de optimización primero analíticamente, luego discretizar esas condiciones en un número de pasos de tiempo N. Esto dará como resultado un sistema de ecuaciones no lineal con METRO norte variables, donde M es el número de variables para describir un estado en un momento dado (por ejemplo, el número de ecuaciones diferenciales); más PAG norte variables de control, donde P es el número de controles que se aplican en cada paso de tiempo. Por ejemplo, en un problema de dos cuerpos en coordenadas cartesianas, tendrá cuatro variables de estado en cada paso de tiempo (posición x, velocidad x, posición y y velocidad y). El control puede ser un empuje regulable que siempre apunta en la dirección de la velocidad. Entonces, solo habría 1 control en cada paso de tiempo. Muchas veces, esto puede ser tedioso, ya que gran parte del trabajo debe hacerse a mano.

La alternativa se denomina método "directo". En este caso, primero discretizaría las ecuaciones y luego formularía las condiciones de optimización. Entonces, en lugar de formular las condiciones en un espacio infinito (método indirecto), las está formulando solo para el espacio de dimensión finita (un número finito de variables de estado + control). La ventaja de este método es que el problema ahora se convierte en un problema de optimización con restricciones no lineal (que es más fácil de programar directamente y resolver usando paquetes de software).

Bajo el paraguas de los métodos directos, hay un par de formas diferentes de discretizar el problema. Una forma se llama colocación, donde obligamos a la dinámica a estar de acuerdo en ciertos puntos en el tiempo (mientras se asume algún tipo de esquema de interpolación entre estos puntos, como la interpolación lineal o cuadrática). El otro enfoque se llama disparo, que es como un enfoque de prueba y error donde la discrepancia (también conocida como restricción de defecto) en cada paso de tiempo se discretiza y también se minimiza. No he usado métodos de disparo para la optimización de la trayectoria, pero he usado el método de colocación, así que lo abordaré directamente.

El truco clave del método de colocación es saber cómo calcular las restricciones de igualdad no lineal utilizando la dinámica del problema. La idea clave es que en cada paso de tiempo, se debe restringir el valor predicho de la dinámica para que sea igual al valor real al final del paso de tiempo. Supongamos que estamos considerando el paso de tiempo i-ésimo, que tiene variables de estado X i y X i + 1 respectivamente en intervalos de tiempo t i y t i + 1 . Supongamos también que la ecuación dinámica se puede escribir en la forma X ˙ = F . Si integramos ambos lados de esta ecuación con respecto al tiempo en el intervalo de t i a t i + 1 , obtenemos

X i + 1 X i = t i t i + 1 F d t .

Uno puede discretizar la integral de muchas maneras. Para simplificar, elijamos algo como la regla trapezoidal. Entonces podemos obtener

X i + 1 = X i + F i + F i + 1 2 Δ t .

Definamos el valor predicho por la dinámica como X i + 1 pag = X i + F i + F i + 1 2 Δ t . El valor real al final de este paso de tiempo es X i + 1 . Entonces, para imponer una restricción dinámica, simplemente establecemos el valor predicho igual al valor real al final de este intervalo de tiempo. Matemáticamente, escribimos: X i + 1 pag X i + 1 = 0 . Lo escribimos de esta manera porque la mayoría de los paquetes de programación no lineal requieren que escriba restricciones de igualdad con el RHS igual a cero.

Esa es la mayor parte del trabajo duro. Simplemente necesita crear una función que calcule un vector que contenga todas estas restricciones en cada paso de tiempo simultáneamente. De manera similar, deberá escribir su función objetivo en términos de las variables discretas X i , que puede incluir una integral discretizada en el tiempo y/o una función del estado final.

Una vez que tenga la función objetivo y la función de restricción de igualdad (que son funciones de las variables de estado y los controles en todos los intervalos de tiempo), también deberá proporcionar los límites inferior y superior de cada una de las variables de estado y control en todos los intervalos de tiempo. Estos límites generalmente están motivados físicamente, como que la masa debe ser positiva o el radio de la órbita no puede exceder las 2 unidades astronómicas, etc. Además, a menudo debe proporcionar una suposición inicial que satisfaga los límites inferior y superior. A veces, un problema de optimización de trayectoria puede ser sensible a su suposición inicial, por lo que es una buena idea elegirlo lo más cerca posible de lo que cree que debería ser la verdadera solución (por ejemplo, si tiene alguna intuición física sobre el problema, ahora es la solución). hora de usarlo).

Una vez que tenga toda esta información, puede enviarla a un solucionador de programación no lineal (por ejemplo, fmincon, ipopt, etc. de Matlab). Por lo general, existen diferentes métodos que puede usar para resolver problemas de optimización con restricciones no lineales, como la programación cuadrática secuencial (SQP), los métodos de conjuntos activos (ASM) o los métodos de puntos interiores (IP). De los métodos que he usado en la optimización de trayectorias para la mecánica orbital, he encontrado que los métodos de puntos interiores son los más rápidos y robustos. Independientemente del método de programación no lineal que elija, asegúrese de que cuando compruebe la convergencia, compruebe tanto la viabilidad (cuánta violación de restricciones estamos incurriendo) como la optimización de primer orden (qué tan cerca estamos de estar en el fondo de un tazón). /Valle). Ambos valores deben ser pequeños para que se consideren una solución "convergente".

Antes de comenzar a programar un código de optimización de trayectoria para la mecánica orbital, recomiendo probar un problema más simple con una solución conocida. El llamado problema de control bang-bang es un buen ejemplo de un problema de control óptimo 1D que involucra movimiento 1D. En este problema se busca la aceleración óptima necesaria para alcanzar una distancia determinada en el tiempo mínimo tal que su velocidad final también sea cero. Este es un problema clásico con mucha intuición física (e incluso una solución analítica). Intuitivamente, el mejor control sería acelerar lo más rápido que pueda hacia su destino objetivo hasta cierto punto y luego desacelerar lo más rápido posible hasta que apenas llegue a su punto de destino con una velocidad de cero.

Puede ver cómo se puede transcribir este problema bang-bang utilizando el método de colocación directa (completo con el código matlab) en el blog de Sam Pfrommer:

http://sam.pfrommer.us/tutorial-direct-colocation-trayectory-optimization-with-matlab

Para obtener información adicional sobre la optimización de la trayectoria en general, con ejemplos más complicados, como el problema del control del poste del carro, sugiero leer/ver el tutorial de Matthew Kelley sobre este tema:

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

[Esta será una respuesta preliminar a medida que aprenda más y tenga más tiempo para completarla y editarla con matemáticas simbólicas; en este momento será muy difícil y esta respuesta evolucionará mucho con el tiempo]

Problema básico simplificado

El problema genérico es tomar una nave espacial de un conjunto de condiciones iniciales r ( 0 ) , v ( 0 ) , metro ( 0 ) a un conjunto de condiciones terminales r ( t F ) , v ( t F ) donde tu ( t ) es un control continuo a resolver para el cual es la dirección de empuje del cohete, sujeto a una función de costo j ser minimizado. La función de costo suele ser el tiempo mínimo o la masa terminal máxima para un problema de tiempo final libre, o la energía orbital máxima para un problema de tiempo fijo. Puede haber otros controles discretos como tiempos de conmutación u otros controles continuos si se trata de limitación, junto con restricciones de ruta y otras complejidades que ignoraré por ahora.

Si a uno se le da la solución tu ( t ) para todo t, entonces el problema se reducirá a un problema de valor inicial simple (IVP) con un sistema acoplado de diferentes ecuaciones ordinarias (EDO), que podría integrarse hacia adelante con un solucionador de ODE como el método Runge-Kutta-Fehlberg (RKF45) o el solucionador Dormand-Prince (RKDP) en Matlab's ode45.

Como no nos dan tu ( t ) y, en cambio, debe resolver ese control de manera que se cumplan las condiciones de contorno terminales, se convierte en un problema de valor de contorno de dos puntos (TPBVP).

Método indirecto

El método "indirecto" usa el Cálculo de Variaciones (CoV) y una rama de las matemáticas llamada Teoría de Control Óptimo que utiliza el principio máximo (o mínimo) de Pontryagin. Cuando se aplica al problema de optimizar las trayectorias de los cohetes, esto se convierte en la Teoría del vector básico de Lawden, donde gran parte del marco matemático se ha realizado para el ingeniero.

El método indirecto generalmente usa métodos de disparo (o disparos múltiples) para integrar una conjetura en las condiciones iniciales hacia adelante en el tiempo hasta el estado terminal. Se construye el residuo de todos los valores límite y luego se utiliza una herramienta de búsqueda de raíces como Levenberg-Marquardt o un método de región de confianza cuasi-Newton (la vainilla Newton-Raphson tendrá dificultades de convergencia con este problema no lineal).

Omitiendo el desarrollo matemático, el problema de un cohete en el vacío, sujeto a un potencial de fuerza central al cuadrado inverso gramo ( r ) = 1 r 3 r donde la masa final debe maximizarse, la función de costo es un problema de Mayer simple:

j = φ ( r F , V F , metro F , t F ) = metro F

[EDITAR: necesito un comentario sobre la normalización] El hamiltoniano lo expresaré como:

H = PAG r T V + PAG V T [ 1 r 3 r + T 1 b ] + PAG metro ( R 0 GRAMO 0 T metro yo s pag )

[...todavía trabajo en progreso aquí...]

El método indirecto se puede resolver utilizando las funciones fsolveo de Matlab lsqnonlinpara encontrar raíces, y el ode45solucionador para integrar IVP y disparar. O los solucionadores de colocación bvp4c/bvp5cse pueden usar para integrar el estado y la costa y para aplicar restricciones interiores.

Las limitaciones del método indirecto son:

  1. Adivinar la costa se vuelve muy difícil y más una forma de arte a medida que aumenta la complejidad del problema.
  2. La solución a menudo se vuelve sensible a pequeñas perturbaciones en el estado inicial y no converge (particularmente con problemas rígidos como una atmósfera exponencial).
  3. Las restricciones de ruta (como la presión dinámica o las restricciones de ángulo de ataque) se vuelven difíciles de emplear.
  4. La complejidad de la ecuación del vector cebador se vuelve difícil cuando se consideran las restricciones de trayectoria y vuelo atmosférico.
  5. Las ecuaciones de transversalidad son difíciles de derivar y son una forma de arte.

Las ventajas del método indirecto son:

  1. Rápido, especialmente cuando se utilizan integradores de ajuste de tamaño de paso o cálculo analítico de la trayectoria
  2. Relativamente simple para soluciones sin restricciones en el vacío que solo requieren un solucionador ODE y un algoritmo de búsqueda de raíces

Método directo

El método directo utiliza algunas formas de colocación ortogonal y discretización para convertir el TPBVP en un problema de programación no lineal. Esto elimina el costado y las ecuaciones de costado y las condiciones de transversalidad del problema. Generalmente no habrá una única solución al problema que satisfaga las condiciones terminales, pero la función de costo j ( t ) se aplica directamente para encontrar la solución que satisface las restricciones terminales.

[... gran cantidad de detalles omitidos de los que todavía estoy aprendiendo...]

La función de Matlab fmincono los enlaces de Matlab ipoptse pueden usar para resolver este tipo de problema, SNOPTes un paquete comercial comúnmente utilizado para resolver este tipo de problema que también tiene enlaces de Matlab.

Las ventajas del método directo incluyen:

  1. Sin adivinar los valores iniciales de costate, mucho menos sensibilidad a la conjetura de control inicial
  2. Sin ecuaciones de costa
  3. Sin condiciones de transversalidad
  4. Mucho más fácil de aplicar restricciones de ruta interior directamente al problema
Para agregar a esta respuesta, el método directo maneja muy bien las conjeturas iniciales pobres. Por lo tanto, puede servir como semilla para un método de optimización indirecta.
Sí, 2,5 años después, realmente debería ver si puedo actualizar esto mejor, ya que ahora entiendo mucho más.