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

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

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

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

    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.

  • В приложении Оптимизации, набор 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 векторы населения, которые всегда являются строками.

Похожие темы