Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

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 ±100 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

| |

Themen