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

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

Ограниченная задача минимизации

Для этой задачи целевой функцией для минимизации является простая функция от переменной 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] Dixon, L.C. W., and G .P. Szego (eds.). К глобальной оптимизации 2. Северная Голландия: Elsevier Science Ltd., Амстердам, 1978.

Похожие темы