%
% Optimization Techniques Work 2 report
%
% authors:
%   Χρήστος Χουτουρίδης ΑΕΜ 8997
%   cchoutou@ece.auth.gr


\documentclass[a4paper, 11pt]{AUTHReport}

% Document configuration
\AuthorName{Χρήστος Χουτουρίδης}
\AuthorMail{cchoutou@ece.auth.gr}
\AuthorAEM{8997}

% \CoAuthorName{CoAuthor Name}
% \CoAuthorMail{CoAuthor Mail}
% \CoAuthorAEM{AEM}

% \WorkGroup{Ομάδα Χ}

\DocTitle{1η Εργαστηριακή Άσκηση}
\DocSubTitle{Ελαχιστοποίηση συναρτήσεων πολλών μεταβλητών χωρίς περιορισμούς με χρήση παραγώγων}

\Department{Τμήμα ΗΜΜΥ. Τομέας Ηλεκτρονικής}
\ClassName{Τεχνικές Βελτιστοποίησης}

\InstructorName{Γ. Ροβιθάκης}
\InstructorMail{rovithak@auth.gr}
\CurrentDate{\today}

\usepackage{capt-of}
\usepackage{enumitem}
\usepackage{tabularx}
\usepackage{array}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{amsmath}

\usepackage{float}

\begin{document}

\setlist[itemize]{topsep=0pt, partopsep=0pt, itemsep=3pt, parsep=3pt}

\InsertTitle

%\tableofcontents

\sloppy

\section{Εισαγωγή}
Η παρούσα εργασία αφορά το πρόβλημα της ελαχιστοποίησης μιας δοσμένης συνάρτησης πολλών μεταβλητών $f: \mathbb{R}^n \rightarrow \mathbb{R}$ χωρίς περιορισμούς.
Για το σκοπό αυτό κάνουμε χρήση τριών μεθόδων.
Της μεθόδου μέγιστης καθόδου (Steepest Descent), της μεθόδου Newton, και της Levenberg-Marquardt.
Ακόμα για κάθε μία από αυτές θα υλοποιήσουμε τρεις διαφορετικές τεχνικές υπολογισμού βήματος.

