ga, Основанный на проблемеВ этом примере показано, как минимизировать функцию с несколькими минимумами с помощью генетического алгоритма в подходе, основанном на проблеме. Для двух переменных x и y, Функция Рэстриджина определяется следующим образом.
ras = @(x, y) 20 + x.^2 + y.^2 - 10*(cos(2*pi*x) + cos(2*pi*y));
Постройте функцию, масштабируемую по 10 в каждом направлении.
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]) contains an object of type functionsurface.](../examples/globaloptim/win64/MinimizeRastriginsFunctionUsingGaProblemBasedExample_01.png)
Функция имеет много локальных минимумов и глобальное минимальное значение 0, который достигнут в x = 0, y = 0. Смотрите то, что глобальная оптимизация?
Создайте переменные x оптимизации и y. Укажите, что переменные ограничены .
x = optimvar("x","LowerBound",-100,"UpperBound",100); y = optimvar("y","LowerBound",-100,"UpperBound",100);
Создайте задачу оптимизации с целевой функцией rastriginsfcn(x).
prob = optimproblem("Objective",ras(x,y));Примечание: Если у вас есть нелинейная функция, которая не состоит из полиномов, рациональных выражений и элементарных функций, таких как exp, затем преобразуйте функцию в выражение оптимизации при помощи fcn2optimexpr. Смотрите преобразуют нелинейную функцию в выражение оптимизации и поддерживаемые операции для переменных и выражений оптимизации.
Создайте ga опции, чтобы использовать gaplotbestf функция plot.
options = optimoptions("ga","PlotFcn","gaplotbestf");
Решите задачу с помощью ga как решатель.
rng default % For reproducibility [sol,fval] = solve(prob,"Solver","ga","Options",options)
Solving problem using ga. Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

sol = struct with fields:
x: 0.9950
y: 0.9950
fval = 1.9899
Действительно ли получившееся значение функции является самым низким минимумом? Выполните поиск снова. Поскольку ga стохастический алгоритм, результаты могут отличаться.
[sol2,fval2] = solve(prob,"Solver","ga","Options",options)
Solving problem using ga. Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

sol2 = struct with fields:
x: 0.9950
y: -4.9289e-06
fval2 = 0.9950
Второе решение лучше, потому что оно имеет более низкое значение функции. Решение возвращено ga как гарантируют, не будет глобальным решением.
ga | fcn2optimexpr | solve