ich habe eine Frage zum implementieren eines Gradientenabstiegsverfahrens zu einer (exponential) Funktion in R.
Angenommen meine Funktion sei foo(x) und ich möchte dem Verfahren ebenfalls die Gradientenfunktion grad(x) mitgeben.
Die Aufgabe ist, eine numerische Minimierung (mit 1 Variable x) zu implementieren bzw. durchzuführen a.H.d folgenden R Funktion:
Code: Alles auswählen
abstiegsverfahren <- function(x0,fk, gr, abbruch, schrittweite){
}
"fk" soll die zu minimierende Funktion sein
"gr" soll die Gradientenfkt sprich die Ableitung von fk sein.
"abbruch" soll der Differenz zwischen xi+1 - xi sein, bei der das Verfahren terminiert.
"schrittweite" soll die Schrittweite des Verfahrens sein (hinreichend klein)
Am Ende soll eine liste mit par (x-Wert an der stelle des minimums zugriff mit result$par) und value (Funktionswert im minimum mit result$value) sowie iter als Anzahl der benötigten iterationen angegeben werden.
Mein bisheriges Verständnis des Gradientenverfahrens ist wie folgt:
1) initialisiere zufälligen Startwert x0
2) setze x0 in die Gradientenfunktion ein
3) falls der daraus resultierende Wert > 0 ist, so muss xi+1 um schrittweite verringert werden, falls er < 0 ist gilt xi+1 = xi + schrittweite
3.1) (in der Aufgabe soll pro iteration ein update xi+1 = xi- schrittweite* grad(xi) erfolgen; den Grund dafür habe ich nicht verstanden.. sollte nicht einfach das xi+1 um alpha vergrößert bzw. verkleinert werden?
4) Abbruchkriterium des Verfahrens nicht verstanden. Abbruch wenn Minimum erreicht wird, aber wie erkenne ich das bzw. teile das R mit?
mein bisheriges Vorgehen in R:
Code: Alles auswählen
#fk und gr seien bereits implementiert, sprich ich habe die funktion eingegeben und deren Ableitung gebildet
abstiegsverfahren <- function(x0,fk, gr, abbruch, schrittweite) {
x0 <- runif(1,-100,100) #zufälligen Startwert initialisieren
# ab hier weiß ich nichtmehr weiter. ist hier nun eine optim() Funktion anzusetzen?
# welche Kontrollstruktur macht hier Sinn, um die Schleife aufzubauen bzw sie wieder zu verlassen.?
}
ein Anfänger