Прямой поиск часто запускается быстрее, если вы векторизуете объективные и нелинейные ограничительные функции. Это означает, что ваши функции оценивают все точки в опросе или поисковом шаблоне целиком, с одним вызовом функции, не имея необходимость циклично выполняться через точки по одному. Поэтому опция UseVectorized
= true
работает только, когда UseCompletePoll
или UseCompleteSearch
также установлены в true
. Однако, когда вы устанавливаете UseVectorized
= true
, patternsearch
проверяет, что цель и любые нелинейные ограничительные функции дают выходные параметры правильной формы для векторизованных вычислений, независимо от установки опций UseCompleteSearch
или UseCompletePoll
.
Если существуют нелинейные ограничения, целевая функция и нелинейные ограничения вся потребность, которая будет векторизована для алгоритма, чтобы вычислить векторизованным способом.
Запишите свою векторизованную целевую функцию или нелинейную ограничительную функцию, чтобы принять матрицу с произвольным числом точек. patternsearch
иногда оценивает одну точку даже во время векторизованного вычисления.
Векторизованная целевая функция принимает матрицу как вход и генерирует вектор значений функции, где каждое значение функции соответствует одной строке или столбцу входной матрицы. patternsearch
разрешает неоднозначность в том, представляют ли строки или столбцы матрицы точки шаблона можно следующим образом. Предположим, что входная матрица имеет строки m
и столбцы n
:
Если начальная точка, x0
является вектор-столбцом размера m
, целевая функция, берет каждый столбец матрицы как точка в шаблоне и возвращает вектор - строку из размера n
.
Если начальная точка, x0
является вектором - строкой из размера n
, целевая функция, берет каждую строку матрицы как точка в шаблоне и возвращает вектор-столбец размера m
.
Если начальная точка, x0
является скаляром, patternsearch
, принимает, что x0
является вектором - строкой. Поэтому входная матрица имеет один столбец (n
= 1, входная матрица является вектором), и каждая запись матрицы представляет одну строку для целевой функции, чтобы оценить. Вывод целевой функции в этом случае является вектор-столбцом размера m
.
Графическим образом матрица и вычисление представлены следующей фигурой.
Структура векторизованных функций
Например, предположите, что целевая функция
Если начальный векторный 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)
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.
Предположим, что нелинейные ограничения
Запишите функцию для этих ограничений для формы строки 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)
Optimization terminated: mesh size less than options.MeshTolerance and constraint violation is less than options.ConstraintTolerance. x = -1.3516 1.0612 fval = -9.5394