Minimieren Sie die Rastrigins-Funktion mit ga, problembasiert
Dieses Beispiel zeigt, wie eine Funktion mit mehreren Minima mithilfe des genetischen Algorithmus im problembasierten Ansatz minimiert wird. Für zwei Variablen x und y ist die Rastrigin-Funktion wie folgt definiert.
ras = @(x, y) 20 + x.^2 + y.^2 - 10*(cos(2*pi*x) + cos(2*pi*y));
Zeichnen Sie die Funktion in jeder Richtung mit dem Faktor 10 auf.
rf3 = @(x, y) ras(x/10, y/10); fsurf(rf3,[-30 30],"ShowContours","on") title("rastriginsfcn([x/10,y/10])") xlabel("x") ylabel("y")

Die Funktion hat viele lokale Minima und einen globalen Minimalwert von 0, der bei x = 0, y = 0 erreicht wird. Siehe What Is Global Optimization?
Erstellen Sie die Optimierungsvariablen x und y. Geben Sie an, dass die Variablen durch begrenzt sind.
x = optimvar("x","LowerBound",-100,"UpperBound",100); y = optimvar("y","LowerBound",-100,"UpperBound",100);
Erstellen Sie ein Optimierungsproblem mit der Zielfunktion rastriginsfcn(x).
prob = optimproblem("Objective",ras(x,y));Hinweis: Wenn Sie eine nichtlineare Funktion haben, die nicht aus Polynomen, rationalen Ausdrücken und elementaren Funktionen wie exp besteht, konvertieren Sie die Funktion mithilfe von fcn2optimexpr in einen Optimierungsausdruck. Siehe Convert Nonlinear Function to Optimization Expression und Supported Operations for Optimization Variables and Expressions.
Erstellen Sie ga-Optionen, um die gaplotbestf-Plotfunktion zu verwenden.
options = optimoptions("ga","PlotFcn","gaplotbestf");
Lösen Sie das Problem mit ga als Solver.
rng default % For reproducibility [sol,fval] = solve(prob,"Solver","ga","Options",options)
Solving problem using ga. ga stopped because the average change in the fitness value is less than options.FunctionTolerance.

sol = struct with fields:
x: 0.9950
y: 0.9950
fval = 1.9899
Ist der resultierende Funktionswert das niedrigste Minimum? Führen Sie die Suche erneut durch. Da es sich bei ga um einen stochastischen Algorithmus handelt, können die Ergebnisse unterschiedlich sein.
[sol2,fval2] = solve(prob,"Solver","ga","Options",options)
Solving problem using ga. ga stopped because the average change in the fitness value is less than options.FunctionTolerance.

sol2 = struct with fields:
x: 0.9950
y: -4.9289e-06
fval2 = 0.9950
Die zweite Lösung ist besser, da sie einen niedrigeren Funktionswert hat. Es kann nicht garantiert werden, dass eine von ga zurückgegebene Lösung eine globale Lösung ist.
Siehe auch
ga | fcn2optimexpr | solve