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

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

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

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

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

Похожие темы