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