| Методы оптимизации |
| Конспект лекций |
Тема 11. Нелинейное программирование
11.1 Задачи нелинейного программирования. Постановка и свойства задач выпуклого программирования
В предыдущих темах рассматривались задачи оптимизации, в описании которой фигурировали только линейные функции: максимизируется (или минимизируется) линейная функция на допустимом множестве, задаваемом некоторой линейной системой уравнений и неравенств (за исключением задачи управления запасами, которая имела одну переменную и решалась методами математического анализа). Причем существенным было наличие именно неравенств. Линейные ограничения и целевая функция далеко не всегда могут адекватно описать реальную ситуацию (задачу). Положение меняется при переходе к нелинейным функциям. В этом случае и при отсутствии неравенств задача является содержательной и изучается в математическом анализе (задача на условный экстремум) в предположении дифференцируемости рассматриваемых функций. Основной результат состоит в сведении вопроса к отысканию стационарных точек функции Лагранжа, т. е. к решению некоторой нелинейной системы уравнений.
Особое место в экономико-математическом моделировании имеют задачи, описываемые посредством выпуклых функций: нужно минимизировать выпуклую функцию на выпуклом множестве, которое также задается с помощью выпуклых функций в виде некоторой нелинейной системы неравенств. Это задачи выпуклого программирования (выпуклое программирование - подраздел нелинейного программирования). Для них можно сформулировать признак оптимальности, используя понятие седловой точки функции Лагранжа.
Среди оптимизационных задач описанного общего класса выделяется подкласс задач выпуклого программирования. Эти задачи характеризуются специальным способом описания допустимого множества X, а именно: в качестве множества X рассматривается множество решений некоторой системы неравенств, задаваемой выпуклыми функциями. Точнее, речь идет о задачах в Rn вида

где
и
—
выпуклые функции, области определения
которых включают множество X. Для простоты в
дальнейшем мы предполагаем,
что все эти функции заданы на всем Rn.
Напомним
(из курса
математического анализа), что, говоря о выпуклой функции
на
множестве
,
мы требуем выполнения двух условий:
1)
множество
должно
быть выпуклым;
2)
для любых
выполняется
неравенство

Можно
дать и несколько иное определение выпуклой функции,
используя понятие надграфика функции. Под надграфиком функции
понимается
множество

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

также выпукло (или, возможно, пусто).
Выпуклая
функция необязательно является непрерывной, но
разрывы у выпуклых функций могут быть только на границе области
задания. В
любой же внутренней точке своей области задания выпуклая функция
обязательно
непрерывна. Более того, в любой внутренней точке своей области задания
выпуклая
функция имеет производные по всем направлениям, хотя может и не быть
дифференцируемой. Поэтому возникает вопрос о получении формулы,
задающей эти
производные по направлениям. Для дифференцируемых функций производная
по
направлениям легко получается через градиент функции: производная
функции
в
точке х° по направлению,
задаваемому вектором h, равна скалярному
произведению градиента
на
вектор h:
.
Обобщение этой формулы на произвольные выпуклые функции требует введения понятия субградиента выпуклой функции.
Пусть
—
выпуклая (но необязательно дифференцируемая) функция, Будем говорить,
что
вектор g является субградиентом функции
в
точке
,
если
.
Ясно,
что если
,
и
дифференцируема
в точке х, то в
качестве g можно взять
,
т.е. градиент функции является ее субградиентом функции, при этом
других
субградиентов в этой точке у такой функции не существует.
Проинтерпретировать
субградиентможно в пространстве
изменения аргумента функции
.
Для этого зафиксируем точку
и
рассмотрим выпуклое множество
.
По
определению субградиента имеем
![]()
т.е.
,
и
все множество
лежит
по одну сторону
от гиперплоскости
,
заданной уравнением
,
и
имеет с ней одну общую точку
(рис.
11.1).

