10.07.2015 Aufrufe

Rechnerpraktikum zu Grundlagen der Nichtlinearen Optimierung - M1

Rechnerpraktikum zu Grundlagen der Nichtlinearen Optimierung - M1

Rechnerpraktikum zu Grundlagen der Nichtlinearen Optimierung - M1

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

TU MünchenLehrstuhl Mathematische <strong>Optimierung</strong>Prof. Dr. Michael UlbrichDipl.-Math. Florian LindemannWintersemester 2008/09Blatt 1<strong>Rechnerpraktikum</strong> <strong>zu</strong><strong>Grundlagen</strong> <strong>der</strong> <strong>Nichtlinearen</strong> <strong>Optimierung</strong>Für die Bearbeitung des Aufgabenzettels benötigen wir MATLAB. Dieses könnenSie im Terminal durch den Aufrufstarten./usr/local/applic/bin/matlab &P1. Berechnung eines 60-eckigen Polye<strong>der</strong>s (C 60 -Molekül)Die 60 Ecken v i = (v 1 i ,v2 i ,v3 i ) ∈ R3 eines Polye<strong>der</strong>s sollen so bestimmt werden,dass seine Oberfläche aus 12 regelmäßigen Fünf- und 20 regelmäßigen Sechsecken<strong>der</strong> Seitenlänge 1 besteht (C 60 -Molekül). Für je zwei benachbarte Eckenv i ,v j muss daher gelten‖v i − v j ‖ 2 2 − 1 = 0.Weiter gelten in jedem Fünfeck (v i1 ,v i2 ,v i3 ,v i4 ,v i5 ,v i1 ) die Gleichungen‖v ij − v ij+2 ‖ 2 2 − 4sin 2 (3π/10) = 0, j = 1,... ,5,wobei i 6 = i 1 , i 7 = i 2 . Ebenso gilt für jedes Sechseck (v i1 ,v i2 ,v i3 ,v i4 ,v i5 ,v i6 ,v i1 )‖v ij − v ij+2 ‖ 2 2 − 4sin2 (π/3) = 0, j = 1,... ,6,wobei i 7 = i 1 , i 8 = i 2 . Schließlich for<strong>der</strong>n wir noch, um das Polye<strong>der</strong> <strong>zu</strong> fixieren,v 1 = 0, v 1 2 = v 2 2 = 0, v 1 3 = 0.All diese 90 + 60 + 120 + 6 = 276 Gleichungen schreiben wir in <strong>der</strong> FormF(x) = 0mit F : R 180 → R 276 und x = (v 1 ,...,v 60 ) T . Zur numerischen Behandlungüberführen wir das obige Gleichungssystem in ein nichtlineares <strong>Optimierung</strong>sproblem:min f(x), f(x) = 1x∈R 180 2 ‖F(x)‖2 2 . (1)Anhand dieses hochdimensionalen Problems lassen sich die Eigenschaften von<strong>Optimierung</strong>sverfahren sehr gut visualisieren.1


Mit Hilfe von MATLAB wurden ein Gradienten- und ein Gauß-Newton-Verfahren<strong>zu</strong>r Lösung dieses Problems implementiert. Die entsprechenden Prozeduren heißengradverf und GaussNewton. Außerdem stehen unter den Namen xinit1,xinit2, usw., mehrere Startpolye<strong>der</strong> <strong>zu</strong>r Verfügung.Gradientenverfahren mit Armijo-Schrittweitenwahl:x k+1 = x k + σ k s k , s k = −∇f(x k ) = −F ′ (x k ) T F(x k ),σ k ∈ {2 −k |k = 0,1...} maximal mit f(x k +σ k s k ) −f(x k ) ≤ −σ k γ∇f(x k ) T s k .Gauß-Newton-Verfahren mit Armijo-Schrittweitenwahl:x k+1 = x k + σ k s k , F ′ (x k ) T F ′ (x k )s k = −F ′ (x k ) T F(x k ) (= −∇f(x k )),σ k wie oben.a) Laden Sie sich über die Website des <strong>Rechnerpraktikum</strong>s die Datei P1.tarherunter und entpacken Sie diese in Ihrem Arbeitsverzeichnis mit demBefehl tar -xf P1.tar. Starten Sie MATLAB und wechseln Sie in diesesArbeitsverzeichnis.b) Durch die Eingabex1 = load(’xinit1’);gradverf(x1,’ffct’);wird das Gradientenverfahren auf das Problem (1) angewendet, wobei imPunkt xinit1 gestartet wird. Nach je<strong>der</strong> Iteration wird das <strong>zu</strong>r aktuellenIterierten gehörende Polye<strong>der</strong> graphisch dargestellt. Außerdem werden k,f(x k ), ‖∇f(x k )‖ 2 und σ k ausgegeben. Durch Drücken <strong>der</strong> Entertaste kanndie nächste Iteration gestartet werden.Ebenso wird durchx2 = load(’xinit2’);GaussNewton(x2, ’Ffct’, ’ffct’);das Gauß-Newton-Verfahren gestartet, wobei xinit2 <strong>der</strong> Startpunkt ist.Führen Sie für mehrere Startpolye<strong>der</strong>xinit1, xinit2,... das Gradientenunddas Gauß-Newton-Verfahren durch und bewerten Sie die Leistungsfähigkeit<strong>der</strong> beiden Algorithmen.c) Wir wollen nochmal den Startpunktxinit6 mit dem Gauß-Newton-Verfahrenbetrachten und mehr Iterationen <strong>zu</strong>lassen. Öffnen Sie dafür die DateiGaussNewton.m und setzen Sie die maximale Iterationszahl itmax aufden Wert 100. Starten Sie das Verfahren erneut und beurteilen Sie dasErgebnis. Wie ist die Lösung <strong>zu</strong> interpretieren und warum?d) Beim letzten Startpunkt konvergiert das Verfahren lokal deutlich langsamerals bei den an<strong>der</strong>en Startpunkten. Haben Sie dafür eine theoretischbasierte Vermutung? Vergleichen Sie da<strong>zu</strong> die Iterationsvorschriftdes Newtonverfahrens mit dem des Gauß-Newton-Verfahrens.2


