Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l'ultima versione in inglese.

Ridurre al minimo la funzione Rastrigins usando ga, basato sui problemi

Questo esempio mostra come minimizzare una funzione con più minimi utilizzando l'algoritmo genetico nell'approccio basato sui problemi. Per due variabili x e y, la funzione di Rastrigin è definita come segue.

ras = @(x, y) 20 + x.^2 + y.^2 - 10*(cos(2*pi*x) + cos(2*pi*y));

Rappresenta graficamente la funzione scalata di 10 in ogni direzione.

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 funzione ha molti minimi locali e un valore minimo globale pari a 0 che si ottiene quando x = 0, y = 0. Vedi What Is Global Optimization?

Creare le variabili di ottimizzazione x e y. Specificare che le variabili sono delimitate da ±100 .

x = optimvar("x","LowerBound",-100,"UpperBound",100);
y = optimvar("y","LowerBound",-100,"UpperBound",100);

Creare un problema di ottimizzazione con la funzione obiettivo rastriginsfcn(x).

prob = optimproblem("Objective",ras(x,y));

Nota: Se si ha una funzione non lineare che non è composta da polinomi, espressioni razionali e funzioni elementari come exp, allora si può convertire la funzione in un'espressione di ottimizzazione utilizzando fcn2optimexpr. Vedere Convert Nonlinear Function to Optimization Expression e Supported Operations for Optimization Variables and Expressions .

Creare le opzioni ga per utilizzare la funzione di grafico gaplotbestf.

options = optimoptions("ga","PlotFcn","gaplotbestf");

Risolvi il problema utilizzando ga come risolutore.

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

Il valore della funzione risultante è il minimo più basso? Esegui nuovamente la ricerca. Poiché ga è un algoritmo stocastico, i risultati possono differire.

[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 seconda soluzione è migliore perché ha un valore funzionale inferiore. Non è garantito che una soluzione restituita da ga sia una soluzione globale.

Vedi anche

| |

Argomenti