Векторизация функции соответствия

Векторизация для скорости

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

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

    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) является вектором. The .^ и .* операторы выполняют элементарные операции над векторами.

  • В командной строке установите UseVectorized опция для true использование optimoptions.

  • В задаче Optimize 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.

Векторизованные ограничения

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

Векторизация функций Objective и Constraint содержит пример того, как векторизировать оба для решателя patternsearch. Синтаксис почти идентичен для ga. Единственное различие заключается в том, что patternsearch может иметь свои узоры как строка или векторы-столбцы; соответствующие векторы для ga являются векторами населения, которые всегда являются строками.

Похожие темы