%
% Optimization Techniques Work 1 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}


\begin{document}

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

\InsertTitle

\sloppy

\section{Εισαγωγή}
Η παρούσα εργασία αφορά στις αριθμητικές μεθόδους ευρέσεως ελαχίστων σε πεπερασμένα διαστήματα, που χρησιμοποιούνται σε προβλήματα βελτιστοποίησης.
Οι αριθμητικές μέθοδοι βελτιστοποίησης συναρτήσεων αναπτύχθηκαν ιδιαίτερα στα μέσα του 20ού αιώνα, καθώς η εύρεση ελαχίστων (ή και μεγίστων) άρχισε να έχει μεγάλη πρακτική σημασία, ειδικά σε τομείς όπως η οικονομία, η φυσική, ή η ανάλυση συστημάτων.
Η μέθοδος της \textbf{διχοτόμου} έχει ρίζες στον Νεύτωνα και τον Ντεκάρτ, με τη διχοτόμηση να χρησιμοποιείται αρχικά για τον υπολογισμό της ρίζας μιας συνάρτησης και αργότερα να εξελίσσεται σε τεχνική για βελτιστοποίηση σε κυρτές συναρτήσεις.
Η μέθοδος του \textbf{χρυσού τομέα} προτάθηκε στις αρχές του 20ού αιώνα και εφαρμόστηκε στην βελτιστοποίηση τη δεκαετία του 1950.
Στη μέθοδό αυτή γίνεται χρήση της αναλογίας της "χρυσής τομής," η οποία προέρχεται από την αρχαία ελληνική γεωμετρία και χρησιμοποιούνταν για την κατασκευή αρμονικών διαστάσεων.
Η μέθοδος \textbf{Fibonacci} εισήχθηκε τη δεκαετία του 1960 και χρησιμοποιεί την ακολουθία Fibonacci, γνωστή ήδη από το 1202 από τον Ιταλό μαθηματικό Λεονάρντο της Πίζας (Fibonacci).
Η μέθοδος εκμεταλλεύεται τις ιδιότητες της ακολουθίας για να περιορίσει το διάστημα αναζήτησης πιο αποδοτικά σε σύγκριση με τον χρυσό τομέα.
Τέλος, η μέθοδος \textbf{διχοτόμου με χρήση παραγώγου}, αξιοποιεί τη χρήση των παραγώγων που εισήγαγε ο Νεύτων, για να υπολογίσει την κατεύθυνση προς το ελάχιστο.
Αυτές οι μέθοδοι αποτέλεσαν το θεμέλιο για την ανάπτυξη πιο σύγχρονων τεχνικών βελτιστοποίησης, οι οποίες συνεχίζουν να εξελίσσονται στον χώρο της μηχανικής μάθησης και των μαθηματικών.

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


\section{Προγραμματιστική προσέγγιση}
Για τον προγραμματισμό και εκτέλεση των μεθόδων της παρούσας εργασίας έγινε χρήση της MATLAB.
Στον κατάλογο \textbf{scripts}, περιέχονται όλες οι μέθοδοι με τη μορφή συναρτήσεων καθώς και scripts που τις καλούν.
Το κεντρικό script που εκτελεί τον κώδικα όλης της εργασίας είναι το \textbf{Work1.m}.
Στην παρούσα εργασία η υλοποίηση του κώδικα δεν ακολουθεί επακριβώς τη ροή των θεμάτων της εκφώνησης.
Αντίθετα επιλέχθηκε μια διαφορετική προγραμματιστική προσέγγιση που ενοποιεί τα κοινά ζητούμενα από όλα τα θέματα.
Πιο συγκεκριμένα.

