Alle Aufgaben sowie die dazugehörigen Dateien können hier
heruntergeladen werden.
Installation
Setup
Für die Vorlesung benötigen wir die Python Bibliotheken
matplotlib numpy scipy PIL
Sie können diese entweder direkt mit pip
installieren,
oder eine Python Umgebung erstellen. Dafür haben Sie zwei Möglichkeiten
anaconda
und virtual-environment
. Diese sind
besonders sinnvoll wenn Sie Projekte haben, die unterschiedliche Python
Versionen benötigen.
Anaconda
Installieren Sie anaconda: https://docs.anaconda.com/anaconda/install/ auf
Linux:
Erzeugen Sie eine neue Umgebung
conda create -n dev python=3.6
conda activate dev
(evtl auch: source activate dev
)
Jetzt ist Ihre Umgebung aktiv. Alles was Sie jetzt mit conda oder pip
installieren landet in dieser Umgebung.
Installieren der benötigten Pakete:
conda install matplotlib numpy scipy pillow
Beachten Sie, dass die dev
Umgebung nach einem Neustart
wieder aktiviert werden muss. Wenn Sie einen Editor / eine IDE benutzen,
geben Sie die Conda Umgebung als build environment an, bzw den Pfad zur
Python Binary in der Conda Umgebung. Hier ist eine Übersicht für
Pycharm: https://www.jetbrains.com/help/pycharm/configuring-python-interpreter.html
Aufgabe 1 - Python Einführung
Arbeiten Sie die Datei PythonIntroduction durch.
- Machen Sie sich mit der Syntax von Python vertraut.
- Recherchieren Sie insbesondere wie Sie die üblichen Operationen der
linearen Algebra (z.B. Matrix-Vektor-Multiplikationen, inverse Matrizen,
Eigenwertzerlegung) mit Hilfe von Numpy umsetzen können.
- Finden Sie heraus wie Sie Daten in Python mit Matplotlib
visualisieren können (z.B. pyplot).
- Schauen Sie sich außerdem die Dokumentation von dem Scipy
Optimierungsmodul an (https://docs.scipy.org/doc/scipy/reference/optimize.html).
Auf die Funktionalität der Toolbox werden wir in späteren Übungen noch
zurückkommen.
Aufgabe 2
Minimieren Sie die Funktion:
\[f(x) = \frac{1}{4}x^4 + 2x^3 - 3x -
4\]
- Visualisieren Sie die Funktion. Ist sie konvex?
- Berechnen Sie den Gradienten.
- Optimieren Sie die Funktion mit Gradientenabstieg. Benutzen Sie den
zuvor analytisch berechneten Gradienten in der Implementierung.
Verwenden Sie bitte Ihre eigene Implementierung und keine Funktion aus
der Optimization Toolbox. Probieren Sie verschiedene Startpunkte aus.
Implementieren Sie Backtracking Line Search zur Bestimmung der
Schrittweite.
- Visualisieren Sie, was während der Optimierung geschieht. Für diese
1D-Funktion geht dies sehr schön, bei hochdimensionalen Problemen aus
der Praxis nicht mehr.
Nutzen sie hierzu die Stub-Methoden in der Datei
ex2.py
.
Aufgabe 3
Minimieren Sie die zweidimensionale Funktion:
\[f(x1, x2) = 2x^{2}_{1} + 2x^{2}_{2} +
3x_{1}x_2 - x_1 + x_2\]
- Visualisieren Sie die Isolinien der Funktion mithilfe von contour.
Ist die Funktion konvex?
- Berechnen Sie den Gradienten.
- Optimieren Sie die Funktion mit Gradientenabstieg. Verwenden Sie
bitte Ihre eigene Implementierung.
- Optimieren Sie die Funktion analytisch. Stimmt Ihre numerische
Lösung mit dem Minimum überein?
Nutzen sie hierzu die Stub-Methoden in der Datei
ex3.py
.