Решите ограниченную нелинейную задачу, основанную на решателе

Типичная задача оптимизации

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

Для подхода, основанного на проблеме к этой проблеме смотрите, Решают Ограниченную Нелинейную задачу, Основанную на проблеме.

Формулировка проблемы: функция Розенброка

Рассмотрите задачу минимизации функции Розенброка

f(x)=100(x2x12)2+(1x1)2,

по unit disk, то есть, диску радиуса 1 с центром в начале координат. Другими словами, найдите x, который минимизирует функциональный f (x) на множестве x12+x221. Этой проблемой является минимизация нелинейной функции с нелинейным ограничением.

Примечание

Функция Розенброка является стандартной тестовой функцией в оптимизации. Это имеет уникальное минимальное значение 0 достигнутых в точке [1,1]. Нахождение минимума является проблемой для некоторых алгоритмов, потому что функция имеет неглубокий минимум в очень кривом овраге. Решением для этой проблемы не является в точке [1,1] потому что та точка не удовлетворяет ограничению.

Этот рисунок показывает два представления функции Розенброка на единичном диске. Вертикальная ось имеет логарифмическое масштабирование; другими словами, график показывает журнал (1+f (x)). Линии контура лежат ниже графика поверхности.

Функция Розенброка, масштабируемая журналом: два представления.

 Код для генерации фигуры

Функциональный f (x) называется целевой функцией. Целевая функция является функцией, которую вы хотите минимизировать. Неравенство x12+x221 называется ограничением. Ограничения ограничивают набор x, по которому решатель ищет минимум. У вас может быть любое количество ограничений, которые являются неравенствами или уравнениями.

Все оптимизационные функции Optimization Toolbox минимизируют целевую функцию. Чтобы максимизировать функциональный f, примените стандартную программу оптимизации, чтобы минимизировать –f. Для получения дополнительной информации о максимизации, смотрите Максимизацию Цели.

Опишите задачу в синтаксисе тулбокса

Чтобы использовать программное обеспечение Optimization Toolbox, выразите свою проблему следующим образом:

  1. Задайте целевую функцию на языке MATLAB® как файл функции или анонимная функция. Этот пример использует файл функции.

  2. Задайте ограничения как отдельный файл или анонимную функцию.

Файл функции для целевой функции

Файл функции является текстовым файлом, который содержит команды MATLAB и имеет дополнительный .m. Создайте файл функции в любом текстовом редакторе или используйте встроенный в MATLAB редактор, как в этом примере.

  1. В командной строке, введите:

    edit rosenbrock
  2. В редакторе MATLAB, введите:

    %% ROSENBROCK(x) expects a two-column matrix and returns a column vector
    % The output is the Rosenbrock function, which has a minimum at
    % (1,1) of value 0, and is strictly positive everywhere else.
    
    function f = rosenbrock(x)
    
    f = 100*(x(:,2) - x(:,1).^2).^2 + (1 - x(:,1)).^2;

    Примечание

    rosenbrock векторизованная функция, которая может вычислить значения для нескольких точек целиком. Смотрите Векторизацию (MATLAB). Векторизованная функция является лучшей для графического вывода. Для невекторизованной версии, введите:

    %% ROSENBROCK1(x) expects a two-element vector and returns a scalar
    % The output is the Rosenbrock function, which has a minimum at
    % (1,1) of value 0, and is strictly positive everywhere else.
    
    function f = rosenbrock1(x)
    
    f = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
  3. Сохраните файл с именем rosenbrock.m.

Файл функции для ограничения

Ограничительные функции имеют форму c (x) ≤ 0 или ceq (x) = 0. Ограничение x12+x221 не находится в форме, которую обрабатывает решатель. Чтобы иметь правильный синтаксис, переформулируйте ограничение как x12+x2210.

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

Учитывая эти соображения, запишите файл функции для нелинейного ограничения.

  1. Создайте файл с именем unitdisk.m содержа следующий код:

    function [c,ceq] = unitdisk(x)
    c = x(1)^2 + x(2)^2 - 1;
    ceq = [ ];
  2. Сохраните файл unitdisk.m.

Запустите оптимизацию

Существует два способа запустить оптимизацию:

Минимизируйте функцию Розенброка Используя приложение оптимизации

Примечание

Приложение Оптимизации предупреждает, что будет удалено в будущем релизе. Для альтернатив смотрите Альтернативы Приложения Оптимизации.

  1. Запустите приложение Оптимизации путем ввода optimtool в командной строке. Для получения дополнительной информации об этом инструменте, см. Приложение Оптимизации.

    Solver по умолчанию, fmincon - Constrained nonlinear minimization, выбран. Этот решатель подходит для этой проблемы, потому что функция Розенброка нелинейна, и проблема имеет ограничение. Для получения дополнительной информации о выборе решателя, см. Таблицу решений Оптимизации.

    Algorithm по умолчанию, Interior point, также выбран.

  2. В поле Objective function введите @rosenbrock. Символ @ указывает на указатель на функцию (MATLAB) файла rosenbrock.m.

  3. В поле Start point введите [0 0] задавать начальную точку где fmincon начинает его поиск минимума.

  4. В поле Nonlinear constraint function введите @unitdisk, указатель на функцию unitdisk.m.

    Убедитесь, что ваша панель Problem Setup and Results совпадает с этим рисунком.

  5. В панели Options, под Display to command window (в нижней части панели), выбирают iterative из списка Level of display. (Если вы не видите опцию, нажмите Display to command window.) Эта установка показывает прогресс fmincon в Командном окне.

  6. В панели Problem Setup and Results, под Run solver and view results, нажимают Start.

