Если Вы когда-то учились в вузе на технической специальности или учитесь сейчас (иначе, зачем бы Вам эта статья), у Вас наверняка есть предмет, который назывался примерно так — «Методы оптимизации» / «Введение в оптимизацию» или что-то похожее. Задачки там примерно такие: «завод производит продукцию типов, как бы произвести
деталей первого типа, ...,
деталей
-го и как можно дешевле». Потом рассказывалось про симплекс-метод для задач линейного программирования и про метод Лагранжа для задач нелинейного. Про указанные выше условия где-то упоминается, но без примеров, где-то сразу абстрактные примеры с матрицами, а может быть Ваш препод и вовсе написал в своей методичке, мол, это выходит за рамки курса. В этой статье предлагаю аккуратно разжевать на простом примере, что такое условия Каруша–Куна–Таккера (ККТ).
Что нам позволяют найти условия ККТ
Проверка условий ККТ позволяет решить условную задачу оптимизации, как линейную так и нелинейную, с ограничениями типа равенств и неравенств. Можно сказать, что ККТ это почти универсальный метод, позволяющий решить большинство «адекватных» задач. Какие задачи мы относим к адекватным, разберем чуть позже. А пока сформулируем задачу математического программирования в следующем виде:
На всякий случай поясним: здесь написано, что есть некая функция, зависящая от вектора , которую нужно минимизировать. Также, есть
ограничений-неравенств и
ограничений-равенств. Это не единственная форма записи: можно искать максимум, может не быть какого-то из типов ограничений, но обычно задачу рассматривают именно в таком виде, либо же приводят к данному виду.
Последовательность действий, при решении с помощью ККТ
Запись задачи в указанном виде
Проверка регулярности
Составление функции Лагранжа
Запись условий ККТ
Поиск стационарных точек
Проверка достаточных условий
Пример. Собираем вискас (A Blending Problem)
Возьмем простой пример и шаг за шагом проверим все пункты.
Задача взята из документации к библиотеке PuLP (очень, кстати, полезная штука).
Надо собрать пачку вискаса из курицы и говядины
так, чтобы содержащиеся в них протеин, жиры, клетчатка и соль удовлетворяли ограничениям, а стоимость одной пачки была как можно меньше.
Задача:
such that |
вес содержимого каждой пачки 100 г. |
||
не менее 8 г. протеина |
|||
не менее 6 г. жиров |
|||
не более 2 г. клетчатки |
|||
не более 0.4 г. соли |
Запишем задачу в указанном виде. В нашем случае задача уже на минимум, однако необходимо переписать ограничения и
с противоположным знаком. Также, хоть это явно и не прописано в условиях задачи, надо иметь ввиду, что по смыслу
и
неотрицательны, это тоже надо учесть как отдельные ограничения-неравенства. Из всего сказанного выше получаем:
such that |
||
Запись задачи в указанном виде
Регулярность. Выше было сказано, что задача должна быть «адекватной». Так вот, математики называют это условием регулярности. Дать строгое определение регулярности труднее, чем просто проверить, что она есть. Но, неформально, ChatGPT даёт следующее объяснение:
Регулярность — это когда в задаче нет «плохих» ситуаций: ограничения не противоречат друг другу, границы не «слиплись» слишком странно, и можно чётко различить допустимую область и направление улучшения целевой функции.
Существует три основных критерия регулярности:
Независимость градиентов активных ограничений (об активных ограничения скажем ниже);
Условие Слейтера;
Все ограничения — линейные функции.
Нам достался самый простой случай, когда все ограничения линейные. Условие регулярности выполнено.
Запись задачи в указанном видеПроверка регулярности
Составление функции Лагранжа
Условия ККТ несколько расширяют функцию Лагранжа. Обычно, она используется в случае, если в задаче присутствуют только ограничения-равенства. В нашем же случае, имеют место как равенства, так и неравенства. Расширенная функция Лагранжа выглядит так:
Здесь «лямбда» и «мю» — множители Лагранжа. По соглашению, множители, относящиеся к неравенствам, обозначают буквой «лямбда», а множители для равенств буквой «мю». Но, что более важно, «лямбды» — действительные неотрицательные числа, а «мю» могут быть любые. Запишем функцию Лагранжа для нашей задачи:
Лагранж готов. Галочка.
Запись задачи в указанном видеПроверка регулярностиСоставление функции Лагранжа
Условия ККТ
Ну вот, добрались до самого интересного. Прежде чем запишем сами условия, отметим один важный момент. ККТ — необходимые условия. Т.е., если мы найдем такую точку и такие множители Лагранжа, что они будут удовлетворять всем условиям, значит мы нашли точку — кандидат на оптимальность. Является ли она оптимальной, это еще нужно будет проверить с помощью достаточных условий. Но это последний пункт нашего списка. Итак, теорема:
Пусть для задачи математического программирования выполнено условие регулярности. Тогда, если
— локальный минимум, то найдутся такие
и
, что выполнены следующие условия:
Стационарность
Дополняющая нежёсткость
Неотрицательность
Теперь, вооружившись этими условиями, будем искать стационарные точки. Найдем градиент лагранжиана по переменным и приравняем к нулю:
А дальше смотрим на второе условие. Оно, очевидно, означает следующее: для каждого ограничения-неравенства либо само неравенство равно нулю, либо соответствующий множитель Лагранжа равен нулю. Если неравенство в точке обращается в нуль, это ограничение называется активным. Ограничения-равенства активны всегда. Геометрически активность интуитивно правильно понимается: именно эти ограничения участвуют в решении, а там где они пересекаются и находится точка оптимума. Посмотрим на нашу задачу (благо переменных всего две).

