Man stelle sich vor, es gilt einen Parameterraum (X und Y) abzusuchen, in welchem irgendwo optimale Parametervariationen versteckt sind, welche ein System (Z) maximieren oder minimieren. Ist das System nicht mehr analytisch (also mit Gleichungen) zu beschreiben, wird die in der Schule erlernte Variante, einfach die 1. und 2. Ableitung zu bilden und durch Nullstellensuche die Maxima und Minima zu finden, unmöglich. Es hilft nur noch die numerische Optimierung, auch simulationsbasierte Optimierung genannt.
Eine relativ einfach zu implementierende Suche ist der so genannte Twiddle-Algorithmus, welchen Prof. Sebastian Thrun am besten persönlich erklärt:
Dieser Algorithmus sucht nun den Parameterraum intelligent ab und variiert die Schrittweite der Suche, je nachdem ob man in der Nähe eines Maxima bzw. Minima ist.
if cfzz(it) > bestcost
bestcost = cfzz(it);
dparams(i)= dparams(i)*1.05;
else % in andere Richtung suchen
params(i)=params(i)- 2*dparams(i);
cfzz(it) = calcCost(params(1),params(2));
if cfzz(it) > bestcost %wenn aktuelle Kosten höher (=gut)
bestcost = cfzz(it);
dparams(i) = dparams(i)*1.05; %mit größerem Schritt probieren
else
params(i)=params(i)+dparams(i);
dparams(i)=dparams(i)*0.95; % an sonsten kleineren Schritt end end
it = it+1;
disp(['Twiddle #' num2str(it-1) ' mit Parametern ' num2str(params,'%2.5f \t') ', Funktionswert: ' num2str(cfzz(it-1),'%2.5f \t')])
paramsstore(it,:) = params; % für späteres Plotten in Variable ablegen
Die Funktion calcCost, welche den Funktionswert Z zurück gibt, ist die in Matlab enthaltene Standardfunktion peaks, welche in diesem Beispiel gewählt wurde:
Code:
function[out] = calcCost(X,Y) % Kostenfunktion, welche von Eingangsparametern % abhängt
out = peaks(X,Y);
Natürlich ist das Ergebnis Abhängig von den gewählten Eingangsparametern. Der Algorithmus kann auch in lokalen Maxima/Minima hängen bleiben und kein globales (absolut bestes) Ergebnis bringen. Dies kann man zum Beispiel schon erreichen, wenn man den oben genannten Twiddle-Algorithmus mit dparams=[1 1] los laufen lässt. Er schafft es dann nicht mehr, vom ersten lokalen Maximum weg zu kommen. Es ist also immer Vorsicht geboten mit den Ergebnissen!
_________________
"Bremsen ist die sinnlose Umwandlung von Exergie in Anergie - daran kann man sich höchstens noch die Finger verbrennen" - Prof. J. Morgenstern
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.