Minimiser la fonction de Rastrigins à l'aide de ga
, basé sur un problème
Cet exemple montre comment minimiser une fonction avec plusieurs minima en utilisant l'algorithme génétique dans l'approche basée sur les problèmes. Pour deux variables x
et y
, la fonction de Rastrigin est définie comme suit.
ras = @(x, y) 20 + x.^2 + y.^2 - 10*(cos(2*pi*x) + cos(2*pi*y));
Tracez la fonction mise à l’échelle par 10 dans chaque direction.
rf3 = @(x, y) ras(x/10, y/10); fsurf(rf3,[-30 30],"ShowContours","on") title("rastriginsfcn([x/10,y/10])") xlabel("x") ylabel("y")
La fonction a de nombreux minima locaux et une valeur minimale globale de 0 qui est atteinte à x
= 0, y
= 0. Voir What Is Global Optimization?
Créez les variables d'optimisation x
et y
. Spécifiez que les variables sont délimitées par .
x = optimvar("x","LowerBound",-100,"UpperBound",100); y = optimvar("y","LowerBound",-100,"UpperBound",100);
Créez un problème d’optimisation avec la fonction objectif rastriginsfcn(x)
.
prob = optimproblem("Objective",ras(x,y));
Remarque: Si vous avez une fonction non linéaire qui n'est pas composée de polynômes, d'expressions rationnelles et de fonctions élémentaires telles que exp
, convertissez la fonction en expression d'optimisation en utilisant fcn2optimexpr
. Voir Convert Nonlinear Function to Optimization Expression et Supported Operations for Optimization Variables and Expressions.
Créez des options ga
pour utiliser la fonction de tracé gaplotbestf
.
options = optimoptions("ga","PlotFcn","gaplotbestf");
Résolvez le problème en utilisant ga
comme solveur.
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
La valeur de la fonction résultante est-elle le minimum le plus bas ? Effectuez à nouveau la recherche. Étant donné que ga
est un algorithme stochastique, les résultats peuvent différer.
[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
La deuxième solution est meilleure car elle a une valeur de fonction plus faible. Il n’est pas garanti qu’une solution renvoyée par ga
soit une solution globale.
Voir aussi
ga
| fcn2optimexpr
| solve