%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Franois Brancaleone                              %
%Master's thesis: Global optimization on manifolds %
%Advisor: P.-A. Absil                              %
%Readers: L. Jacques and P.-Y. Gousenbourger       %
%June 2018                                         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

README FILE:

This is the README file for the codes of my master's thesis.
Most of the files in the folder 'manopt2' come directly from the toolbox available Manopt.org (Nicolas Boumal, 2014).
In this README, we describe the additional methods and scripts we added to this folder.

Please, run the script "importmanopt.m" before running any other function/script!

%========================= Novel methods =========================%
Firstly, we refer to the following .m files for the implementation of the novel methods on manifolds:

 - Simulated Annealing (SA) => "simulatedannealing.m",
 - Stochastic Simulated Annealing (SSA) => "stochsimulatedannealing.m"
 - Differential Evolution (DE) => "diffevolution.m",
 - Chaotic Differential Evolution (CDE) => "ChaoticDiffevolution.m" with options.indicator_grad=0,
 - Accelerated Simulated Annealing (AccSA) => "accsimulatedannealing.m" with options.SA=1,
 - Accelerated Differential Evolution (AccDE) => "accsimulatedannealing.m" with options.SA=0,
 - Accelerated Chaotic Differential Evolution (AccCDE) => "ChaoticDiffevolution.m" with options.indicator_grad=1,

These .m files are located in "manopt2\manopt\solvers" together with the already available methods.

The method that implements the approximation of the log-operator for the Stiefel manifold (see section 2.3) is 
given by: 
 - Shooting method => "ShootingMethod.m".

This .m file is located in "manopt2\checkinstall".

%========================= Scripts =========================%
The scripts that reproduces the results displayed in the report are located in "manopt2\checkinstall".
I designed one script for each section of chapter 3: 
 
 - Results in 3.1 (Sphere packing): call the script "packing_on_the_sphere_compare.m" with as input argument 
                                    the number of points (n=6 or n=24 ...) to be distributed on the sphere S^{d-1} (d=3 or d=4...). Set epsilon=0.0015.

 - Results in 3.2 (Levy function): call the script "Levy_function_compare.m" with as input argument a point on the sphere S^{1} 
                                   at which we will start our methods (x_start=[0;1]) and set epsilon=0.5.  

 - Results in 3.3 (Sphere fitting): call the script "sphere_fitting.m" that was written in collaboration with P.-Y. Gousenbourger.
                                    In the first part of the script, one can change the number of data points (n=6 or n=8) and 
                                    choose if we consider geodesic or random points. 
				    In the second part of the script, we call the methods and display the results.
   
 - Results in 3.4 (Low rank aprrox. problem): call the the script "scriptLowRankApprox.m" for the results concerning the derivative-free methods.
				              call the the script "scriptLowRankApprox_compare.m" for the results concerning the gradient based methods.
 
 - Results in 3.5 (Shooting method): the script "test_shoot.m" reproduce the results for the error of the shooting method and the analysis of parameter delta.
				     the script "low_multilinear_rank_approximationscript.m" reproduce the results for the Stiefel and Grassmann manifold.


Please, be careful when you launch a script because some of them may take a while (some scripts last for 10 hours...).
Check the comments at the beginning of each script that indicates the computation time. The comments describe
precisely the settings you have to change in the code if you want to visualize similar results in a reasonable time.

Franois Brancaleone, June 2018.
