В этом примере показано, как минимизировать целевую функцию, подверженную нелинейным ограничениям неравенства и границам, с помощью поиска массива.
Для этой задачи целевая функция минимизации является простой функцией переменной 2-D x.
simple_objective(x) = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 + 4*x(2)^2)*x(2)^2;
Эта функция известна как «кулачок», как описано в L.C.W. Диксон и Г.П. Сего [1].
Кроме того, проблема имеет нелинейные ограничения и границы.
x(1)*x(2) + x(1) - x(2) + 1.5 <= 0 (nonlinear constraint) 10 - x(1)*x(2) <= 0 (nonlinear constraint) 0 <= x(1) <= 1 (bound) 0 <= x(2) <= 13 (bound)
Создание файла MATLAB с именем simple_objective.m содержащий следующий код:
type simple_objectivefunction y = simple_objective(x) %SIMPLE_OBJECTIVE Objective function for PATTERNSEARCH solver % Copyright 2004 The MathWorks, Inc. x1 = x(1); x2 = x(2); y = (4-2.1.*x1.^2+x1.^4./3).*x1.^2+x1.*x2+(-4+4.*x2.^2).*x2.^2;
Решатели, такие как patternsearch принять один вход x, где x имеет столько же элементов, сколько и количество переменных в проблеме. Целевая функция вычисляет скалярное значение целевой функции и возвращает его в отдельном выходном аргументе y.
Создание файла MATLAB с именем simple_constraint.m содержащий следующий код:
type simple_constraintfunction [c, ceq] = simple_constraint(x)
%SIMPLE_CONSTRAINT Nonlinear inequality constraints.
% Copyright 2005-2007 The MathWorks, Inc.
c = [1.5 + x(1)*x(2) + x(1) - x(2);
-x(1)*x(2) + 10];
% No nonlinear equality constraints:
ceq = [];
Функция ограничения вычисляет значения всех ограничений неравенства и равенства и возвращает векторы c и ceqсоответственно. Значение c представляет нелинейные ограничения неравенства, которые решатель пытается сделать меньшими или равными нулю. Значение ceq представляет нелинейные ограничения равенства, которые решатель пытается сделать равными нулю. В этом примере нет нелинейных ограничений равенства, поэтому ceq = []. Дополнительные сведения см. в разделе Нелинейные ограничения.
patternsearchУкажите целевую функцию как дескриптор функции.
ObjectiveFunction = @simple_objective;
Укажите границы проблемы.
lb = [0 0]; % Lower bounds ub = [1 13]; % Upper bounds
Укажите нелинейную функцию ограничения как дескриптор функции.
ConstraintFunction = @simple_constraint;
Укажите начальную точку для решателя.
x0 = [0.5 0.5]; % Starting pointВызовите решатель, запросив оптимальную точку x и значение функции в оптимальной точке fval.
[x,fval] = patternsearch(ObjectiveFunction,x0,[],[],[],[],lb,ub, ...
ConstraintFunction)Optimization terminated: mesh size less than options.MeshTolerance and constraint violation is less than options.ConstraintTolerance.
x = 1×2
0.8122 12.3122
fval = 9.1324e+04
Чтобы наблюдать за ходом выполнения решателя, укажите опции для выбора двух функций печати. Функция графика psplotbestf строит график наилучшего значения целевой функции при каждой итерации и функции графика psplotmaxconstr отображает максимальное нарушение ограничения на каждой итерации. Задайте эти две функции графика в массиве ячеек. Также просмотрите информацию о ходе выполнения решателя в окне команд, установив Display опция для 'iter'.
options = optimoptions(@patternsearch,'PlotFcn',{@psplotbestf,@psplotmaxconstr}, ... 'Display','iter');
Запустите решатель, включая options аргумент.
[x,fval] = patternsearch(ObjectiveFunction,x0,[],[],[],[],lb,ub, ...
ConstraintFunction,options) Max
Iter Func-count f(x) Constraint MeshSize Method
0 1 0.373958 9.75 0.9086
1 18 113581 1.617e-10 0.001 Increase penalty
2 148 92267 0 1e-05 Increase penalty
3 374 91333.2 0 1e-07 Increase penalty
4 639 91324 0 1e-09 Increase penalty
Optimization terminated: mesh size less than options.MeshTolerance
and constraint violation is less than options.ConstraintTolerance.

x = 1×2
0.8122 12.3122
fval = 9.1324e+04
Нелинейные ограничения вызывают patternsearch для решения множества подзадач в каждой итерации. Как показано как на графиках, так и на итеративном дисплее, процесс решения имеет несколько итераций. Тем не менее, Func-count в столбце итеративного отображения отображается множество оценок функций на одну итерацию. Как графики, так и итеративное отображение показывают, что начальная точка неосуществима и что целевая функция низка в начальной точке. В процессе решения значение целевой функции сначала увеличивается, а затем уменьшается до конечного значения.
[1] Диксон, L.C. W. и G.P. Szego (eds.). К глобальной оптимизации 2. Северо-Голландия: Elsevier Science Ltd., Амстердам, 1978.