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

В этом примере показано, как использовать задачу Optimize 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

Вставьте задачу Optimize 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

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

Чтобы запустить решатель, нажмите кнопку options в верхней части окна задачи и выберите 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

См. также

|

Похожие темы