She did. Now I'm done!
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user