exponenta event banner

Ограниченная минимизация с помощью поиска массива

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

Проблема минимизации с ограничениями

Для этой задачи целевая функция минимизации является простой функцией переменной 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_objective
function 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_constraint
function [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.

Figure Pattern Search contains 2 axes. Axes 1 with title Best Function Value: 91324 contains an object of type line. Axes 2 with title Max Constraint Violation: 0 contains an object of type line.

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.

Связанные темы