Минимизируйте функцию Растригина

Функция Растригина

Этот пример показывает, как найти минимум функции Растригина, функции, которая часто используется для тестирования генетического алгоритма. В примере представлены два подхода к минимизации: использование задачи Optimize Live Editor и работа в командной строке.

Для двух независимых переменных функция Растригина определяется как

Ras(x)=20+x12+x2210(cos2πx1+cos2πx2).

Global Optimization Toolbox содержит rastriginsfcn.m файл, который вычисляет значения функции Растригина. Следующий рисунок показывает график функции Растригина.

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

Функция Растригина часто используется для тестирования генетического алгоритма, потому что его многочисленные локальные минимумы затрудняют для стандартных, основанных на градиентах методов поиск глобального минимума.

Следующий контурный график функции Растригина показывает переменные максимумы и минимумы.

Минимизируйте использование задачи оптимизации Live Editor

В этом разделе объясняется, как найти минимум функции Растригина с помощью генетического алгоритма.

Примечание

Поскольку генетический алгоритм использует генераторы случайных чисел, алгоритм возвращает различные результаты каждый раз, когда вы запускаете его.

  1. Создайте новый live скрипт, нажав кнопку New Live Script в разделе File на вкладке Home.

    New Live Script button

  2. Вставьте задачу Optimize Live Editor. Щелкните вкладку Insert, а затем в разделе Code выберите Task > Optimize.

    Choosing Optimize Live Editor task

    Optimize Live Editor task

  3. Для использования при вводе данных о задаче вставьте новый раздел, нажав кнопку Section Break на вкладке Insert. Новые разделы появляются выше и ниже задачи.

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

    nvar = 2;
    fun = @rastriginsfcn;
  5. Чтобы поместить эти переменные в рабочую область, запустите раздел, нажав Ctrl+Enter.

  6. В Specify problem type разделе задачи щелкните Objective > Nonlinear button.

  7. Выберите Solver > ga - Genetic algorithm.

  8. В Select problem data разделе задачи выберите Objective function > Function handle и затем fun.

  9. Выберите Number of variables > nvar.

    Solver, objective function, and number of variables specified

  10. В Display progress разделе задачи выберите Best fitness график.

  11. Чтобы запустить решатель, нажмите кнопку options в верхней части окна задачи и выберите Run Section. График появляется в отдельном окне рисунка и в области выхода задачи. Обратите внимание, что ваш график может отличаться от показанного, потому что ga является стохастическим алгоритмом.

    Best fitness and mean fitness decrease over nearly 60 generations.

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

  12. Чтобы увидеть решение и значение функции соответствия, смотрите в верхней части задачи.

    solution, objectiveValue = Minimize rastriginsfcn using ga solver

  13. Чтобы просмотреть значения этих переменных, введите следующий код в разделе под задачей.

    disp(solution)
    disp(objectiveValue)
  14. Запустите раздел нажатием Ctrl+Enter.

    disp(solution)
        0.9785    0.9443
    disp(objectiveValue)
        2.5463

    Ваши значения могут отличаться, потому что ga является стохастическим алгоритмом.

Показанное значение не очень близко к фактическому минимальному значению функции Растригина, которое 0. Темы Set Initial Range, Setting the Sumber of Mutation, and Set Maximum Number of Generations and Stall Generations описывают способы достижения результата, который ближе к фактическому минимуму. Или можно просто перезапустить решатель, чтобы попытаться получить лучший результат.

Минимизируйте в командной строке

Чтобы найти минимум функции Растригина в командной строке, введите следующий код.

rng default % For reproducibility
options = optimoptions('ga','PlotFcn','gaplotbestf');
[solution,objectiveValue] = ga(@rastriginsfcn,2,...
    [],[],[],[],[],[],[],options)

Best fitness and mean fitness decrease over nearly 60 generations

Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

solution =

    0.9785    0.9443


objectiveValue =

    2.5463

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

И задача Optimize Live Editor, и командная строка позволяют вам сформулировать и решить задачи, и они дают одинаковые результаты. Командная строка более упорядочена, но предоставляет меньше помощи для выбора решателя, настройки задачи и выбора опций, таких как функции построения графика. Можно также начать задачу с помощью Optimize, а затем сгенерировать код для использования в командной строке, как в Решать Ограниченную Нелинейную Задачу, Основанную на Решателе.

Похожие темы