exponenta event banner

Векторизация фитнес-функции

Векторизация для скорости

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

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

    f (x1, x2) = x12 2x1x2 + 6x1 + x22 − 6x2

    запишите файл, используя следующий код:

    z =x(:,1).^2 - 2*x(:,1).*x(:,2) + 6*x(:,1) + x(:,2).^2 - 6*x(:,2);

    Двоеточие в первой записи x указывает все строки x, так что x(:, 1) является вектором. .^ и .* операторы выполняют элементарные операции над векторами.

  • В командной строке установите UseVectorized опция для true использование optimoptions.

  • В задаче Оптимизировать оперативный редактор убедитесь, что в параметре Параметры алгоритма > Вычислить векторизированные функции установлен флажок.

    Evaluate functions vectorized shows a check mark

Примечание

Функция пригодности и любая нелинейная функция ограничения должны принимать произвольное количество строк для использования опции векторизации. ga иногда вычисляет одну строку даже во время векторизованного вычисления.

Следующее сравнение, выполняемое в командной строке, показывает улучшение скорости с векторизацией.

options = optimoptions('ga','PopulationSize',2000);
tic;ga(@rastriginsfcn,20,[],[],[],[],[],[],[],options);toc
Optimization terminated: maximum number of generations exceeded.
Elapsed time is 12.054973 seconds.

options = optimoptions(options,'UseVectorized',true);
tic;
ga(@rastriginsfcn,20,[],[],[],[],[],[],[],options);
toc
Optimization terminated: maximum number of generations exceeded.
Elapsed time is 1.860655 seconds.

Векторизованные зависимости

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

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

Связанные темы