She did. Now I'm done!

This commit is contained in:
Connor
2022-03-15 22:20:45 -06:00
parent d00b977581
commit 298eb38ff1
7 changed files with 198 additions and 299 deletions

View File

@@ -1,11 +1,10 @@
\chapter{Algorithm Overview} \label{algorithm}
This thesis will attempt to develop an algorithm for the preliminary analysis of feasibility in
designing a low-thrust interplanetary mission to an outer planet by leveraging a monotonic basin
hopping algorithm. In this section, we will review the actual execution of the algorithm
developed. As an overview, the routine was designed to enable the determination of an optimized
spacecraft trajectory from the selection of some very basic mission parameters. Those parameters
include:
This thesis focuses on designing a low-thrust interplanetary mission to an outer planet by
leveraging a monotonic basin hopping algorithm. This section will review the actual execution of
the algorithm developed. As an overview, the routine is designed to enable the determination of
an optimal spacecraft trajectory that minimizes propellant usage and $C_3$ from the selection of
some very basic parameters. Those parameters include:
\begin{itemize}
\setlength\itemsep{-0.5em}
@@ -25,7 +24,7 @@
\end{itemize}
Which allows for an automated approach to optimization of the trajectory, while still providing
the mission designer with the flexibility to choose the particular flyby planets to investigate.
the designer with the flexibility to choose the particular flyby planets to investigate.
This is achieved via an optimal control problem in which the ``inner loop'' involves solving a
TPBVP to find the optimal solution given a suitable initial guess. Then an ``outer loop''
@@ -133,12 +132,11 @@
The following pseudo-code outlines the approach taken for the elliptical case. The
approach is quite similar when $a<0$:
% TODO: Some symbols here aren't recognized by the font
\begin{singlespacing}
\begin{verbatim}
i = 0
# First declare some useful variables from the state
sig0 = (position velocity) / √(mu)
sig0 = dot(position, velocity) / √(mu)
a = 1 / ( 2/norm(position) - norm(velocity)^2/mu )
coeff = 1 - norm(position)/a
@@ -184,7 +182,7 @@
\label{laguerre_plot}
\end{figure}
\subsection{Sims-Flanagan Propagator}
\subsection{Propagating with Sims-Flanagan Transcription}
Until this point, we've not yet discussed how best to model the low-thrust
trajectory arcs themselves. The Laguerre-Conway algorithm efficiently determines
@@ -228,11 +226,9 @@
and the mass flow rate (a function of the duty cycle percentage ($d$), thrust ($f$),
and the specific impulse of the thruster ($I_{sp}$), commonly used to measure
efficiency)\cite{sutton2016rocket}:
\begin{equation}
\Delta m = \Delta t \frac{f d}{I_{sp} g_0}
\end{equation}
Where $\Delta m$ is the fuel used in the sub-trajectory, $\Delta t$ is the time of
flight of the sub-trajectory, and $g_0$ is the standard gravity at the surface of
Earth. From knowledge of the mass flow rate, we can then decrement the mass
@@ -272,10 +268,9 @@
From this information, as can be seen in Figure~\ref{nlp}, we can formulate the mission
in terms of a non-linear programming problem. Specifically, the variables describing the
trajectory contained within the Guess object can be represented as an input vector,
$\vec{x}$, the cost function produced by an entire trajectory propagation as $F$, and
the constraints that the trajectory must satisfy as another function $\vec{G}$ such that
$\vec{G}(\vec{x}) = \vec{0}$.
trajectory from the free variable, $\vec{x}$, the cost function produced by an entire
trajectory propagation, $F$, and the constraints that the trajectory must satisfy as
another function $\vec{G}$ such that $\vec{G}(\vec{x}) = \vec{0}$.
This is a format that we can apply directly to the IPOPT solver, which Julia (the
programming language used) can utilize via bindings supplied by the SNOW.jl
@@ -333,12 +328,12 @@
\subsection{Random Trajectory Generation}\label{random_gen_section}
At a basic level, the algorithm needs to produce a guess (represented by all of the
values described in Section~\ref{inner_loop_section}) that contains random values within
reasonable bounds in the space. However, that still leaves the determination of which
distribution function to use for the random values over each of those variables, which
bounds to use, as well as the possibilities for any improvements to a purely random
search.
At a basic level, the algorithm needs to produce a guess for the free variable vector
(represented by all of the values described in Section~\ref{inner_loop_section}) that
contains random values within reasonable bounds in the space. However, that still leaves
the determination of which distribution function to use for the random values over each
of those variables, which bounds to use, as well as the possibilities for any
improvements to a purely random search.
Currently, the first value set for the mission guess is that of $n$, which is the
number of sub-trajectories that each arc will be broken into for the Sims-Flanagan
@@ -372,18 +367,18 @@
missions with more flybys.
Then, the internal components for each phase are generated. It is at this step, that
the mission guess generator splits the outputs into two separate outputs. The first
the trajectory guess generator splits the outputs into two separate outputs. The first
is meant to be truly random, as is generally used as input for a monotonic basin
hopping algorithm. The second utilizes a Lambert's solver to determine the
appropriate hyperbolic velocities (both in and out) at each flyby to generate a
natural trajectory arc. For this Lambert's case, the mission guess is simply seeded
natural trajectory arc. For this Lambert's case, the trajectory guess is simply seeded
with zero thrust controls and outputted to the monotonic basin hopper. The intention
here is that if the time of flights are randomly chosen so as to produce a
trajectory that is possible with a control in the vicinity of a natural trajectory,
we want to be sure to find that trajectory. More detail on how this is handled is
available in Section~\ref{mbh_subsection}.
However, for the truly random mission guess, there are still the $v_\infty$ values
However, for the truly random trajectory guess, there are still the $v_\infty$ values
and the initial thrust guesses to generate. For each of the phases, the incoming
excess hyperbolic velocity is calculated in much the same way that the launch
velocity was calculated. However, instead of multiplying the randomly generate unit
@@ -471,14 +466,11 @@
Because of this, the perturbation used in this implementation follows a
bi-directional, long-tailed Pareto distribution generated by the following
probability density function\cite{englander2014tuning}:
\begin{equation}
1 +
\left[ \frac{s}{\epsilon} \right] \cdot
\left[ \frac{\alpha - 1}{\frac{\epsilon}{\epsilon + r}^{-\alpha}} \right]
\end{equation}
\noindent
Where $s$ is a random array of signs (either plus one or minus one) with dimension
equal to the perturbed variable and bounds of -1 and 1, $r$ is a uniformly
distributed random array with dimension equal to the perturbed variable and bounds