P2. Gradienten-, Newton-, inverses BFGS-Verfahrena) Laden Sie sich über die Website des <strong>Rechnerpraktikum</strong>s die Datei P2.tarherunter und entpacken Sie diese in Ihrem Arbeitsverzeichnis.b) Untersuchen Sie mit MATLAB das Konvergenzverhalten des Gradienten-,Newton- und des inversen BFGS-Verfahrens für folgende Funktionen undStartpunkte:Dateiname Zielfunktion f Startpunkte1) ExA.m (x 1 − 2x 2 ) 2 + (x 1 − 4) 2 (0,0), (10,10)2) ExBk.m x 2 1 + kx2 2 , (10,1), (1,100)k = 1,10,1003) Rosenbrock.m 100(x 2 − x 2 1 )2 + (1 − x 1 ) 2 (0,0), (-1.2,1)4) Brown.m (Browns (x 1 − 10 6 ) 2 − (x 2 − 2 · 10 −6 ) 2 (1,1), (10,10)schlecht skalierte Fkt.) +(x 1 x 2 − 2) 2Orientieren Sie sich dabei an folgen<strong>der</strong> Syntax:Gradientenverfahren:Newtonverfahren:inverses BFGS-Verfahren:gradverf([0;0],’ExA’);newton([0;0],’ExA’);bfgs([0;0],’ExA’,’gExA’);In allen Fällen wird das jeweilige <strong>Optimierung</strong>sverfahren mit dem Startpunkt(0,0) auf die Funktion ExA angewendet. Beim BFGS-Verfahren isteine geson<strong>der</strong>te Eingabe <strong>der</strong> Funktion <strong>zu</strong>r Auswertung des Gradienten (indiesem Fall gExA) vorgesehen. Entsprechende Funktionen gExB1, gBrown,usw. sind ebenfalls vorhanden.Um mehr Iterationen beim Gradientenverfahren <strong>zu</strong><strong>zu</strong>lassen, öffnen Sie dieDatei gradverf.m und setzen Sie die maximale Iterationszahl itmax aufden Wert 1000.c) Schreiben Sie eine eigene Testfunktion mit entsprechenden Dateien Test.mund gTest.m, von dem Sie das Minimum kennen. Testen Sie die Verfahrenan Ihrem Beispiel.P3. Alternative SchrittweitenberechnungBei <strong>der</strong> Armijo-Regel wird die Schrittweite <strong>zu</strong> einem Punkt x und einer Abstiegsrichtungs durch folgenden Algorithmus bestimmt:Bestimme die größte Zahl σ ∈ {1,β,β 2 ,...}, für die gilt:f(x + σs) − f(x) ≤ σγ∇f(x) T s3


