Оптимизируйте задачу Live Editor с fmincon Решатель

В этом примере показано, как использовать Оптимизировать задачу Live Editor с fmincon решатель, чтобы минимизировать уравнение второй степени к линейным и нелинейным ограничениям и границам.

Считайте задачу нахождения [x 1, x 2], который решает

minxf(x)=x12+x22

удовлетворяющее ограничениям

0.5x1(связанный)x1x2+10(линейное неравенство)x12x22+109x12x22+90x12+x20x22+x10}(нелинейное неравенство)

Начальная точка x0 поскольку этой проблемой является x 1 = 3 и x 2 = 1.

Запустите оптимизируют задачу Live Editor

Создайте новый live скрипт путем нажатия кнопки New Live Script в разделе File по вкладке Home.

New Live Script button

Вставьте Оптимизировать задачу Live Editor. Кликните по вкладке Insert и затем, в разделе Code, выберите Task > Optimize.

Insert Optimize Live Editor task

View of the Optimize Live Task

Для дальнейшего использования во вводе проблемных данных выберите Insert > Section Break. Новые разделы появляются выше и ниже задачи.

Введите проблемные данные

  1. При запуске с верхней части задачи введите проблемный тип и типы ограничения. Нажмите кнопку Objective > Quadratic и Constraints > Lower bounds, Linear inequality и кнопки Nonlinear. Задача показывает, что рекомендуемый решатель fmincon.

  2. Целевая функция

    Целевая функция достаточно проста представлять как анонимная функция. Расположите курсор в раздел выше задачи и введите этот код.

    fun = @(x)sum(x.^2);
  3. Нижняя граница

    Проблема содержит нижнюю границу x 1 ≥ 0.5. Опишите это связало как переменная lb. С курсором в конце линии, задающей целевую функцию, нажмите Enter и введите следующий код, чтобы задать нижнюю границу.

    lb = [0.5 -Inf];
  4. Начальная точка

    С курсором в конце линии, задающей нижнюю границу, нажмите Enter и введите следующий код, чтобы установить начальную точку.

    x0 = [3,1];
  5. Линейное ограничение

    С курсором в конце линии, задающей начальную точку, нажмите Enter и введите следующий код, чтобы установить линейное ограничение.

    A = [-1,-1];
    b = -1;
  6. Запустите раздел

    Главный раздел теперь включает пять параметров.

    Five lines of code defining initial parameters

    Затем необходимо запустить раздел, чтобы поместить параметры в рабочую область как переменные. Для этого кликните по крайней левой области раздела, который содержит панель диагональных дорожек. После того, как вы кликаете по этой области, панель становится твердой панелью, указывая, что переменные находятся теперь в рабочей области. (Примечание: можно также нажать Ctrl+Enter, чтобы запустить раздел.)

  7. Установите проблемные данные

    Введите переменные в раздел Select problem data задачи. Чтобы задать целевую функцию, выберите Objective function > Function handle и выберите fun.

  8. Установите начальную точку x0.

  9. Выберите Lower bounds > From workspace и выберите lb.

  10. Установите линейные переменные A ограничения неравенства и b в области Linear inequality.

  11. Теперь задайте нелинейные ограничения неравенства. В разделе Select problem data выберите Nonlinear > Local function, и затем нажмите кнопку New. Функция появляется в новом разделе ниже задачи. Отредактируйте получившийся код, чтобы содержать следующие непрокомментированные линии.

    function [c,ceq] = constraintFcn(x)
    % You can include commented code lines or not.
    % Be sure that just these uncommented lines remain:
    c = [-x(1)^2 - x(2)^2 + 1;
         -9*x(1)^2 - x(2)^2 + 9;
         -x(1)^2 + x(2);
         -x(2)^2 + x(1)];
    ceq = [];
    end
  12. В разделе Select problem data выберите функцию constraintFcn.

  13. Контролируйте прогресс

    В разделе Display progress задачи выберите Text display > Each iteration, таким образом, можно контролировать прогресс решателя. Выберите Objective value для графика.

    Ваша настройка выглядит так:

    fmincon solver, objective function handle fun, initial point x0, lower bounds lb, linear inequality constraints A and b, nonlinear local function constraintFcn, display each iteration, plot objective value

Запустите решатель и исследуйте результаты

Чтобы запустить решатель, кликните по кнопке опций в правом верхнем из окна задачи и выберите Run Section.

Run solver; keyboard equivalent is ctrl+enter

График появляется в отдельном окне рисунка и в области вывода задачи.

Plot showing 12 iterations and a final function value 2

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

solution, objectiveValue = minimize fun using fmincon solver

Конечная точка и ее связанное значение целевой функции появляются в solution и objectiveValue переменные в рабочей области. Просмотрите эти значения путем ввода этого кода в разделе Live Editor ниже задачи.

solution, objectiveValue

Нажмите Ctrl+Enter, чтобы запустить раздел.

solution = [1 1], objectiveValue = 2

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

|

Похожие темы