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

Функция Рэстриджина

В этом примере показано, как найти минимум функции Рэстриджина, функция, которая часто используется, чтобы протестировать генетический алгоритм. Пример представляет два подхода для минимизации: использование Оптимизировать задача 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. Вставьте Оптимизировать задачу 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. Чтобы запустить решатель, кликните по кнопке опций в правом верхнем из окна задачи и выберите 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. Область значений Начальной буквы Набора тем, Устанавливая Объем Мутации и Определенный Максимальный номер Поколений и Поколений Останова описывает способы достигнуть результата, который ближе к фактическому минимуму. Или, можно просто повторно запустить решатель, чтобы попытаться получить лучший результат.

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

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

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

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

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

Похожие темы