В этом примере показано, как найти минимум функции Рэстриджина, функция, которая часто используется, чтобы протестировать генетический алгоритм. Пример представляет два подхода для минимизации: использование Оптимизировать задача Live Editor и работа в командной строке.
Для двух независимых переменных функция Рэстриджина задана как
Global Optimization Toolbox содержит rastriginsfcn.m
файл, который вычисляет значения функции Рэстриджина. Следующий рисунок показывает график функции Рэстриджина.
Когда график показывает, функция Рэстриджина имеет много локальных минимумов — “овраги” в графике. Однако функция имеет всего один глобальный минимум, который происходит в точке [0 0] в x-y плоскости, как обозначено вертикальной линией в графике, где значение функции 0. В любом локальном минимуме кроме [0 0], значение функции Рэстриджина больше 0. Чем дальше локальный минимум от источника, тем больше значение функции в той точке.
Функция Рэстриджина часто используется, чтобы протестировать генетический алгоритм, потому что его много локальных минимумов мешают стандартным, основанным на градиенте методам находить глобальный минимум.
Следующий контурный график функции Рэстриджина показывает переменные максимумы и минимумы.
Этот раздел объясняет, как найти минимум функционального использования Рэстриджина генетического алгоритма.
Примечание
Поскольку генетический алгоритм использует генераторы случайных чисел, алгоритм возвращает различные результаты каждый раз, когда вы запускаете его.
Создайте новый live скрипт путем нажатия кнопки New Live Script в разделе File по вкладке Home.
Вставьте Оптимизировать задачу Live Editor. Кликните по вкладке Insert и затем, в разделе Code, выберите Task > Optimize.
Для использования во вводе проблемных данных вставьте новый раздел путем нажатия кнопки Section Break на вкладке Insert. Новые разделы появляются выше и ниже задачи.
В новом разделе выше задачи введите следующий код, чтобы задать количество переменных и целевой функции.
nvar = 2; fun = @rastriginsfcn;
Чтобы поместить эти переменные в рабочую область, запустите раздел путем нажатия Ctrl+Enter.
В разделе Specify problem type задачи нажмите Objective > Nonlinear button.
Выберите Solver > ga - Genetic algorithm.
В разделе Select problem data задачи выберите Objective function > Function handle и затем выберите fun
.
Выберите Number of variables > nvar.
В разделе Display progress задачи выберите график Best fitness.
Чтобы запустить решатель, кликните по кнопке ⁝ опций в правом верхнем из окна задачи и выберите Run Section. График появляется в отдельном окне рисунка и в области вывода задачи. Обратите внимание на то, что ваш график может отличаться от один показанный, потому что ga
стохастический алгоритм.
Точки в нижней части графика обозначают лучшие значения фитнеса, в то время как точки выше их обозначают средние значения значений фитнеса в каждой генерации. Верхняя часть графика отображает оптимальные и средние значения, численно, в текущем поколении.
Чтобы видеть решение и значение функции фитнеса, посмотрите во главе задачи.
Чтобы просмотреть значения этих переменных, введите следующий код в разделе ниже задачи.
disp(solution) disp(objectiveValue)
Запустите раздел путем нажатия 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)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance. solution = 0.9785 0.9443 objectiveValue = 2.5463
Точки в нижней части графика обозначают лучшие значения фитнеса, в то время как точки выше их обозначают средние значения значений фитнеса в каждой генерации. Верхняя часть графика отображает оптимальные и средние значения, численно, в текущем поколении.
И Оптимизировать задача Live Editor и командная строка позволяют вам формулировать и решать проблемы, и они дают идентичные результаты. Командная строка более оптимизирована, но обеспечивает меньше справки для выбора решателя, подготовки проблема и выбора опций, таких как функции построения графика. Можно также запустить, использование задач Оптимизируют, и затем генерируют код для использования командной строки, когда в Решают Ограниченную Нелинейную задачу, Основанную на решателе.