Следующее сообщение появляется в поле Run solver and view results:

Optimization running.
Objective function value: 0.04567482475812774
Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
Ваше значение целевой функции может отличаться немного, в зависимости от вашей компьютерной системы и версии Optimization Toolbox.

Сообщение говорит вам что:

  • Поиск ограниченного оптимума закончен, потому что производная целевой функции - почти 0 в направлениях, дозволенных ограничением.

  • Ограничению удовлетворяют с необходимой точностью.

В нижней части панели Problem Setup and Results, минимизатор x появляется под Final point. Для получения дополнительной информации о выходных сообщениях, смотрите Выходные Флаги и Выходные сообщения.

Минимизируйте функцию Розенброка в командной строке

Можно запустить ту же оптимизацию из командной строки.

  1. Создайте опции, которые выбирают итеративное отображение и interior-point алгоритм.

    options = optimoptions(@fmincon,...
        'Display','iter','Algorithm','interior-point');
  2. Запустите fmincon решатель с options структура, сообщая об обоих местоположение x из минимизатора и значения fval достигнутый целевой функцией.

    [x,fval] = fmincon(@rosenbrock,[0 0],...
        [],[],[],[],[],[],@unitdisk,options)

    Шесть наборов пустых скобок представляют дополнительные ограничения, которые не используются в этом примере. Смотрите fmincon страницы ссылки на функцию для синтаксиса.

MATLAB выводит таблицу итераций и результаты оптимизации.

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.

x =
    0.7864    0.6177

fval =
    0.0457

Сообщение говорит вам, что поиск ограниченного оптимума, законченного, потому что производная целевой функции - почти 0 в направлениях, позволенных ограничением, и что ограничению удовлетворяют с необходимой точностью. Несколько фраз в сообщении содержат ссылки на большую информацию о терминах, использованных в сообщении. Для получения дополнительной информации об этих ссылках, смотрите Расширенные Выходные сообщения.

Интерпретируйте результат

Таблица итерации в командном окне показывает, как MATLAB искал минимальное значение функции Розенброка в единичном диске. Эта таблица является тем же самым, используете ли вы приложение Оптимизации или командную строку. MATLAB сообщает о минимизации следующим образом:

                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
    0       3    1.000000e+00    0.000e+00    2.000e+00
    1      13    7.753537e-01    0.000e+00    6.250e+00    1.768e-01
    2      18    6.519648e-01    0.000e+00    9.048e+00    1.679e-01
    3      21    5.543209e-01    0.000e+00    8.033e+00    1.203e-01
    4      24    2.985207e-01    0.000e+00    1.790e+00    9.328e-02
    5      27    2.653799e-01    0.000e+00    2.788e+00    5.723e-02
    6      30    1.897216e-01    0.000e+00    2.311e+00    1.147e-01
    7      33    1.513701e-01    0.000e+00    9.706e-01    5.764e-02
    8      36    1.153330e-01    0.000e+00    1.127e+00    8.169e-02
    9      39    1.198058e-01    0.000e+00    1.000e-01    1.522e-02
   10      42    8.910052e-02    0.000e+00    8.378e-01    8.301e-02
   11      45    6.771960e-02    0.000e+00    1.365e+00    7.149e-02
   12      48    6.437664e-02    0.000e+00    1.146e-01    5.701e-03
   13      51    6.329037e-02    0.000e+00    1.883e-02    3.774e-03
   14      54    5.161934e-02    0.000e+00    3.016e-01    4.464e-02
   15      57    4.964194e-02    0.000e+00    7.913e-02    7.894e-03
   16      60    4.955404e-02    0.000e+00    5.462e-03    4.185e-04
   17      63    4.954839e-02    0.000e+00    3.993e-03    2.208e-05
   18      66    4.658289e-02    0.000e+00    1.318e-02    1.255e-02
   19      69    4.647011e-02    0.000e+00    8.006e-04    4.940e-04
   20      72    4.569141e-02    0.000e+00    3.136e-03    3.379e-03
   21      75    4.568281e-02    0.000e+00    6.437e-05    3.974e-05
   22      78    4.568281e-02    0.000e+00    8.000e-06    1.083e-07
   23      81    4.567641e-02    0.000e+00    1.601e-06    2.793e-05
   24      84    4.567482e-02    0.000e+00    1.996e-08    6.916e-06

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

  • Первый столбец, пометил Iter, номер итерации от 0 до 24. fmincon взял 24 итерации, чтобы сходиться.

  • Второй столбец, пометил F-count, сообщает, что накопительное число раз вычислений функции Розенброка было оценено. Итоговая строка показывает F-count из 84, указывая на тот fmincon функция оцененного Розенброка 84 раза в процессе нахождения минимума.

  • Третий столбец, пометил f(x), отображает значение целевой функции. Окончательное значение, 0.04567482, является минимумом, о котором сообщают в приложении Оптимизации поле Run solver and view results, и в конце выходного сообщения в командном окне.

  • Четвертый столбец, Feasibility, 0 для всех итераций. Этот столбец показывает значение ограничительной функции unitdisk в каждой итерации, где ограничение положительно. Поскольку значение unitdisk было отрицательно во всех итерациях, каждая итерация удовлетворила ограничению.

Другие столбцы таблицы итерации описаны в Итеративном Отображении.

Смотрите также

Похожие темы