\section{Παραδοτέα}
Τα παραδοτέα της εργασίας αποτελούνται από:
\begin{itemize}
    \item Την παρούσα αναφορά.
    \item Τον κατάλογο \textbf{scripts/}, που περιέχει τον κώδικα της MATLAB.
    \item Το \href{https://git.hoo2.net/hoo2/OptimizationTechniques/src/branch/master/Work2}{σύνδεσμο} με το αποθετήριο που περιέχει όλο το project με τον κώδικα της MATLAB, της αναφοράς και τα παραδοτέα.
\end{itemize}

\section{Προγραμματιστική προσέγγιση}
Για τον προγραμματισμό και εκτέλεση των μεθόδων της παρούσας εργασίας έγινε χρήση της MATLAB.
Στον κατάλογο \textbf{scripts}, περιέχονται όλες οι μέθοδοι και οι τεχνικές υπολογισμού βημάτων με τη μορφή συναρτήσεων καθώς και scripts που τις καλούν.
Για κάθε μία μέθοδο (ένα θέμα της εργασίας), υπάρχει το αντίστοιχο script που περιέχει τους υπολογισμούς, τις κλήσεις των μεθόδων και τη δημιουργία των διαγραμμάτων.
Για το πρώτο θέμα το αρχείο Script\_1\_Plots.m για το δεύτερο το Script\_2\_Steepest\_descent.m και ούτω καθεξής.
Στην παρούσα εργασία η υλοποίηση του κώδικα ακολουθεί την τεχνική της προηγούμενης εργασίας και “ομαδοποιεί” αρκετές λειτουργίες.
Πιο συγκεκριμένα.

\subsection{Κλήση μεθόδων επιλογής βήματος $\gamma_k$}
\label{subsec:polymorphic-calls}
Δεδομένου ότι οι μέθοδοι θα πρέπει να καλεστούν και εκτελεστούν με παραπάνω από μία τεχνική επιλογής βήματος $\gamma_k$, δημιουργήσαμε εσωτερικά της κάθε μεθόδου ένα κοινό interface για τις μεθόδους επιλογής βήματος.
Αυτό έχει τη μορφή: \textit{\textbf{gamma\_<method>(f, grad\_f, x0)}}, όπου το \textbf{f} είναι η αντικειμενική συνάρτηση, \textbf{grad\_f} η συνάρτηση κλίσης και \textbf{x0} το σημείο ενδιαφέροντος.
Για την κάθε μία από αυτές δημιουργήσαμε ξεχωριστή συνάρτηση που υλοποιεί το παραπάνω interface.
Μία για σταθερό βήμα, μία για επιλογή βήματος που ελαχιστοποιεί την $f(x_k + \gamma_k d_k)$ και μία με τη μέθοδο Armijo.
Για την επιλογή και κλήση των μεθόδων επιλογής βήματος εισαγάγαμε μία νέα παράμετρο string που χρησιμοποιείται ως enumerator και με βάση αυτή γίνεται η τελική επιλογή.
Έτσι για παράδειγμα η κλήση \textit{method\_newtown(f, gradf, [0, 0], 0.001, 1000, 'armijo')} υλοποιεί τη μέθοδο newton χρησιμοποιώντας τη μέθοδο Armijo για επιλογή βήματος ενώ η \textit{method\_newtown(f, gradf, [0, 0], 0.001, 1000, 'minimized')}, χρησιμοποιεί βήμα που ελαχιστοποιεί την $f(x_k + \gamma_k d_k)$.

\subsection{Symbolic expression functions}
Μία ακόμη προγραμματιστική τεχνική που ακολουθήθηκε είναι η χρήση \textbf{symbolic expression} για την αναπαράσταση των διαφορετικών αντικειμενικών συναρτήσεων.
Ο λόγος που επιλέχθηκε είναι η \textbf{δυνατότητα εξαγωγής ενός symbolic expression που αναπαριστά την κλίση $\nabla f$ και τον Εσσιανό $\nabla^2f$  μιας συνάρτησης} από την MATLAB, κάνοντας χρήση των εντολών \textit{gradient()} και \textit{hessian()}.
Αν αντίθετα χρησιμοποιούσαμε απλές συναρτήσεις, πολυώνυμα ή lambdas για την αναπαράσταση των αντικειμενικών συναρτήσεων, τότε για τον υπολογισμό της κλίσης και του Εσσιανού θα έπρεπε:
\begin{itemize}
    \item Είτε να υπολογίζαμε αριθμητικά τις παραγώγους gradient και hessian μέσα στις μεθόδους, κάτι που θα εισήγαγε \textit{\textbf{αχρείαστο αριθμητικό σφάλμα}}.
    \item Είτε να κάναμε χρήση δύο επιπλέων συναρτήσεων (ή πολυωνύμων) για την αναπαράσταση τους, κάτι που ουσιαστικά θα δημιουργούσε \textit{\textbf{πλεονασμό πληροφορίας εισόδου}} και άρα μεγαλύτερη πιθανότητα να κάνουμε λάθος.
\end{itemize}
Η αναπαράσταση όμως με χρήση symbolic expression είναι πιο “βαριά” όταν χρειάζεται να υπολογίσουμε την τιμή μιας συνάρτησης σε κάποιο σημείο (subs(expr, number)).
Αυτό είναι κάτι που χρειάζεται εκτενώς στον κώδικά μας.
Για το λόγο αυτό, ενώ η συνάρτηση δίνεται ως symbolic expression, μέσω αυτής υπολογίζονται αυτόματα η κλίση, ο Εσσιανός αλλά και οι “κανονικές” συναρτήσεις MATLAB που τις υλοποιούν.
Έτσι έχουμε την ακριβή αναπαράσταση της κλίσης και του Εσσιανού ως συναρτήσεις χωρίς να πληρώνουμε το κόστος της subs().

\section{Απεικόνιση της συνάρτησης}
Η συνάρτηση με την οποία ασχολούμαστε στην παρούσα εργασία είναι η:
\boldmath
\begin{equation}
    f(x,y) = x^5 \cdot e^{-x^2 - y^2}
\end{equation}
\label{eq:ObjectiveFunction}
\unboldmath
Στο παρακάτω σχήμα \ref{fig:plot3dFunction} φαίνεται η τρισδιάστατη απεικόνιση της συνάρτησης.
\InsertFigure{!h}{0.8}{fig:plot3dFunction}{../scripts/figures/FunctionPlot.png}{Γραφική παράσταση της f}

Από το σχήμα μπορούμε πολύ εύκολα να διακρίνουμε ότι η συνάρτηση έχει ένα ευκρινές μέγιστο και ένα ελάχιστο στο διάστημα $x,y \in [-3, 3]$.
Για να πάρουμε μια καλύτερη αίσθηση για το που βρίσκονται αυτά τα τοπικά ακρότατα, παρακάτω παραθέτουμε ένα γράφημα με τις ισοβαρείς καμπύλες της $f$.
\InsertFigure{H}{0.8}{fig:plotContour}{../scripts/figures/FunctionContour.png}{Ισοβαρείς της f}

Από το παραπάνω σχήμα \ref{fig:plotContour} φαίνεται ότι το ελάχιστο της f βρίσκεται στο αρνητικό ημιεπίπεδο των χ, κοντά στο $y = 0$
\par
Τα διαγράμματα για τη μέθοδο δημιουργούνται εκτελώντας το αρχείο \textbf{Script\_1\_Plots.m}

\section{Τεχνικές υπολογισμού βήματος}
Πριν προχωρήσουμε στα επόμενα θέματα της εργασίας και στην ανάλυση των μεθόδων υπολογισμού του ελάχιστου, θέλουμε να αναφερθούμε στις διαφορετικές τεχνικές επιλογής βήματος $\gamma_k$ και ειδικότερα για αυτή της ελαχιστοποίησης της $f(x_k + \gamma_k d_k)$ και την Armijo.

\subsection{Ελαχιστοποίηση της $f(x_k + \gamma_k d_k)$}
Η μέθοδος αυτή αναζητά την τιμή $\gamma_k$ που ελαχιστοποιεί την τιμή της συνάρτησης κατά μήκος της κατεύθυνσης $d_k$.
Δηλαδή, λύνουμε το μονοδιάστατο πρόβλημα:
\boldmath
\[\displaystyle \min{\gamma_k} f(x_k + \gamma_k d_k) \]
Η κατεύθυνση $d_k$ μπορεί να είναι:
\begin{itemize}
	\item Η αρνητική κλίση $-\nabla f(x_k)$ (Steepest Descent).
	\item Η Newton direction $-{H_k}^{-1} \nabla f(x_k)$ (Newton και Levenberg-Marquardt).
\end{itemize}
\unboldmath
Πλεονεκτήματα της μεθόδου είναι η \textbf{ακρίβεια}, καθώς το βήμα $\gamma_k$ υπολογίζεται με βέλτιστο τρόπο για τη συγκεκριμένη κατεύθυνση και η \textbf{γρήγορη σύγκλιση}, ειδικά σε προβλήματα όπου η $f(x)$ είναι καμπυλωτή με $\gamma_k$ επακριβώς ορισμένο.
Στα μειονεκτήματα μπορούμε να αναφέρουμε το \textbf{υπολογιστικό κόστος}, καθώς ο υπολογισμός του $\gamma_k$ απαιτεί πολλαπλές αξιολογήσεις της $f(x)$.

\subsection{Armijo rule}
Η Armijo rule είναι μια προσαρμοστική τεχνική που επιλέγει το $\gamma_k$ για να εξασφαλίσει επαρκή μείωση της συνάρτησης.
Η βασική ιδέα είναι ότι η συνάρτηση πρέπει να μειώνεται "αρκετά" σε κάθε βήμα, χωρίς να χρειάζεται να υπολογίζεται το ακριβές ελάχιστο.
Η συνθήκη του Armijo είναι:
\boldmath
\[ f(x_k + \gamma_k d_k) \leq f(x_k) + \sigma\gamma_k\nabla f(x_k)^Td_k\]
Όπου $\sigma \in (0,1)$ είναι μια σταθερά (τυπικά $\sigma = 0.1$) και $\gamma_k$ αρχικά να ορίζεται ως 1 και να μειώνεται προοδευτικά (π.χ., $\gamma_k = \beta \cdot \gamma_k$) έως ότου ικανοποιηθεί η συνθήκη.
\unboldmath
\par
Πλεονεκτήματα της μεθόδου είναι η \textbf{σταθερότητα}, καθώς αποτρέπει πολύ μεγάλα βήματα που μπορεί να αυξήσουν την τιμή της $f(x)$, αλλά και η \textbf{ανθεκτικότητα}, καθώς λειτουργεί καλά ακόμα και όταν η $f(x)$ δεν συμπεριφέρεται πολύ καλά.
Στα μειονεκτήματα μπορούμε να αναφέρουμε την \textbf{εξάρτησή της από τις παραμέτρους} \boldmath $\sigma$ και $\beta$\unboldmath, μια κακή επιλογή των οποίων μπορεί να οδηγήσει σε αργή σύγκλιση.

\section{Μέθοδος Μέγιστης Καθόδου - Steepest Descent}
Η πρώτη μέθοδος που χρησιμοποιούμε στην εργασία (Θέμα 2), είναι η μέθοδος μέγιστης καθόδου.
Είναι μια μέθοδος πρώτης τάξης που χρησιμοποιεί την κατεύθυνση της αρνητικής κλίσης $\nabla f(x,y)$ της $f$ ως κατεύθυνση καθόδου.
Η μέθοδος θεωρείται βασική και συχνά χρησιμοποιείται ως εισαγωγή στις μεθόδους βελτιστοποίησης.
\par
Η μέθοδος επιλέγει την κατεύθυνση $d_k = -\nabla f(x_k)$, η οποία είναι η κατεύθυνση της μέγιστης τοπικής μείωσης της συνάρτησης.
Στη συνέχεια, υπολογίζεται το βήμα $\gamma_k$​ για να βρεθεί το επόμενο σημείο $x_{k+1} = x_k + \gamma_k d_k$.
Για να χρησιμοποιήσουμε τη μέθοδο, η συνάρτηση $f$ \textbf{πρέπει να είναι συνεχής και διαφορίσιμη} και η κλίση $\nabla f$ να είναι υπολογίσιμη.
Επίσης για την εφαρμογή της μεθόδου το αρχικό σημείο θα πρέπει να \textbf{μην είναι ακρότατο} της $f$, δηλαδή \boldmath$\nabla f(x_0) \neq 0$\unboldmath.
\par
Όλοι οι υπολογισμοί και τα διαγράμματα για τη μέθοδο βρίσκονται στο αρχείο \textbf{Script\_2\_Steepest\_descent.m}

\subsection{Σημείο εκκίνησης (0,0)}
Για το σημείο (0, 0) η κλίση της $f$ είναι: $\nabla f(0,0) = \begin{bmatrix} 0 \\ 0 \end{bmatrix}$, με αποτέλεσμα η μέθοδος να μην μπορεί να εφαρμοστεί για κανένα τρόπο υπολογισμού βήματος.

\subsection{Σημείο εκκίνησης (-1,1)}
Για το σημείο (-1, 1) η τιμή της $f$ είναι: $f(-1, 1) = -0.135335$ και η τιμή της κλίσης: $\nabla f(0,0) = \begin{bmatrix} 0.4060 \\ 0.2707 \end{bmatrix}$.
Επιλέγοντας ακρίβεια $\epsilon = 0.0001$, εκτελούμε την μέθοδο method\_steepest\_descent() και υπολογίζουμε τον αριθμό επαναλήψεων για διαφορετικές τιμές $\gamma_k$.
\InsertFigure{H}{0.8}{fig:point2ItersOverGamma}{../scripts/figures/StDes_Iter_o_gamma_2.png}{Αριθμός επαναήψεων για διαφορετικές τιμές $\gamma_k [Μέγιστη Κάθοδος]$}.

Στο παραπάνω σχήμα \ref{fig:point2ItersOverGamma} παρατηρούμε ότι για τιμές του $\gamma_k > 0.61$ η μέθοδος αποκλίνει.
Από την παραπάνω διαδικασία επίσης υπολογίζουμε το $\gamma_k = 0,46768$ για το οποίο η μέθοδος συγκλίνει με τα λιγότερα βήματα.
Στο παρακάτω σχήμα \ref{ref:StDes_fixed_2}

\InsertFigure{H}{0.8}{StDes_fixed_2}{../scripts/figures/StDes_fixed_2.png}{Σύγκλιση της μεθόδου}.

\section{Μέθοδος Newton}

\section{Μέθοδος Levenberg-Marquardt}

\section{Σύγκριση των μεθόδων}
Εκτελώντας όλους του αλγόριθμους για τα ίδια δεδομένα, \textbf{για τον αριθμό επαναλήψεων} έχουμε: \\

\par
\underline{Παρατηρήσεις:}
\begin{itemize}
    \item ...
\end{itemize}


\section{Συμπεράσματα}
Οι μέθοδοι της παρούσας εργασίας αποτελούν βασικές τεχνικές για την εύρεση του τοπικού ελαχίστου ...

\end{document}
