fmincon
РешательВ этом примере показано, как использовать задачу Optimize Live Editor с fmincon
решатель, чтобы минимизировать уравнение второй степени линейным и нелинейным ограничениям и границам.
Рассмотрим задачу нахождения [x 1, x 2], которая решает
удовлетворяющее ограничениям
Область начальной точки x0
для этой задачи является x 1 = 3 и x 2 = 1.
Создайте новый live скрипт, нажав кнопку New Live Script в разделе File на вкладке Home.
Вставьте задачу Optimize Live Editor. Щелкните вкладку Insert, а затем в разделе Code выберите Task > Optimize.
Для дальнейшего использования при вводе данных задачи выберите Insert > Section Break. Новые разделы появляются выше и ниже задачи.
Начиная с верхней части задачи, вводите тип задачи и типы ограничений. Нажмите кнопку Objective > Quadratic и кнопки Constraints > Lower bounds, Linear inequality и Nonlinear. Задача показывает, что рекомендуемый решатель fmincon
.
Целевая функция
Целевая функция достаточно проста, чтобы представлять как анонимную функцию. Установите курсор в разделе над задачей и введите этот код.
fun = @(x)sum(x.^2);
Нижняя граница
Задача содержит нижнюю границу x 1 ≥ 0,5. Выразите эту границу как переменную lb
. Удерживая курсор в конце линии, определяющего целевую функцию, нажмите Enter и введите следующий код, чтобы задать нижнюю границу.
lb = [0.5 -Inf];
Начальная точка
Удерживая курсор в конце линии, определяющего нижнюю границу, нажмите Enter и введите следующий код, чтобы задать начальную точку.
x0 = [3,1];
Линейное ограничение
Удерживая курсор в конце линии, определяющего начальную точку, нажмите Enter и введите следующий код, чтобы задать линейное ограничение.
A = [-1,-1]; b = -1;
Запуск раздела
В верхней части теперь пять параметров.
Далее необходимо запустить раздел, чтобы поместить параметры в рабочей области как переменные. Для этого щелкните по самой левой области сечения, которая содержит полоску диагональных полос. После клика по этой области панель становится сплошной панелью, что указывает на то, что переменные теперь находятся в рабочей области. (Примечание: Вы также можете нажать Ctrl+Enter, чтобы запустить раздел.)
Установите данные задачи
Введите переменные в Select problem data разделе задачи. Чтобы задать целевую функцию, выберите Objective function > Function handle и выберите fun.
Установите начальную точку x0.
Выберите Lower bounds > From workspace и lb.
Установите линейные переменные ограничения неравенства A
и b
в области Linear inequality.
Теперь задайте нелинейные ограничения неравенства. В разделе 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
В Select problem data разделе выберите функцию constraintFcn.
Отслеживайте прогресс
В Display progress разделе задачи выберите Text display > Each iteration, чтобы можно было контролировать прогресс решателя. Выберите Objective value для графика.
Ваша настройка выглядит следующим образом:
Чтобы запустить решатель, нажмите кнопку options ⁝ в верхней части окна задачи и выберите Run Section.
График появляется в отдельном окне рисунка и в области выхода задачи.
Чтобы увидеть, где возвращаются переменные решения, смотрите в верхней части задачи.
Конечная точка и связанное с ней значение целевой функции появляются в solution
и objectiveValue
переменные в рабочей области. Просмотрите эти значения, введя этот код в разделе live editor под задачей.
solution, objectiveValue
Нажмите Ctrl+Enter, чтобы запустить раздел.