Finished section 5 draft finally
This commit is contained in:
@@ -24,3 +24,11 @@
|
||||
year = {2016},
|
||||
url = {https://arxiv.org/abs/1607.07892}
|
||||
}
|
||||
|
||||
@inproceedings{englander2014tuning,
|
||||
title={Tuning monotonic basin hopping: improving the efficiency of stochastic search as applied to low-thrust trajectory optimization},
|
||||
author={Englander, Jacob A and Englander, Arnold C},
|
||||
booktitle={International Symposium on Space Flight Dynamics 2014},
|
||||
number={GSFC-E-DAA-TN14154},
|
||||
year={2014}
|
||||
}
|
||||
|
||||
@@ -784,7 +784,7 @@
|
||||
\label{mbh_flow}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Random Mission Generation}
|
||||
\subsection{Random Mission Generation}\label{random_gen_section}
|
||||
|
||||
At a basic level, the algorithm needs to produce a mission guess (represented by all
|
||||
of the values described in Section~\ref{inner_loop_section}) that contains random
|
||||
@@ -872,9 +872,87 @@
|
||||
matrix of uniform random numbers within that bound.
|
||||
|
||||
\subsection{Monotonic Basin Hopping}\label{mbh_subsection}
|
||||
Outline the MBH algorithm, going into detail at each step. Mention the long-tailed PDF being
|
||||
used and go into quite a bit of detail. Englander's paper on the MBH algorithm specifically
|
||||
should be a good guide. Mention validation.
|
||||
|
||||
Now that a generator has been developed for mission guesses, we can build the
|
||||
monotonic basin hopping algorithm. Since the implementation of the MBH algorithm
|
||||
used in this paper differs from the standard implementation, the standard version
|
||||
won't be described here. Instead, the variation used in this paper, with some
|
||||
performance improvements, will be considered.
|
||||
|
||||
The aim of a monotonic basin hopping algorithm is to provide an efficient method for
|
||||
completely traversing a large search space and providing many seed values within the
|
||||
space for an ''inner loop`` solver or optimizer. These solutions are then perturbed
|
||||
slightly, in order to provide higher fidelity searching in the space near valid
|
||||
solutions in order to fully explore the vicinity of discovered local minima. This
|
||||
makes it an excellent algorithm for problems with a large search space, including
|
||||
several clusters of local minima, such as this application.
|
||||
|
||||
The algorithm contains two loops, the size of each of which can be independently
|
||||
modified (generally by specifying a ''patience value``, or number of loops to
|
||||
perform, for each) to account for trade-offs between accuracy and performance depending on
|
||||
mission needs and the unique qualities of a certain search space.
|
||||
|
||||
The first loop, the ''search loop``, first calls the random mission generator. This
|
||||
generator produces two random missions as described in
|
||||
Section~\ref{random_gen_section} that differ only in that one contains random flyby
|
||||
velocities and control thrusts and the other contains Lambert's-solved flyby
|
||||
velocities and zero control thrusts. For each of these guesses, the NLP solver is
|
||||
called. If either of these mission guesses have converged onto a valid solution, the
|
||||
lower loop, the ''drill loop`` is entered for the valid solution. After the
|
||||
convergence checks and potentially drill loops are performed, if a valid solution
|
||||
has been found, this solution is stored in an archive. If the solution found is
|
||||
better than the current best solution in the archive (as determined by a
|
||||
user-provided cost function of fuel usage, $C_3$ at launch, and $v-\infty$ at
|
||||
arrival) then the new solution replaces the current best solution and the loop is
|
||||
repeated. Taken by itself, the search loop should quickly generate enough random
|
||||
mission guesses to find all ''basins`` or areas in the solution space with valid
|
||||
trajectories, but never attempts to more thoroughly explore the space around valid
|
||||
solutions within these basins.
|
||||
|
||||
The drill loop, then, is used for this purpose. For the first step of the drill
|
||||
loop, the current solution is saved as the ''basin solution``. If it's better than
|
||||
the current best, it also replaces the current best solution. Then, until the
|
||||
stopping condition has been met (generally when the ''drill counter`` has reached
|
||||
the ''drill patience`` value) the current solution is perturbed slightly by adding
|
||||
or subtracting a small random value to the components of the mission.
|
||||
|
||||
The performance of this perturbation in terms of more quickly converging upon the
|
||||
true minimum of that particular basin, as described in detail by
|
||||
Englander\cite{englander2014tuning}, is highly dependent on the distribution
|
||||
function used for producing these random perturbations. While the intuitive choice
|
||||
of a simple Gaussian distribution would make sense to use, it has been found that a
|
||||
long-tailed distribution, such as a Cauchy distribution or a Pareto distribution is
|
||||
more robust in terms of well chose boundary conditions and initial seed solutions as
|
||||
well as more performant in time required to converge upon the minimum for that basin.
|
||||
|
||||
Because of this, the perturbation used in this implementation follows a
|
||||
bi-directional, long-tailed Pareto distribution generated by the following
|
||||
probability density function:
|
||||
|
||||
\begin{equation}
|
||||
1 +
|
||||
\left[ \frac{s}{\epsilon} \right] \cdot
|
||||
\left[ \frac{\alpha - 1}{\frac{\epsilon}{\epsilon + r}^{-\alpha}} \right]
|
||||
\end{equation}
|
||||
|
||||
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
|
||||
of 0 and 1, $\epsilon$ is a small value (nominally set to $1e-10$), and $\alpha$ is
|
||||
a tuning parameter to determine the size of the tails and width of the distribution
|
||||
set to $1.01$, but easily tunable.
|
||||
|
||||
The perturbation function, then steps through each parameter of the mission,
|
||||
generating a new mission guess with the parameters modified by the above Pareto
|
||||
distribution. After this perturbation, the NLP solver is then called again to find
|
||||
a valid solution in the vicinity of this new guess. If the solution is better than
|
||||
the current basin solution, it replaces that value and the drill counter is reset to
|
||||
zero. If it is better than the current total best, it replaces that value as well.
|
||||
Otherwise, the drill counter increments and the process is repeated. Therefore, the
|
||||
drill patience allows the mission designer to determine a maximum number of
|
||||
iterations to perform without any improvements in a row before ending a given drill
|
||||
loop. This process can be repeated essentially ''search patience`` number of times
|
||||
in order to fully traverse all basins.
|
||||
|
||||
\chapter{Results Analysis} \label{results}
|
||||
Simply highlight that the algorithm was tested on a sample trajectory to Saturn.
|
||||
|
||||
Reference in New Issue
Block a user