MATLAB implementation for verifying 1st and 2nd order KKT optimality conditions. This tool automates the combinatorial check of all possible active and inactive constraint sets for first-order conditions and evaluates the Hessian of the Lagrangian for second-order conditions in constrained optimization problems.
As condições de Karush-Kuhn-Tucker (KKT) são um conjunto de critérios necessários para que uma solução em um problema de otimização não-linear seja ótima. Elas generalizam o método dos multiplicadores de Lagrange para incluir restrições de desigualdade. Para um ponto ser considerado um mínimo local (sob certas condições de regularidade), ele deve satisfazer as condições KKT de primeira ordem. As condições de segunda ordem são então utilizadas para verificar se esse ponto é de fato um mínimo (ou máximo).
O seguinte problema de programação quadrática foi usado de exemplo para os scripts nesse repositório:
As condições de primeira ordem estabelecem uma relação entre o gradiente da função objetivo e os gradientes das restrições ativas no ponto ótimo. Elas incluem:
- Estacionariedade: O gradiente do Lagrangiano deve ser nulo.
- Viabilidade Primal: Todas as restrições devem ser satisfeitas.
-
Viabilidade Dual: Os multiplicadores de Lagrange associados às restrições de desigualdade devem ser não-negativos (
$\mu_i \ge 0$ ). -
Folga Complementar: O produto de cada multiplicador de Lagrange pela sua respectiva restrição de desigualdade deve ser zero (
$\mu_i g_i(x) = 0$ ).
Para escrever as condições necessárias de KKT, temos que derivar o Lagrangiano dado por:
Assim, as condições necessárias de KKT de primeira ordem são:
Dessa forma, com 7 restrições de desigualdade teremos
Este script automatiza completamente a verificação das condições KKT de primeira ordem. Em vez de testar manualmente todas as combinações, o código gera e resolve sistematicamente os sistemas de equações para cada caso, identificando todos os pontos que satisfazem as condições necessárias de otimalidade.
Neste caso, a solução fornecida pelo script é única:
Uma vez que uma solução é encontrada pelas condições necessárias de KKT de primeira ordem, as condições de segunda ordem são usadas para classificá-lo. A condição suficiente de segunda ordem para um mínimo/máximo global exige que a matriz Hessiana do Lagrangiano seja definida positiva/negativa no subespaço do plano tangente
A análise requer a projeção desta matriz no subespaço definido pelos gradientes das restrições ativas e a verificação dos autovalores da matriz resultante.
Este script implementa a verificação da condição de segunda ordem. Ele testa a definição da Hessiana do Lagrangiano no subespaço do plano tangente
No exemplo, como é necessário que
Substituindo
Os autovalores da matriz são:
Portanto, para second_order_KKT.m nos fornece a informação que a Hessiana de
[1] [Bazaraa, 1993] M.S. Bazaraa, H.D. Sherali, C.M. Shetty, Nonlinear Programming, 2nd Ed., John Wiley, 1993.
[2] [Bertsekas, 1999] Dimitri P. Bertsekas. Nonlinear Programming. Athena Scientific. 2nd Ed., 1999.
[3] [Antoniou, 2007] Antoniou, A. and Lu, W.S. Practical Optimization: Algorithms and Engineering Applications, Springer, 2007
[4] [Vanderbei, 2012] Robert J. Vanderbei. Linear Programming: Foundations and Extensions, Fourth Ed., 2012, Springer
[5] [Luenberger 2008] D.G. Luenberger, Y. Ye, Linear and Nonlinear Programming, Third Ed., Addison Wesley, 2008, Springer