Ограниченная минимизация Используя поиск шаблона

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

Ограниченная проблема минимизации

Для этой проблемы целевая функция, чтобы минимизировать является простой функцией 2D переменной 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 = []. Для получения дополнительной информации смотрите Нелинейные Ограничения (Optimization Toolbox).

Минимизируйте Используя 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 (редакторы).. К глобальной оптимизации 2. Северная Голландия: Elsevier Science Ltd., Амстердам, 1978.