ReducedKKTMatrix

class kona.linalg.matrices.hessian.ReducedKKTMatrix(vector_factories, optns=None)[source]

Bases: kona.linalg.matrices.hessian.basic.BaseHessian

Reduced approximation of the KKT matrix using a 2nd order adjoint formulation.

For problems with only equality constraints, the KKT system is given as:

\[\begin{split}\begin{bmatrix} \nabla_x^2 \mathcal{L} && \nabla_x c^T \\ \nabla_x c_{eq} && 0 \end{bmatrix} \begin{bmatrix} \Delta x \\ \Delta \lambda \end{bmatrix} = \begin{bmatrix} -\nabla_x \mathcal{f} - \lambda^T \nabla_x c \\ - c \end{bmatrix}\end{split}\]

where \(\mathcal{L}\) is the Lagrangian defined as:

\[\mathcal{L}(x, u(x), \lambda) = F(x, u(x)) + \lambda^T c(x, u(x))\]

For problems with inequality constraints, slack variables \(s\) are introduced alongside a log-barrier term for non-negativity, such that the Lagrangian \(\mathcal{L}\) becomes:

\[\mathcal{L}(x, u(x), \lambda) = F(x, u(x)) + \lambda_{eq}^T c_{eq}(x, u(x)) + \lambda_{ineq}^T \left[c_{ineq}(x, u(x)) - s\right] + \frac{1}{2}\mu\sum_{i=1}^{n_{ineq}}ln(s_i)\]

The inequality constrained KKT system is then defined as:

\[\begin{split}\begin{bmatrix} \nabla_x^2 \mathcal{L} && 0 && \nabla_x c_{eq}^T && \nabla_x c_{ineq}^T \\ 0 && \Sigma && 0 && I \\ \nabla_x c_{eq} && 0 && 0 && 0 \\ \nabla_x c_{ineq} && I && 0 && 0 \end{bmatrix} \begin{bmatrix} \Delta x \\ \Delta s \\ \Delta \lambda_{eq} \\ \Delta \lambda_{ineq} \end{bmatrix} = \begin{bmatrix} -\nabla_x \mathcal{f} - \lambda_{eq}^T \nabla_x c_{eq} -\lambda_{eq}^T \nabla_x c_{eq} \\ \lambda^T \mu * S^{-1}e \\ - c_{eq} \\ - c_{ineq} + s \end{bmatrix}\end{split}\]

Note

Currently, Kona does not have any optimization algorithms that support inequality constraints. The slack implementation in this matrix is part of an ongoing development effort to support inequality constraints at a future date.

Variables:
  • product_tol (float) – Tolerance for 2nd order adjoint system solutions.
  • grad_scale, feas_scale (scale,) – Optimality metric normalization factors.
  • krylov (KrylovSolver) – A krylov solver object used to solve the system defined by this matrix.
  • dRdU, dCdX, dCdU (dRdX,) – Various abstract jacobians used in calculating the mat-vec product.
linearize(at_kkt, at_state, at_adjoint, obj_scale=1.0, cnstr_scale=1.0)[source]

Linearize the KKT matrix at the given KKT, state, adjoint and barrier point. This method does not perform any factorizations or matrix operations.

Parameters:
  • at_kkt (ReducedKKTVector) – KKT vector at which the product is evaluated
  • at_state (StateVector) – State point at which the product is evaluated.
  • at_adjoint (StateVector) – 1st order adjoint variables at which the product is evaluated.
  • obj_scale (float, optional) – Factor by which the objective component of the product is scaled.
  • cnstr_scale (float, optional) – Factor by which the constraint component of the product is scaled.
product(in_vec, out_vec)[source]

Matrix-vector product for the reduced KKT system.

Parameters:
set_krylov_solver(krylov_solver)[source]