Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

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")

Figure contains an axes object. The axes object with title rastriginsfcn([x/10,y/10]), xlabel x, ylabel y contains an object of type functionsurface.

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

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.

Figure Genetic Algorithm contains an axes object. The axes object with title Best: 1.98992 Mean: 1.98992, xlabel Generation, ylabel Fitness value contains 2 objects of type scatter. These objects represent Best fitness, Mean fitness.

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.

Figure Genetic Algorithm contains an axes object. The axes object with title Best: 0.994959 Mean: 0.99496, xlabel Generation, ylabel Fitness value contains 2 objects of type scatter. These objects represent Best fitness, Mean fitness.

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

| |

Rubriques