Генетический алгоритм обычно работает быстрее, если векторизировать функцию фитнеса. Это означает, что генетический алгоритм вызывает функцию фитнеса только один раз, но ожидает, что функция фитнеса вычислит фитнес для всех людей в текущей популяции сразу. Для векторизации функции фитнеса
Запишите файл, который вычисляет функцию так, чтобы она принимала матрицу с произвольно большим количеством строк, соответствующих индивидуумам в популяции. Например, для векторизации функции
+ 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.
В задаче Оптимизировать оперативный редактор убедитесь, что в параметре Параметры алгоритма > Вычислить векторизированные функции установлен флажок.

Примечание
Функция пригодности и любая нелинейная функция ограничения должны принимать произвольное количество строк для использования опции векторизации. 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 являются векторами совокупности, которые всегда являются строками.