Минимизируйте функцию Рэстриджинса Используя 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.

Функция имеет много локальных минимумов и глобальное минимальное значение 0, который достигнут в x = 0, y = 0. Смотрите то, что глобальная оптимизация?

Создайте переменные x оптимизации и y. Укажите, что переменные ограничены ±100.

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.

Figure Genetic Algorithm contains an axes object. The axes object with title Best: 1.98992 Mean: 1.98992 contains 2 objects of type line. These objects represent Best fitness, Mean fitness.

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.

Figure Genetic Algorithm contains an axes object. The axes object with title Best: 0.994959 Mean: 0.99496 contains 2 objects of type line. These objects represent Best fitness, Mean fitness.

sol2 = struct with fields:
    x: 0.9950
    y: -4.9289e-06

fval2 = 0.9950

Второе решение лучше, потому что оно имеет более низкое значение функции. Решение возвращено ga как гарантируют, не будет глобальным решением.

Смотрите также

| |

Похожие темы