Ich habe heute mit der Schrittweite experimentiert und konnte erreichen das der Optimierer erfolgreich Konvergiert !
Danke Tobi !!!!!!!
Falls du den relevanten Code-Ausschnitt noch sehen willst:
Code: Alles auswählen
from scipy import optimize
def f(x):
output=Modell(x)
mse_error= Calc_Error(output)
return (mse_error)
#output enthält die Ergebnisse des Modelldurchlaufs in einem pandas Dataframe. Ein einzelner Modelldurchlauf ist relativ zeitintensiv mit 4-5 Sekunden
#der output wird zu einem einzelnen scalaren Fehlerwert verarbeitet. In diesem Fall dem Mean Square Error (MSE)
x0=[1,1]
bnds=((0.8,2),(0.8,2))
result = optimize.minimize(f,x0,method="L-BFGS-B",bounds=bnds,options={'maxiter':10,'eps':0.001})
result.success
print(result)
Der Wert des mse_error soll durch die Variation der Variablen in x (enthält. x[0],x[1],x[2],.....) minimiert werden.
Modell(x) ruft dein größeres Modell auf und übergibt die Werte in x die dann intern als Korrekturfaktoren für bestimmte Parameter verwendet werden.
Die Werte in x beeinflussen somit den auftretenden MSE maßgeblich.
Wenn an die Funktion f(x) Werte außerhalb der Bounds übergeben werden wirft das Modell einen Fehler.
Das Problem war bisher das die Optimierung nicht konvergiert oder zumindest nicht in einer annehmbaren Zeit.
Ich denke ich habe die benötigte Anzahl der Funktionsaufrufe einfach stark unterschätzt !