\subsection{Πολυμορφική κλήση μεθόδων}
Εφόσον για κάθε θέμα ένα από τα ζητούμενα ήταν ο υπολογισμός και η απεικόνιση του αριθμού των κλήσεων των μεθόδων για διαφορετικές τιμές της παραμέτρου lambda, δημιουργήσαμε μία συνάρτηση (iterations\_over\_lambda()) η οποία καλεί μια \textit{δοθείσα} μέθοδο για κάθε μία από τις αντικειμενικές συναρτήσεις και απεικονίζει τα αποτελέσματα.
Ομοίως, για κάθε θέμα, ζητούμενο ήταν η απεικόνιση της σύγκλισης των διαστημάτων σε κάθε επανάληψη.
Αντίστοιχα λοιπόν δημιουργήσαμε μια συνάρτηση (interval\_over\_iterations()) η οποία ομοίως καλεί μια \textit{δοθείσα} μέθοδο για κάθε μία από τις αντικειμενικές συναρτήσεις.
Τέλος το κεντρικό script της εργασίας (Work1.m) καλεί σε βρόχο την κάθε μία από τις παραπάνω συναρτήσεις, για κάθε μία από τις μεθόδους, την οποία και περνάει ως όρισμα στη συνάρτηση.
\par
Οι παραπάνω συναρτήσεις λοιπόν, δέχονται τις μεθόδους ως ορίσματα και τις καλούν με αγνωστικιστικό τρόπο εσωτερικά.
Για το λόγο αυτό υλοποιήσαμε τις μεθόδους ώστε να έχουν \textbf{κοινό interface} ορισμάτων και επιστροφών, με αποτέλεσμα κάποιες μέθοδοι να έχουν ορίσματα που δεν χρησιμοποιούνται.
Το κέρδος όμως είναι ο πολυμορφικός τρόπος κλήσης των διαφορετικών μεθόδων, που απλοποιεί και μικραίνει τον κώδικα. \\
Έτσι όλες οι συναρτήσεις που υλοποιούν κάποια μέθοδο υπολογισμού ελαχίστου έχουν ως ορίσματα:
\begin{itemize}
    \item \textbf{fun\_expr}: Η αναπαράστηαση της αντικειμενικής συνάρτησης ως symbolic expression.
    \item \textbf{alpha}: Η αρχή του διαστήματος αναζήτησης.
    \item \textbf{beta}: Το τέλος του διαστήματος αναζήτησης.
    \item \textbf{epsilon}: Η απόσταση από το μέσω του διαστήματος για τη μέθοδο της διχοτόμου και το μήκος του διαστήματος του τελικού βήματος για τη μέθοδο fibonacci. \\
            \textit{\underline{Σημείωση}}: Στις υπόλοιπες μεθόδους το όρισμα δεν χρησιμοποιείται.
    \item \textbf{lambda}: Η ζητούμενη ακρίβεια.
\end{itemize}
Επίσεις όλες οι συναρτήσεις επιστρέφουν \textbf{[a, b, k, n]}:
\begin{itemize}
    \item \textbf{a}: Το διάνυσμα με όλες τις τιμές που παίρνει η αρχή του διαστήματος αναζήτησης σε κάθε επανάληψη.
    \item \textbf{b}: Το διάνυσμα με όλες τις τιμές που παίρνει το τέλος του διαστήματος αναζήτησης σε κάθε επανάληψη.
    \item \textbf{k}: Ο αριθμός των επαναλήψεων μέχρι να τερματιστεί ο αλγόριθμος.
    \item \textbf{n}: Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης.
\end{itemize}

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

