Векторизуйте функцию фитнеса

Векторизуйте для скорости

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

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

    f(x1,x2)=x122x1x2+6x1+x226x2

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

    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 имеет галочку.

    Evaluate functions vectorized shows a check mark

Примечание

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

Похожие темы