Рисунок 11.1 – Геометрическая интерпретация субградиента
для
случая ![]()
Множество
всех субградиентов функции
в
точке х обозначают
и
называют субдифференциалом этой
функции в точке х. Используя понятие
субдифференциала, можно дать
простую формулу производных функции по направлению.
Теорема
о субдифференциале.
Для выпуклой функции
,
при
субдифференциал
является
непустым выпуклым компактом, и
производная
функции
в
точке
по
направлению
задается
формулой

Перейдем теперь собственно к задачам оптимизации, обобщающим задачи линейного программирования.
Сначала рассмотрим задачу об отыскании минимума выпуклой функции
на
некотором выпуклом множестве ![]()
![]()
Естественно предполагать, что множество X
содержится в выпуклом множестве
,
на
котором определяется целевая функция, для простоты будем считать, что
.
Важной характеристикой сформулированной задачи является совпадение локального и глобального минимумов. Напомним, что под точкой глобального минимума понимается собственно решение рассматриваемой задачи, т. е. такая точка x*, для которой выполняется
![]()
Если же это неравенство выполняется на пересечении
множества X с некоторой окрестностью точки х*,
то говорят, что х* — точка локального минимума. Вид окрестности не является существенным.
Важно, что это открытое множество, содержащее х*. Таким
образом, если х*
— точка локального минимума в рассматриваемой задаче, то это означает, что
найдется
такое,
что
![]()
где
—
некоторая
-окрестность
точки
.
Очевидно, что если х* — точка глобального минимума, то она же является и точкой локального минимума.
При этом, благодаря выпуклости функции
, верно и обратное (доказательство этого факта остается в качестве упражнения).
Это
позволяет легко сформулировать признак оптимальности в случае, если функция
является
дифференцируемой. Если
,
то
является
решением задачи
тогда
и только тогда, когда
.
Обобщение
на случай не
дифференцируемой функции является естественным. Пусть
выпукла
на
,
но не обязательно дифференцируема.
Тогда если
,
то
является
решением задачи
тогда
и только тогда, когда
.
Для
выпуклого
программирования можно предложить, по аналогии с линейным
программированием,
два способа построения геометрической интерпретации рассматриваемых
задач: в
пространстве переменных x
и
в пространстве значений функций
и
.
При
интерпретации задачи в исходном пространстве Rn
переменного х мы вводим множества
,
каждое из которых является выпуклым. Множество X
допустимых решений
исходной задачи тогда является пересечением множеств X
(следовательно,
также выпукло). Целевая функция
интерпретируется
в виде однопараметрического семейства вложенных множеств
![]()
Ясно,
что если
,
то
.
Тогда
задача состоит в отыскании минимального из тех
значений параметра
,
при которых
еще
пересекается с
множеством X:
.
(рис.
11.2).

Рисунок. 11.2 – Геометрическая интерпретация задачи выпуклого программирования, ![]()
Иной
способ геометрической интерпретации мы получаем,
обобщая для рассматриваемой задачи схему интерпретации двойственных
задач. Для
этого запишем полученную задачу минимизации параметра
в
другой форме:

и
сведем эти неравенства к равенствам, добавляя вспомогательные
неотрицательные переменные
.
Задача принимает вид

Для
полученного вектора
введем
вектор-функцию
:

и два геометрических объекта:
1) ось

2) выпуклое множество
![]()
Тогда
геометрическая интерпретация рассматриваемой задачи
состоит в следующем. Пусть вектор
вместе
с некоторым
задают
допустимое
решение задачи. Тогда по построению задачи точка
лежит
в множестве
и
на оси
,
т.е.

