Генетический алгоритм обычно запускается быстрее, если вы векторизуете функцию фитнеса. Это означает, что генетический алгоритм только вызывает функцию фитнеса однажды, но ожидает, что функция фитнеса вычислит пригодность для всех людей в текущей генеральной совокупности целиком. Векторизовать функцию фитнеса,
Запишите файл, который вычисляет функцию так, чтобы это приняло матрицу с произвольно многими строками, соответствуя людям в генеральной совокупности. Например, чтобы векторизовать функцию
запишите файл с помощью следующего кода:
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
.
В приложении Оптимизации, набор User function evaluation > Evaluate fitness and constraint functions к vectorized
.
Функция фитнеса и любая нелинейная ограничительная функция, должны принять, что произвольное число строк использует опцию Vectorize. 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
являются векторами генеральной совокупности, которые всегда являются строками.