Видим, что не выполнить ограничение довольно сложно, да и ограничение-равенство сильно сужает область поиска. Давайте временно забудем про
и немного приблизим график. Точка оптимума находится на пересечении равенства и ограничения
. Итак, пара ограничений
— активные ограничения.

Но как бы мы искали активные ограничения в n-мерном пространстве? Да, пришлось бы заниматься комбинаторикой. В n-мерном пространстве, в худшем случае, пришлось бы перебрать комбинаций, для каждой комбинации проверить стационарность, неотрицательность и выполнение ограничений. Если есть ограничения-равенства, перебор упрощается, т.к. равенства всегда активны. Поэтому, действуя вслепую, в нашей задаче пришлось бы перебрать комбинации
. И если мы их переберем, то убедимся, что везде, кроме
, что-то не выполняется: или множители Лагранжа отрицательны, или не выполняется система ограничений в найденной точке. Заметим также, что если в n-мерном пространстве задано
равенств, все эти танцы с бубном, т.е. выписыванием лагранжиана и проверкой регулярности не имеют смысла. Если решение существует, то оно единственно и находится из решения системы равенств (останется только проверить выполнение ограничений-неравенств). Но это рассуждение справедливо только для случая линейных ограничений.
Вернемся к нашей задаче и найдем точку оптимума аналитически. Мы знаем, что активны ограничения и
. Значит, в функции Лагранжа
— неотрицательна, ограничение
равно нулю, остальные множители также равны нулю. Из этих соображений запишем систему:
Решение системы: .
Теперь из той же системы уравнений найдем соответствующие множители Лагранжа.
Решая систему, находим:
Для полной ясности запишем
.
Вот она, точка, в которой выполняются все условия ККТ: градиенты по в найденной точке равны нулю, условия дополняющей нежесткости выполнены, найденная «лямбда» больше нуля (на «мю» такое ограничение не накладывалось). Ставим сразу две галочки.
Запись задачи в указанном видеПроверка регулярностиСоставление функции ЛагранжаЗапись условий ККТПоиск стационарных точек
Теперь осталось проверить, что выполняется достаточное условие. В нашем случае проверка весьма условная. Достаточное условие звучит так:
Если исходная задача выпуклая, а для стационарной точки выполнены условия ККТ, то
— глобальный минимум.
Это именно наш случай: у нас все функции линейны, а значит выпуклы, а значит задача тоже выпуклая. Ну вот и всё, ставим последнюю галочку.
Запись задачи в указанном видеПроверка регулярностиСоставление функции ЛагранжаЗапись условий ККТПоиск стационарных точекПроверка достаточных условий
Не такое уж и страшное это ваше ККТ. Хотя, в нелинейном случае, возможно, пришлось бы немного повозиться с проверками регулярности и достаточным условием.
Мне показалось, что с конкретным численным примером и пошаговым решением в интернете есть проблемы, а тема не самая простая — надо поразбираться. Так пусть будет на один пример больше. Спасибо всем, кто дочитал, надеюсь, кому-то стало понятнее.
Источники:
Курс лекций МФТИ «Введение в теорию выпуклой оптимизации»
И.Л.Акулич. «Математическое программирование в примерах и задачах»
Practical Mathematical Optimization by Jan A.Snyman, Daniel N.Wilke
https://coin-or.github.io/pulp/CaseStudies/a_blending_problem.html
kompilainenn2
Учился на технической специальности, ничего даже близко похожего не было
Krawler
Оно еще может называться "Исследование операций". У нас такое было