\section{Μέθοδος της διχοτόμου}
Η μέθοδος της διχοτόμου βρίσκει το τοπικό ελάχιστο μιας κυρτής συνάρτησης στο διάστημα $[a,b]$ \textbf{μειώνοντας διαδοχικά το εύρος του διαστήματος αναζήτησης}.
Αντί να διχοτομεί το διάστημα αυστηρά στο μέσο του, η μέθοδος αξιολογεί τη συνάρτηση σε δύο σημεία συμμετρικά γύρω από το μέσο και πολύ κοντά σε αυτό.
Με τον τρόπο αυτό \textbf{υπολογίζει έμμεσα την κλίση της συνάρτησης} κοντά στο μέσο.
Αν η κλίση είναι θετική, τότε το διάστημα αναζήτησης περιορίζεται στο αριστερό μισό.
Διαφορετικά περιορίζεται στο δεξί.
Αυτή η διαδικασία επαναλαμβάνεται μέχρι το μήκος του διαστήματος να γίνει μικρότερο από μια προκαθορισμένη ακρίβεια $\lambda$.
\par
Η μέθοδος στηρίζεται στην κυρτότητα της συνάρτησης, η οποία διασφαλίζει ότι το ελάχιστο βρίσκεται πάντα σε ένα από τη δύο μισά διαστήματα, καθώς οι κυρτές συναρτήσεις έχουν \textbf{μοναδικό τοπικό και ολικό ελάχιστο σε ένα κλειστό διάστημα}.
\par\textbf{\underline{Κριτήρια Σύγκλισης}}
\par
Η σύγκλιση της μεθόδου καθορίζεται από δύο βασικά κριτήρια:
\boldmath
\begin{enumerate}
    \item \textbf{Απαιτούμενη ακρίβεια ($\lambda$)}: Η διαδικασία σταματά όταν το μήκος του διαστήματος γίνει μικρότερο από $\lambda$.
    \item \textbf{Αριθμός επαναλήψεων/κλήσεων της αντικειμενικής συνάρτησης:} Ο μέγιστος αριθμός επαναλήψεων $k$ εξαρτάται από το αρχικό μήκος του διαστήματος $[a,b]$, την ακρίβεια $\lambda$ και την απόσταση των συμμετρικών σημείων από το μέσο $\epsilon$.
    Ο αριθμός των κλήσεων της αντικειμενικής συνάρτησης είναι πάντα $n = 2k$.
    Ο αριθμός ικανοποιεί την σχέση:
    \begin{equation} \label{eq:1}
        n \geq 2 \cdot log_2{\frac{b-a}{\lambda - 2\epsilon}}
    \end{equation} \\[1ex]
    Από την παραπάνω σχέση επίσης μπορούμε να παρατηρήσουμε ότι για τιμές \textbf{$\epsilon \geq \frac{\lambda}{2}$} η μέθοδος \textbf{αποκλίνει} και κοντά στο $\frac{\lambda}{2}$ οι κλήσεις αυξάνονται σημαντικά.
\end{enumerate}
\unboldmath

\subsection{Υλοποίηση}
Για τη μέθοδο της διχοτόμου υλοποιήσαμε την συνάρτηση min\_bisection().
Η συνάρτηση αυτή δέχεται τα ορίσματα που περιγράφονται παραπάνω: \textbf{fun\_expr, alpha, beta, epsilon και lambda} και επιστρέφει τα διαστήματα αναζήτησης \textbf{a} και \textbf{b}, τον αριθμό των επαναλήψεων \textbf{k} καθώς και τον αριθμό των κλήσεων της αντικειμενικής συνάρτησης \textbf{n}.
Η συνάρτηση καλείται από τις:
\begin{itemize}
    \item \textbf{bisection\_over\_epsilon()}: \\
    Εδώ κρατάμε σταθερό το $\lambda = 0.01$ και καλούμε τη μέθοδο για διαφορετικές τιμές του $\epsilon \in [0.0001, \frac{\lambda}{2}-0.0001]$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τον αριθμό των κλήσεων.
    Παρατηρούμε πως κοντά στο $\frac{\lambda}{2}$ οι κλήσεις αυξάνονται κάτι που επιβεβαιώνει και τη σχέση \ref{eq:1}. \\
    \includegraphics[width=\textwidth]{../scripts/figures/iter_over_epsilon_min_bisection.png}
    \captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\epsilon$.}
    \label{fig:iter_over_epsilon_bisection}

    \item \textbf{iterations\_over\_lambda()}: \\
    Εδώ κρατάμε σταθερό το $\epsilon = 0.001$ και καλούμε τη μέθοδο για διαφορετικές τιμές του $\lambda \in [2\epsilon+0.0001, 0.1]$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τον αριθμό των κλήσεων.
    Ομοίως οι κλήσεις αυξάνονται καθώς το $\lambda$ γίνεται μικρότερο επιβεβαιώνοντας τη σχέση \ref{eq:1}. \\
    Η αρχή του διαστήματος επιλέχθηκε ώστε να ικανοποιούνται τα κριτήρια σύγκλισης. \\
    \includegraphics[width=\textwidth]{../scripts/figures/iter_over_lambda_min_bisection.png}
    \captionof{figure}{Κλήσεις της αντικειμενικής συνάρτησης για διάφορα $\lambda$.}
    \label{fig:iter_over_lambda_bisection}

    \item \textbf{interval\_over\_iterations()}: \\
    Εδώ κρατάμε σταθερό το $\epsilon = 0.001$ και καλούμε τη μέθοδο για τρεις διαφορετικές τιμές του $\lambda \in \{2\epsilon+0.0001, \frac{2\epsilon+0.0001}{2}, 0.1\}$, για κάθε μία από τις συναρτήσεις $f_1, f_2, f_3$ μελετώντας τη σύγκλιση του διαστήματος αναζήτησης σε σχέση με τον αριθμό των επαναλήψεων. \\
    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_fun1.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_1$ για 3 τιμές του $\lambda$.}
    \label{fig:interval_over_iter_bisection_fun1}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_fun2.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_2$ για 3 τιμές του $\lambda$.}
    \label{fig:interval_over_iter_bisection_fun2}

    \includegraphics[width=\textwidth]{../scripts/figures/interval_over_iterations_min_bisection_fun3.png}
    \captionof{figure}{Σύγκλιση του $[a_k, b_k]$ για την $f_3$ για 3 τιμές του $\lambda$.}
    \label{fig:interval_over_iter_bisection_fun3}