wobei β,γ ∈ (0,1). Dabei wird σ so lange mit dem Faktor β verkleinert, bis dieArmijo-Bedingung erfüllt ist. Anstelle dieses Backtracking-Ansatzes kann mandie Funktionφ(σ) = f(x + σs)interpolieren, um eine geeignete Schrittweite <strong>zu</strong> finden.Die Armijo-Bedingung kann mit φ auf folgende Form gebracht werden:φ(σ) − φ(0) ≤ σγφ ′ (0) (2)Gesucht ist ein σ welches (2) erfüllt.Sei eine Startschät<strong>zu</strong>ng σ 0 (z.B. σ 0 = 1) gegeben. Falls σ 0 (2) nicht erfüllt, soapproximieren wir φ(σ) mit Hilfe eines quadratischen Modells φ Q (σ):( φ(σ0 ) − φ(0) − σ 0 φ ′ )(0)φ Q (σ) =σ 2 + φ ′ (0)σ + φ(0)σ 2 0welches die Interpolationsbedingungen φ Q (0) = φ(0),φ Q (σ 0 ) = φ(σ 0 ) und φ ′ Q (0) =φ ′ (0) erfüllt.Die neue Schrittweite ist das Minimum von φ Q , alsoφ ′ (0)σ02 σ 1 = −2(φ(σ 0 ) − φ(0) − φ ′ (0)σ 0 )Falls σ 1 die Armijo-Bedingung (2) erfüllt, so ist die Suche beendet. An<strong>der</strong>nfallskann man ein kubisches Modell φ K (σ) erstellen, welches den Interpolationsbedingungenan φ(0),φ ′ (0),φ(σ 0 ) und φ(σ 1 ) genügt:wobei( ab)=φ K (σ) = aσ 3 + bσ 2 + σφ ′ (0) + φ(0)1( σ20 −σ12σ0 2σ2 1 (σ 1 − σ 0 ) −σ0 3 σ13)( φ(σ1 ) − φ(0) − φ ′ )(0)σ 1φ(σ 0 ) − φ(0) − φ ′ (0)σ 0Über die erste Ableitung von φ K kann man erkennen, dass das Minimum σ 2von φ K im Intervall [0,σ 1 ] liegt und gegeben ist durchσ 2 = −b + √ b 2 − 3aφ ′ (0)3aFalls σ 2 die Armijo-Bedingung (2) erfüllt, so ist eine passende Schrittweite gefunden.Falls nicht, kann <strong>der</strong> Prozess <strong>der</strong> kubischen Interpolation fortgesetztwerden, bis eine Lösung gefunden wird, wobei die Werte φ(0),φ ′ (0) und dieletzten beiden Werte von φ benutzt werden.Um <strong>zu</strong> vermeiden, dass ein σ k entwe<strong>der</strong> <strong>zu</strong> nahe an σ k−1 o<strong>der</strong> <strong>zu</strong> viel kleinerals σ k−1 ist, wird <strong>zu</strong>dem folgende Regel eingeführt:Falls σ k /∈ [β min σ k−1 ,β max σ k−1 ] setzen wir: σ k = σ k−124


Dabei sind β min ,β max ∈ (0,1) mit β min < β max zwei von k und auch von eineräußeren Iteration unabhängige Konstanten. Dies garantiert, dass in endlich vielenSchritten eine Schrittweite gefunden wird und das Gradientenverfahren mitdieser Schrittweitenregel global konvergiert.a) Laden Sie sich über die Website des <strong>Rechnerpraktikum</strong>s die Datei P3.tarherunter und entpacken Sie diese in Ihrem Arbeitsverzeichnis. Starten SieMATLAB und wechseln Sie in dieses Arbeitsverzeichnis.b) Die Armijo-Regel mit Interpolation ist in <strong>der</strong> Datei InterpArmijo.mimplementiert. Vergleichen Sie den Quelltext mit <strong>der</strong> Beschreibung <strong>der</strong>Schrittweitenregel.c) Ein Gradientenverfahren, welches mit <strong>der</strong> interpolierten Armijo-Regel arbeitetistIPAgradverf. Testen Sie die neue Schrittweitenregel anhand desProblems ExB100 aus <strong>der</strong> Aufgabe P2 mit dem Startpunkt (1,10):IPAgradverf([1;10],’ExB100’);und vergleichen Sie das Ergebnis und die Iterationszahlen mit dem Gradientenverfahrenmit normaler Armijo-Regel. Testen Sie auch an<strong>der</strong>e Startpunkte.d) Vergleichen Sie die beiden Verfahren anhand einiger Probleme aus <strong>der</strong>Aufgabe P2. Testen Sie auch Ihr eigenes Beispiel.P4.* Zusatzaufgabe: Programmieren und Makea) Laden Sie sich von <strong>der</strong> Website die Datei P4.tar herunter und entpackenSie diese. Schauen Sie sich die Dateien plot.cpp, figuren.cppund figuren.hpp an. Kompilieren Sie die Datei figuren.cpp mit demg++ Kompiler und <strong>der</strong> Option -c, also g++ -c figuren.cpp (nutzenSie nicht das Makefile!). Entstehen neue Dateien? Kompilieren Sie dannebenso plot.cpp. Erstellen Sie schließlich ein Programm prog indemSie die beiden erzeugten Objektdateien linken: g++ -o prog figuren.oplot.o.b) Starten Sie das Programm und testen Sie, was es leistet.c) Schauen Sie sich dann das Makefile genauer an. Geben Sie im Terminalmake clean ein, um die kompilierten Dateien <strong>zu</strong> löschen und danachmake.Welche Dateien werden kompiliert?d) Verän<strong>der</strong>n Sie die Datei figuren.cpp so, dass statt Sternen ein beliebigesan<strong>der</strong>es Zeichen ausgegeben wird. Geben Sie danach make ein. WelcheDateien werden neu kompiliert und warum?5


e) Fügen Sie eine weitere Zeichenmethode infiguren.cpp undfiguren.hppein, die Sie beliebig gestalten können. Fügen Sie in plot.cpp eine weitereZeichenoption da<strong>zu</strong> und kompilieren Sie alles mit make. Testen Sie IhrProgramm.6

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!