Штрафные функции

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

Метод штрафных функций заменяет условную задачу безусловной $\min f(x)+\rho\,P(x)$, где $P(x)\ge0$ растёт при нарушении ограничений, а $\rho$ — вес штрафа.

Идея: запретить нарушения «деньгами»

У нас уже есть мощные безусловные методы (градиентный спуск, Ньютон). Хочется применить их к задачам с ограничениями. Штрафной подход прост: добавим к цели слагаемое, которое равно нулю в допустимой области и быстро растёт при выходе из неё. Тогда минимизатор «не захочет» нарушать ограничения, и безусловный метод сам останется внутри.

Квадратичный штраф

Для ограничения-равенства $g(x)=0$ берут

$$P(x)=g(x)^2,\qquad F_\rho(x)=f(x)+\rho\,g(x)^2.$$

Для неравенства $g(x)\le0$ — односторонний штраф $P(x)=\max(0,g(x))^2$: ноль, пока ограничение выполнено, и квадрат превышения, когда нарушено. Чем больше $\rho$, тем строже запрет.

Реализация

Решим: $\min f(x,y)=x^2+y^2$ при ограничении $x+y=2$ (минимум квадрата расстояния до начала на прямой; ответ — $x=y=1$, $f=2$). Штрафная задача: $F_\rho=x^2+y^2+\rho(x+y-2)^2$, минимизируем градиентным спуском при растущем $\rho$.

def grad_F(x, y, rho):
    c = x + y - 2
    gx = 2 * x + 2 * rho * c
    gy = 2 * y + 2 * rho * c
    return gx, gy

def minimize(rho, steps=4000):
    x, y = 0.0, 0.0
    alpha = 0.4 / (1 + 2 * rho)        # шаг адаптируем под жёсткость штрафа
    for _ in range(steps):
        gx, gy = grad_F(x, y, rho)
        x -= alpha * gx
        y -= alpha * gy
    return x, y

for rho in [1, 10, 100, 1000]:
    x, y = minimize(rho)
    viol = abs(x + y - 2)
    print(f"rho={rho:5d}: x={x:.4f} y={y:.4f} нарушение|x+y-2|={viol:.4f}")

Вывод:

rho=    1: x=0.6667 y=0.6667 нарушение|x+y-2|=0.6667
rho=   10: x=0.9524 y=0.9524 нарушение|x+y-2|=0.0952
rho=  100: x=0.9950 y=0.9950 нарушение|x+y-2|=0.0100
rho= 1000: x=0.9995 y=0.9995 нарушение|x+y-2|=0.0010

При малом $\rho$ решение «срезает угол», нарушая ограничение ради уменьшения $f$. По мере роста $\rho$ нарушение тает, и решение сходится к точному $x=y=1$. Это типичная схема: решать последовательность задач с растущим $\rho$, стартуя каждую из решения предыдущей.

Внешние и внутренние штрафы

ТипИдеяГде минимум
Внешний штраф$\rho\max(0,g)^2$ — штраф снаружиПодходит к границе снаружи
Барьерный (внутренний)$-\dfrac{1}{\rho}\ln(-g)$ — стена изнутриДержится строго внутри

Барьерные функции (логарифмический барьер) не пускают к границе вовсе, создавая бесконечную «стену» при $g\to0$. На них построены методы внутренней точки — те самые, что решают возмущённую систему ККТ.

Как работает под капотом

У чистого штрафа есть подвох: точное удовлетворение ограничения требует $\rho\to\infty$, а это делает задачу плохо обусловленной (овраг становится экстремальным, спуск буксует). Лекарство — метод расширенного Лагранжиана (ALM): к штрафу добавляют лагранжев член $-\lambda g(x)$ и обновляют $\lambda$ между итерациями. Тогда точное решение достигается при конечном $\rho$, без катастрофической обусловленности. Это стандарт для серьёзных условных солверов.

Частые ошибки

  • Сразу взять огромный $\rho$. Задача станет плохо обусловленной; наращивайте $\rho$ постепенно.
  • Двусторонний штраф для неравенства. Для $g\le0$ штрафовать надо только превышение $\max(0,g)$, а не сам $g$.
  • Ждать точного нуля нарушения при конечном $\rho$. Чистый штраф даёт лишь приближение; для точности нужен расширенный Лагранжиан.

Итоги

  • Штраф превращает условную задачу в безусловную: $\min f+\rho P$, $P$ карает нарушения.
  • Решают последовательность задач с растущим $\rho$; нарушение уменьшается как $\sim1/\rho$.
  • Большой $\rho$ портит обусловленность — лучше расширенный Лагранжиан (точность при конечном $\rho$).
Проверьте себя
1. Что делает метод штрафных функций?
AУдаляет целевую функцию
BДобавляет к цели штраф за нарушение, превращая условную задачу в безусловную
CЛинеаризует ограничения
DСчитает гессиан
2. Как штрафовать ограничение-неравенство $g(x)\le0$?
A$\rho g(x)^2$
B$\rho\max(0,g(x))^2$ — только превышение
C$\rho g(x)$
DНе штрафовать
3. Чем плох слишком большой штрафной вес $\rho$?
AНичем
BЗадача становится плохо обусловленной и спуск буксует
CОграничение нарушается сильнее
DЦелевая функция исчезает