Class CombinedConstraint

java.lang.Object
de.labathome.trustconstr.CombinedConstraint
All Implemented Interfaces:
Constraint, Jacobian

public final class CombinedConstraint extends Object implements Constraint, Jacobian
Concatenation of several LinearConstraint / NonlinearConstraint objects into a single Constraint + Jacobian that the orchestrator can pass straight to EqualityConstrainedSQP.eqSQP(de.labathome.trustconstr.interfaces.IFunctionAndConstraint, de.labathome.trustconstr.interfaces.IGradientAndJacobian, de.labathome.trustconstr.interfaces.LagrangeHessian, de.labathome.trustconstr.matrix.Matrix, double, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.interfaces.StoppingCriterion, de.labathome.trustconstr.records.State, double, double, de.labathome.trustconstr.enums.ProjectionMethod, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.interfaces.LinearOperator) or TrustRegionInteriorPoint.trustRegionInteriorPoint(java.util.function.ToDoubleBiFunction<de.labathome.trustconstr.matrix.Matrix, java.lang.Object>, java.util.function.BiFunction<de.labathome.trustconstr.matrix.Matrix, java.lang.Object, de.labathome.trustconstr.matrix.Matrix>, de.labathome.trustconstr.interfaces.LagrangeHessian, int, int, int, de.labathome.trustconstr.interfaces.Constraint, de.labathome.trustconstr.interfaces.Jacobian, de.labathome.trustconstr.matrix.Matrix, double, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.interfaces.GlobalStoppingCriteria, boolean[], double, de.labathome.trustconstr.records.State, double, double, double, double, de.labathome.trustconstr.enums.ProjectionMethod).

The combined constraint stacks all equality rows from all sources, then all inequality rows from all sources. This mirrors scipy's CanonicalConstraint.concatenate on a smaller scale (without the Hessian-of-Lagrangian aggregation, which the orchestrator currently doesn't use for nonlinear constraints).

Each input must implement both Constraint and Jacobian and expose its nEq() / nIneq() via the value-class types LinearConstraint or NonlinearConstraint.

  • Constructor Details

    • CombinedConstraint

      public CombinedConstraint(List<C> sources, int nVars)
      Convenience constructor accepting a List of source constraints.
      Type Parameters:
      C - element type of sources
      Parameters:
      sources - element type must be LinearConstraint or NonlinearConstraint
      nVars - number of decision variables
    • CombinedConstraint

      public CombinedConstraint(Object[] sources, int nVars)
      Parameters:
      sources - mix of LinearConstraint and NonlinearConstraint instances; rows are concatenated in declaration order
      nVars - number of decision variables
  • Method Details

    • nEq

      public int nEq()
      Returns:
      total number of equality rows across all sources
    • nIneq

      public int nIneq()
      Returns:
      total number of canonical inequality rows across all sources
    • enforceFeasibilityIneq

      public boolean[] enforceFeasibilityIneq()
      Concatenated per-canonical-inequality-row enforceFeasibility flags across all sources, in the same order they appear in constrIneq(Matrix). Length matches nIneq().
      Returns:
      per-row strict-feasibility flags, length nIneq()
    • validateKeepFeasibleAtStart

      public void validateKeepFeasibleAtStart(Matrix x0)
      Walk all sources and validate that any row marked keep_feasible=True is satisfied at x0. Throws IllegalArgumentException on the first violation.
      Parameters:
      x0 - starting iterate (n x 1)
    • constrEq

      public Matrix constrEq(Matrix x)
      Specified by:
      constrEq in interface Constraint
      Parameters:
      x - current iterate (n &times; 1)
      Returns:
      equality-constraint residual (nEq &times; 1)
    • constrIneq

      public Matrix constrIneq(Matrix x)
      Specified by:
      constrIneq in interface Constraint
      Parameters:
      x - current iterate (n &times; 1)
      Returns:
      inequality-constraint residual (nIneq &times; 1); feasible iff every entry is &le; 0
    • jacEq

      public Matrix jacEq(Matrix x)
      Specified by:
      jacEq in interface Jacobian
      Parameters:
      x - current iterate (n &times; 1)
      Returns:
      Jacobian of constr_eq at x (nEq &times; n)
    • lagrangianContribution

      public Matrix lagrangianContribution(Matrix x, double[] vEq, double[] vIneq)
      Sum of constraint-Hessian-of-Lagrangian contributions across all sources. Walks the constraint list, slices vEq/vIneq into the portions that belong to each source (in declaration order), and sums the resulting Hessians.
      Parameters:
      x - iterate (n x 1)
      vEq - equality multipliers, length nEq()
      vIneq - inequality multipliers, length nIneq()
      Returns:
      summed n x n constraint Hessian, or null if no source contributes (e.g. every source is a LinearConstraint, which has zero Hessian)
    • jacIneq

      public Matrix jacIneq(Matrix x)
      Specified by:
      jacIneq in interface Jacobian
      Parameters:
      x - current iterate (n &times; 1)
      Returns:
      Jacobian of constr_ineq at x (nIneq &times; n)