Векторизуйте функции цели и ограничения

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

Прямой поиск часто запускается быстрее, если вы векторизуете объективные и нелинейные ограничительные функции. Это означает, что ваши функции оценивают все точки в опросе или поисковом шаблоне целиком, с одним вызовом функции, не имея необходимость циклично выполняться через точки по одному. Поэтому опция UseVectorized = true работает только когда UseCompletePoll или UseCompleteSearch также установлен в true. Однако, когда вы устанавливаете UseVectorized = true, patternsearch проверки, что цель и любые нелинейные ограничительные функции дают выходные параметры правильной формы для векторизованных вычислений, независимо от установки UseCompletePoll или UseCompleteSearch опции.

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

Примечание

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

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

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

  • Если начальная точка x0 вектор-столбец размера m, целевая функция берет каждый столбец матрицы как точка в шаблоне и возвращает вектор-строку из размера n.

  • Если начальная точка x0 вектор-строка из размера n, целевая функция берет каждую строку матрицы как точка в шаблоне и возвращает вектор-столбец размера m.

  • Если начальная точка x0 скаляр, patternsearch принимает тот x0 вектор-строка. Поэтому входная матрица имеет один столбец (n = 1, входная матрица является вектором), и каждая запись матрицы представляет одну строку для целевой функции, чтобы оценить. Выход целевой функции в этом случае является вектор-столбцом размера m.

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

Структура векторизованных функций

Например, предположите, что целевая функция

f(x)=x14+x244x122x22+3x1x2/2.

Если начальный векторный x0 вектор-столбец, такой как [0;0], функция для векторизованной оценки

function f = vectorizedc(x)

f = x(1,:).^4+x(2,:).^4-4*x(1,:).^2-2*x(2,:).^2 ...
    +3*x(1,:)-.5*x(2,:);
Если начальный векторный x0 вектор-строка, такой как [0,0], функция для векторизованной оценки
function f = vectorizedr(x)

f = x(:,1).^4+x(:,2).^4-4*x(:,1).^2-2*x(:,2).^2 ...
    +3*x(:,1)-.5*x(:,2);

Совет

Если вы хотите использовать ту же цель (фитнес) функция и для алгоритма поиска шаблона и для генетического алгоритма, запишите свою функцию, чтобы представлять точки векторами-строками и записать x0 как вектор-строка. Генетический алгоритм всегда берет индивидуумов в качестве строк матрицы. Это было проектным решением — генетический алгоритм не требует предоставленного пользователями населения, так должен иметь формат по умолчанию.

Минимизировать vectorizedc, введите следующие команды:

options=optimoptions('patternsearch','UseVectorized',true,'UseCompletePoll',true);
x0=[0;0];
[x,fval]=patternsearch(@vectorizedc,x0,...
         [],[],[],[],[],[],[],options)

MATLAB® возвращает следующий выходной параметр:

Optimization terminated: mesh size less than options.MeshTolerance.

x =
   -1.5737
    1.0575

fval =
  -10.0088

Векторизованные ограничительные функции

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

Те же факторы содержат для ограничительных функций что касается целевых функций: начальная точка x0 определяет тип точек (строка или вектор-столбцы) в опросе или поиске. Если начальная точка является вектором-строкой из размера k, матричный x, переданный ограничительной функции, имеет столбцы k. Точно так же, если начальная точка является вектор-столбцом размера k, матрица опроса или поисковых точек имеет строки k. Фигура Структура Векторизованных Функций может ясно дать понять это. Если начальная точка является скаляром, patternsearch принимает, что это - вектор-строка.

Ваша нелинейная ограничительная функция возвращает две матрицы, один для ограничений неравенства, и один для ограничений равенства. Предположим, что существует nc нелинейные ограничения неравенства и nceq нелинейные ограничения равенства. Для вектора-строки x0, ограничительные матрицы имеют nc и столбцы nceq соответственно, и количество строк эквивалентно во входной матрице. Точно так же для вектор-столбца x0, ограничительные матрицы имеют nc и строки nceq соответственно, и количество столбцов эквивалентно во входной матрице. На рисунке Структура Векторизованных Функций “Результаты” включают и nc и nceq.

Пример векторизованной цели и ограничений

Предположим, что нелинейные ограничения

x129+x2241 ( внутренняя часть   эллипса),x2cosh(x1)1.

Запишите функцию для этих ограничений для формы строки x0 можно следующим образом:

function [c ceq] = ellipsecosh(x)

c(:,1)=x(:,1).^2/9+x(:,2).^2/4-1;
c(:,2)=cosh(x(:,1))-x(:,2)-1;
ceq=[];

Минимизируйте vectorizedr (заданный в Векторизованной Целевой функции), подвергают ограничениям ellipsecosh:

x0=[0,0];
options = optimoptions('patternsearch','UseVectorized',true,'UseCompletePoll',true);
[x,fval] = patternsearch(@vectorizedr,x0,...
         [],[],[],[],[],[],@ellipsecosh,options)

MATLAB возвращает следующий выходной параметр:

Optimization terminated: mesh size less than options.MeshTolerance
 and constraint violation is less than options.ConstraintTolerance.

x =
   -1.3516    1.0612

fval =
   -9.5394

Похожие темы