Этот пример показывает, как найти минимум функции Растригина, функции, которая часто используется для проверки генетического алгоритма. В примере представлены два подхода к минимизации: использование задачи «Оптимизировать интерактивный редактор» и работа в командной строке.
Для двух независимых переменных функция Растригина определяется как
+ cos2āx2).
Панель инструментов глобальной оптимизации содержит rastriginsfcn.m , который вычисляет значения функции Растригина. На следующем рисунке показан график функции Растригина.

Как показывает сюжет, функция Растригина имеет множество локальных минимумов - «долин» в сюжете. Однако функция имеет только один глобальный минимум, который возникает в точке [0 0] в плоскости x-y, как указано вертикальной линией на графике, где значение функции равно 0. При любом локальном минимуме, отличном от [0 0], значение функции Растригина больше 0. Чем дальше локальный минимум от начала координат, тем больше значение функции в этой точке.
Функция Растригина часто используется для проверки генетического алгоритма, потому что его многочисленные локальные минимумы затрудняют для стандартных, основанных на градиенте методов поиск глобального минимума.
Следующий контурный график функции Растригина показывает чередующиеся максимумы и минимумы.

В этом разделе объясняется, как найти минимум функции Растригина с помощью генетического алгоритма.
Примечание
Поскольку генетический алгоритм использует генераторы случайных чисел, алгоритм возвращает разные результаты при каждом запуске.
Создайте новый сценарий в реальном времени, нажав кнопку «Создать сценарий в реальном времени» в разделе «Файл» на вкладке «Главная».

Вставка задачи «Оптимизировать интерактивный редактор». Перейдите на вкладку Вставка, а затем в разделе Код выберите Задача > Оптимизировать.


Для использования при вводе данных о проблемах вставьте новый раздел, нажав кнопку «Разрыв раздела» на вкладке «Вставка». Новые разделы появляются над и под задачей.
В новом разделе над задачей введите следующий код для определения количества переменных и целевой функции.
nvar = 2; fun = @rastriginsfcn;
Чтобы поместить эти переменные в рабочее пространство, запустите раздел, нажав клавиши CTRL + ENTER.
В разделе Задание типа задачи нажмите кнопку Цель > Нелинейный.
Выберите Решатель > ga - Генетический алгоритм.
В разделе Select problem data задачи выберите Objective function > Function handle, а затем выберите fun.
Выберите Число переменных > nvar.

В разделе Ход выполнения задачи выберите график «Лучший фитнес».
Чтобы запустить решатель, нажмите кнопку опций ⁝ в правом верхнем углу окна задачи и выберите Выполнить раздел. График отображается в отдельном окне рисунка и в области вывода задания. Обратите внимание, что ваш график может отличаться от показанного, потому что ga - стохастический алгоритм.

Точки в нижней части графика обозначают лучшие значения пригодности, в то время как точки над ними обозначают средние значения пригодности в каждом поколении. В верхней части графика отображаются наилучшие и средние численные значения в текущем поколении.
Чтобы увидеть значение функции решения и фитнеса, посмотрите в верхней части задачи.

Чтобы просмотреть значения этих переменных, введите следующий код в разделе под задачей.
disp(solution) disp(objectiveValue)
Запустите раздел, нажав Ctrl + Enter.
disp(solution)
0.9785 0.9443
disp(objectiveValue)
2.5463
Ваши значения могут отличаться, потому что ga - стохастический алгоритм.
Показанное значение не очень близко к фактическому минимальному значению функции Растригина, которое равно 0. В разделах «Задать начальный диапазон», «Установка величины мутации» и «Задать максимальное число поколений» и «Stall Generations» описаны способы достижения результата, который ближе к фактическому минимуму. Или можно просто повторно запустить решатель, чтобы попытаться получить лучший результат.
Чтобы найти минимум функции Растригина в командной строке, введите следующий код.
rng default % For reproducibility options = optimoptions('ga','PlotFcn','gaplotbestf'); [solution,objectiveValue] = ga(@rastriginsfcn,2,... [],[],[],[],[],[],[],options)

Optimization terminated: average change in the fitness value less than options.FunctionTolerance.
solution =
0.9785 0.9443
objectiveValue =
2.5463Точки в нижней части графика обозначают лучшие значения пригодности, в то время как точки над ними обозначают средние значения пригодности в каждом поколении. В верхней части графика отображаются наилучшие и средние численные значения в текущем поколении.
Задача «Оптимизировать интерактивный редактор» и командная строка позволяют формулировать и решать задачи, и они дают одинаковые результаты. Командная строка является более удобной, но предоставляет меньше возможностей для выбора решателя, настройки проблемы и выбора таких параметров, как функции печати. Можно также запустить проблему с помощью команды Оптимизировать (Optimize), а затем создать код для использования в командной строке, как в разделе Решение ограниченной нелинейной проблемы на основе решателя (Solver-Based).