При
этом верно и обратное: если точка w
принадлежит
,
то существуют такие
и
неотрицательные
,
что
для
,
при этом ![]()
В
результате получаем следующую геометрическую
формулировку рассматриваемой задачи: среди точек пересечения оси В
с
множеством W найти ту, которая лежит на оси В
как можно «ниже»,
т. е. у которой координата wm+1
минимальна.
11.2 Критерии оптимальности в задачах выпуклого программирования
В
предположении, что все функции
и
дифференцируемы,
для рассматриваемой задачи существует признак оптимальности, который
тесно
примыкает, с одной стороны, к аналогичному утверждению линейного
программирования, а с другой — к классическому утверждению
математического
анализа для задач на условный экстремум.
Теорема
(достаточное условие оптимальности).
Пусть
и
нашлись такие числа
,
что
(11.1)
(11.2)
(11.3)
Тогда х* — оптимальное решение рассматриваемой задачи выпуклого программирования.
Легко видеть, что в случае линейности функций приведенная формулировка просто повторяет признак оптимальности, полученный нами в линейном программировании. При этом будем иметь, что у* — это двойственные переменные, а (11.2) — это условие дополняющей нежесткости.
Условия
теоремы допускают естественную геометрическую
интерпретацию: вектор
должен
содержаться в конической оболочке векторов
,
отвечающих ограничениям, активным в точке х*. Для
задачи, изображенной
на рис. 11.2, таковыми будут 2-е и 3-е ограничения (и поэтому
).
Как
мы уже знаем, для задач
линейного программирования сформулированный признак оптимальности
справедлив не
только как достаточный, но и как необходимый. Однако при переходе к
задачам
выпуклого программирования это уже не верно, т.е. если не предполагать
каких-либо дополнительных условий, сформулированный признак не является
необходимым для оптимальности точки х*.
Дополнительные условия,
обеспечивающие его необходимость, называются условиями
регулярности.
Приведем два таких условия, выделив активные в заданной точке
ограничения:
![]()
Первое
условие регулярности:
градиенты
линейно
независимы.
Второе
условие регулярности:
найдется точка
такая,
что
.
Теорема (необходимое условие оптимальности). Если выполнено любое из условий регулярности, то сформулированный признак оптимальности является необходимым, т. е. для оптимальной точки х* обязательно найдутся числа у*, удовлетворяющие условиям (11.1) — (11.3).
Сопоставляя полученный признак оптимальности с аналогичным результатом для классических задач на условный экстремум при наличии уравнений, видим, что они весьма близки: в обоих случаях признак состоит в разложимости градиента минимизируемой функции через градиенты ограничений, но в случае задач выпуклого программирования, когда условия задачи являются неравенствами, добавляется требование на знак коэффициентов разложения (множителей Лагранжа) у*, а также требование, чтобы в разложении участвовали лишь градиенты активных ограничений (условие дополняющей нежесткости — коэффициенты для прочих ограничений равны нулю). В то же время следует подчеркнуть, что для задач выпуклого программирования полученный признак является всегда достаточным условием оптимальности, чего нет, вообще говоря, в случае классических задач на условный экстремум.
Закончим рассмотрение темы иным вариантом признака оптимальности, который также характеризует связь указанных классов задач и основан на рассмотрении классической конструкции — функции Лагранжа. Рассматривая
, как новые переменные, сопоставим исходной задаче функцию
Лагранжа

Теорема
Куна – Таккера.
Для оптимальности вектора х* в рассматриваемой
задаче выпуклого
программирования достаточно, чтобы нашелся вектор
такой,
что точка
является
седловой точкой функции
Лагранжа, т.е.
![]()
При выполнении условия регулярности этот признак является и необходимым: для оптимального решения х* задачи обязательно найдется у*такой, что точка (х*,у*) будет седловой точкой функции Лагранжа.
Замечание. В данной формулировке не уточнен тип условия регулярности. Если рассматривать задачу при условии дифференцируемости функций, то теорема, справедлива при выполнении любого из приведенных условий регулярности. Но теорема верна и для более широкого класса задач, когда от функций требуется лишь выпуклость, но не требуется их дифференцируемость. В этом случае нужно исключить первое условие регулярности, использующее градиенты указанных функций.