\end{itemize}

\subsection{Παρατηρήσεις}
Η μέθοδος της διχοτόμου έχει χαρακτηριστικά που την καθιστούν απλή και σταθερή για εύρεση του ελαχίστου.
Μερικές παρατηρήσεις που σχετίζονται με την μέθοδο:
\begin{itemize}
    \item \textbf{Ταχύτητα σύγκλησης}:
    Η μέθοδος της διχοτόμου έχει λογαριθμική ταχύτητα σύγκλισης.
    Σε κάθε βήμα μειώνουμε το μήκος του διαστήματος κατά το μισό.
    Ειδικότερα, η χρονική πολυπλοκότητα της είναι $O(log_2(\frac{b-a}{\lambda}))$, κάτι που επιβεβαιώνεται από τα διαγράμματα και από την έξοδο του MATLAB script.

    \item \textbf{Σχέση αριθμού κλήσεων - ακρίβειας}:
    Ο αριθμός των κλήσεων της συνάρτησης σχετίζεται με την απαιτούμενη ακρίβεια, καθώς η κάθε επανάληψη απαιτεί δύο αξιολογήσεις της συνάρτησης.
    Συνεπώς, ο συνολικός αριθμός των κλήσεων είναι \textbf{διπλάσιος} του αριθμού των επαναλήψεων.

    \item \textbf{Σταθερότητα}:
    Η μέθοδος της διχοτόμου είναι εξαιρετικά σταθερή για κυρτές συναρτήσεις.
    Εφόσον η συνάρτηση είναι συνεχής και κυρτή στο διάστημα $[a, b]$ η μέθοδος θα συγκλίνει πάντα προς ένα σημείο στο διάστημα αυτό, ανεξαρτήτως της μορφής της συνάρτησης.
    Αυτό φαίνεται τόσο από την εξίσωση \ref{eq:1} η οποία δείχνει εξάρτηση του αριθμού των κλήσεων μόνο από το διάστημα, αναζήτησης, το $\lambda$ και το $\epsilon$.
    Όσο και από τις μετρήσεις και τα διαγράμματα, όπου ο αριθμός κλήσεων για δεδομένα $\epsilon$ και $\lambda$ παραμένει αμετάβλητος για οποιαδήποτε συνάρτηση.
\end{itemize}

\section{Μέθοδος του χρυσού τομέα}
\section{Μέθοδος Fibonacci}
\section{Μέθοδος της διχοτόμου με χρήση παραγώγου}

% Μετρικές: Αρ. κλήσεων, code complexity, arythetic stability, ...
% Πίνακας σύγκρισης
% trade-off επιλογή με βάση κριτηρίων
\section{Σύγκριση των μεθόδων}

%
\section{Συμπεράσματα}


\end{document}
