Class MinimizeTrustConstr
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <C extends Constraint & Jacobian>
OptimizeResultminimize(Function<Matrix, Double> fun, Matrix x0, C constraint, int maxIter, double xtol, double gtol) Most general convenience overload: only the objective function is supplied.static <C extends Constraint & Jacobian>
OptimizeResultminimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, HessianUpdateStrategy strategy, Matrix x0, C constraint, int maxIter, double xtol, double gtol) Convenience overload accepting anyHessianUpdateStrategy(BFGS, SR1, custom).static <C extends Constraint & Jacobian>
OptimizeResultminimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Matrix x0, C constraint, int maxIter, double xtol, double gtol) Convenience overload that approximates the objective Hessian via a freshBFGSupdate strategy -- the scipy-default behaviour whenhessis omitted from the user call.static <C extends Constraint & Jacobian>
OptimizeResultminimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Function<Matrix, Matrix> hess, Matrix x0, C constraint, int maxIter, double xtol, double gtol) General-purpose entry point: routes tominimizeEqualityConstrained(java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, java.lang.Double>, java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix>, java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix>, de.labathome.trustconstr.matrix.Matrix, C, int, double, double)when the constraint has only equality rows, and to aTrustRegionInteriorPoint-driven path when any inequality rows are present.static OptimizeResultminimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Function<Matrix, Matrix> hess, Matrix x0, Object[] constraints, int maxIter, double xtol, double gtol) Multi-constraint entry point: combines the supplied constraints into aCombinedConstraintand dispatches as inthe single-constraint overload.static <C extends Constraint & Jacobian>
OptimizeResultminimizeEqualityConstrained(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Function<Matrix, Matrix> hess, Matrix x0, C eq, int maxIter, double xtol, double gtol) Convenience entry point covering the equality-constrained slice of the trust-constr API: a scalar objective with an explicit gradient and Hessian, subject to optional pure-equality constraints from a singleLinearConstraintorNonlinearConstraint.static OptimizeResultminimizeTrustConstr(ToDoubleBiFunction<Matrix, Object> fun, Matrix x0, Object args, BiFunction<Matrix, Object, Matrix> grad, BiFunction<Matrix, Object, Matrix> hess, HessianProduct hessp, Bounds bounds, Object constraints, double xTol, double gTol, double barrierTol, Optional<Boolean> sparseJacobian, IterationCallback callback, int maxIter, int verbose, Matrix finiteDifferenceRelStep, double initialConstraintPenalty, double initialTrustRadius, double initialBarrierParameter, double initialBarrierTolerance, ProjectionMethod factorizationMethod, boolean disp) Minimize a scalar function subject to constraints.static OptimizeResultminimizeTrustConstr(ToDoubleBiFunction<Matrix, Object> fun, Matrix x0, Object args, BiFunction<Matrix, Object, Matrix> grad, BiFunction<Matrix, Object, Matrix> hess, HessianProduct hessp, Bounds bounds, Object constraints, double xTol, double gTol, double barrierTol, Optional<Boolean> sparseJacobian, IterationCallback callback, int maxIter, int verbose, Matrix finiteDifferenceRelStep, double initialConstraintPenalty, double initialTrustRadius, double initialBarrierParameter, double initialBarrierTolerance, ProjectionMethod factorizationMethod, boolean disp, ExecutorService workers) Strict scipy_minimize_trustregion_constr(..., workers=N)counterpart.static StateupdateState(State state, Matrix x, boolean lastIterationFailed, ScalarFunction objective, PreparedConstraint[] preparedConstraints, long startTime, double trustRadius, double constraintPenalty, CGInfo cgInfo) Refresh the equality-pathStaterecord after an outer iteration (the function value, gradient, optimality, constraint violation, trust-region and CG fields).static StateIPupdateStateIP(StateIP state, Matrix x, boolean lastIterationFailed, ScalarFunction objective, PreparedConstraint[] preparedConstraints, long startTime, double trustRadius, double constraintPenalty, CGInfo cgInfo, double barrierParameter, double barrierTolerance) Refresh the IP-pathStateIPrecord after an outer iteration: delegates toupdateState(de.labathome.trustconstr.records.State, de.labathome.trustconstr.matrix.Matrix, boolean, de.labathome.trustconstr.ScalarFunction, de.labathome.trustconstr.records.PreparedConstraint[], long, double, double, de.labathome.trustconstr.records.CGInfo)and then sets the barrier-specific fields.
-
Constructor Details
-
MinimizeTrustConstr
public MinimizeTrustConstr()
-
-
Method Details
-
updateState
public static State updateState(State state, Matrix x, boolean lastIterationFailed, ScalarFunction objective, PreparedConstraint[] preparedConstraints, long startTime, double trustRadius, double constraintPenalty, CGInfo cgInfo) Refresh the equality-pathStaterecord after an outer iteration (the function value, gradient, optimality, constraint violation, trust-region and CG fields).- Parameters:
state- outer-iteration state to updatex- current iteratelastIterationFailed- whether the previous step was rejectedobjective- wrapped objective providing eval-count metadatapreparedConstraints- prepared constraint recordsstartTime- wall-clockSystem.nanoTime()at the start of the runtrustRadius- current trust-region radiusconstraintPenalty- current merit-function penaltycgInfo- info from the projected-CG inner solve- Returns:
- the same
stateafter the in-place mutation
-
updateStateIP
public static StateIP updateStateIP(StateIP state, Matrix x, boolean lastIterationFailed, ScalarFunction objective, PreparedConstraint[] preparedConstraints, long startTime, double trustRadius, double constraintPenalty, CGInfo cgInfo, double barrierParameter, double barrierTolerance) Refresh the IP-pathStateIPrecord after an outer iteration: delegates toupdateState(de.labathome.trustconstr.records.State, de.labathome.trustconstr.matrix.Matrix, boolean, de.labathome.trustconstr.ScalarFunction, de.labathome.trustconstr.records.PreparedConstraint[], long, double, double, de.labathome.trustconstr.records.CGInfo)and then sets the barrier-specific fields.- Parameters:
state- outer-iteration IP state to updatex- current iteratelastIterationFailed- whether the previous step was rejectedobjective- wrapped objective providing eval-count metadatapreparedConstraints- prepared constraint recordsstartTime- wall-clockSystem.nanoTime()at the start of the runtrustRadius- current trust-region radiusconstraintPenalty- current merit-function penaltycgInfo- info from the projected-CG inner solvebarrierParameter- current log-barrier coefficientbarrierTolerance- current barrier-subproblem tolerance- Returns:
- the same
stateafter the in-place mutation
-
minimizeEqualityConstrained
public static <C extends Constraint & Jacobian> OptimizeResult minimizeEqualityConstrained(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Function<Matrix, Matrix> hess, Matrix x0, C eq, int maxIter, double xtol, double gtol) Convenience entry point covering the equality-constrained slice of the trust-constr API: a scalar objective with an explicit gradient and Hessian, subject to optional pure-equality constraints from a singleLinearConstraintorNonlinearConstraint.This is a focused subset of
scipy.optimize.minimize(method='trust-constr')intended for problems where every constraint row is an equality (lb[i] == ub[i]). It dispatches toEqualityConstrainedSQP.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)directly without the full canonical-form constraint pipeline. Callers with inequalities,Bounds, multiple constraints, or finite-difference Hessians/Jacobians should wait for the fullminimizeTrustConstr(java.util.function.ToDoubleBiFunction<de.labathome.trustconstr.matrix.Matrix, java.lang.Object>, 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>, java.util.function.BiFunction<de.labathome.trustconstr.matrix.Matrix, java.lang.Object, de.labathome.trustconstr.matrix.Matrix>, de.labathome.trustconstr.interfaces.HessianProduct, de.labathome.trustconstr.records.Bounds, java.lang.Object, double, double, double, java.util.Optional<java.lang.Boolean>, de.labathome.trustconstr.interfaces.IterationCallback, int, int, de.labathome.trustconstr.matrix.Matrix, double, double, double, double, de.labathome.trustconstr.enums.ProjectionMethod, boolean)orchestrator.- Type Parameters:
C- constraint type, must implement bothConstraintandJacobian- Parameters:
fun- objective functionf : R^n -> Rgrad- analytic gradientg : R^n -> R^nhess- analytic HessianH : R^n -> R^{n x n}x0- initial point as a column vector (n x 1)eq- equality constraint, ornullfor unconstrained problems (the constraint object must satisfynIneq() == 0)maxIter- maximum number of outer iterationsxtol- stop whentrustRadius < xtolgtol- stop whenoptimality < gtolandconstrViolation < gtol- Returns:
- populated
OptimizeResult
-
minimize
public static <C extends Constraint & Jacobian> OptimizeResult minimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Function<Matrix, Matrix> hess, Matrix x0, C constraint, int maxIter, double xtol, double gtol) General-purpose entry point: routes tominimizeEqualityConstrained(java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, java.lang.Double>, java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix>, java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix>, de.labathome.trustconstr.matrix.Matrix, C, int, double, double)when the constraint has only equality rows, and to aTrustRegionInteriorPoint-driven path when any inequality rows are present. Pure unconstrained problems route through the equality path with an empty constraint set.Like
minimizeEqualityConstrained(java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, java.lang.Double>, java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix>, java.util.function.Function<de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix>, de.labathome.trustconstr.matrix.Matrix, C, int, double, double), this is a focused subset of the fullscipy.optimize.minimize(method='trust-constr')API: a singleLinearConstraintorNonlinearConstraint(ornull), noBounds, no callback, no finite-difference Hessians/Jacobians.- Type Parameters:
C- constraint type, must implement bothConstraintandJacobian- Parameters:
fun- objective functionf : R^n -> Rgrad- analytic gradientg : R^n -> R^nhess- analytic HessianH : R^n -> R^{nxn}x0- initial point (n x 1)constraint- single constraint ornullfor unconstrainedmaxIter- maximum outer iterationsxtol- stop whentrustRadius < xtolgtol- stop whenoptimality < gtolandconstrViolation < gtol- Returns:
- populated
OptimizeResult
-
minimize
public static <C extends Constraint & Jacobian> OptimizeResult minimize(Function<Matrix, Double> fun, Matrix x0, C constraint, int maxIter, double xtol, double gtol) Most general convenience overload: only the objective function is supplied. The gradient is approximated by 2-point finite differences and the Hessian by a fresh BFGS update strategy. Mirrors scipy's default behaviour when bothjacandhessare omitted.- Type Parameters:
C- constraint type, must implementConstraintandJacobian- Parameters:
fun- objective functionf : R^n -> Rx0- initial point (n x 1)constraint- single constraint ornullmaxIter- maximum outer iterationsxtol- stop whentrustRadius < xtolgtol- stop whenoptimality < gtolandconstrViolation < gtol- Returns:
- populated
OptimizeResult
-
minimize
public static <C extends Constraint & Jacobian> OptimizeResult minimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Matrix x0, C constraint, int maxIter, double xtol, double gtol) Convenience overload that approximates the objective Hessian via a freshBFGSupdate strategy -- the scipy-default behaviour whenhessis omitted from the user call.The BFGS update is driven manually inside the
lagrHessclosure: every time the SQP / IP outer loop asks for a fresh Lagrangian Hessian (i.e. after a successful step), we compare the current x and gradient to the previous values and callHessianUpdateStrategy.update(de.labathome.trustconstr.matrix.Matrix, de.labathome.trustconstr.matrix.Matrix)to refresh the approximation.- Type Parameters:
C- constraint type, must implementConstraintandJacobian- Parameters:
fun- objective functionf : R^n -> Rgrad- analytic gradientg : R^n -> R^nx0- initial point (n x 1)constraint- single constraint ornullmaxIter- maximum outer iterationsxtol- stop whentrustRadius < xtolgtol- stop whenoptimality < gtolandconstrViolation < gtol- Returns:
- populated
OptimizeResult
-
minimize
public static <C extends Constraint & Jacobian> OptimizeResult minimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, HessianUpdateStrategy strategy, Matrix x0, C constraint, int maxIter, double xtol, double gtol) Convenience overload accepting anyHessianUpdateStrategy(BFGS, SR1, custom). The strategy is updated by the orchestrator after each successful iteration; users typically passBFGS.FACTORY.build()orSR1.FACTORY.build().- Type Parameters:
C- constraint type, must implementConstraintandJacobian- Parameters:
fun- objective functionf : R^n -> Rgrad- analytic gradientstrategy- Hessian-update strategy (BFGS, SR1, ...)x0- initial point (n x 1)constraint- single constraint ornullmaxIter- maximum outer iterationsxtol- stop whentrustRadius < xtolgtol- stop whenoptimality < gtolandconstrViolation < gtol- Returns:
- populated
OptimizeResult
-
minimize
public static OptimizeResult minimize(Function<Matrix, Double> fun, Function<Matrix, Matrix> grad, Function<Matrix, Matrix> hess, Matrix x0, Object[] constraints, int maxIter, double xtol, double gtol) Multi-constraint entry point: combines the supplied constraints into aCombinedConstraintand dispatches as inthe single-constraint overload. Passnullor an empty array for unconstrained problems.- Parameters:
fun- objective functionf : R^n -> Rgrad- analytic gradienthess- analytic Hessianx0- initial point (n x 1)constraints- array ofLinearConstraint/NonlinearConstraint(may benull)maxIter- maximum outer iterationsxtol- stop whentrustRadius < xtolgtol- stop whenoptimality < gtolandconstrViolation < gtol- Returns:
- populated
OptimizeResult
-
minimizeTrustConstr
public static OptimizeResult minimizeTrustConstr(ToDoubleBiFunction<Matrix, Object> fun, Matrix x0, Object args, BiFunction<Matrix, Object, Matrix> grad, BiFunction<Matrix, Object, Matrix> hess, HessianProduct hessp, Bounds bounds, Object constraints, double xTol, double gTol, double barrierTol, Optional<Boolean> sparseJacobian, IterationCallback callback, int maxIter, int verbose, Matrix finiteDifferenceRelStep, double initialConstraintPenalty, double initialTrustRadius, double initialBarrierParameter, double initialBarrierTolerance, ProjectionMethod factorizationMethod, boolean disp) Minimize a scalar function subject to constraints. Full scipy-shape entry point: see Conn, Gould & Toint, Trust Region Methods (SIAM, 2000), p.19 for the algorithm and parameter recommendations.- Parameters:
fun- objective(x, args) -> f(x)x0- starting point (n x 1)args- extra arguments forwarded tofun/grad/hess; may benullgrad- gradient(x, args) -> gradf(x); ifnull, computed by 2-point finite differenceshess- Hessian(x, args) -> grad^2f(x); ifnull, approximated by BFGShessp- Hessian-vector product; honored whenhessisnull(materialised viaHessianLinearOperator)bounds- box bounds onx; folded into the constraint set as aLinearConstraint; may benullconstraints- either a singleLinearConstraint/NonlinearConstraint, anObject[]of such, ornullxTol- tolerance for termination by change inx: stop whentr_radius < xTolgTol- tolerance for termination by Lagrangian gradient norm and constraint violationbarrierTol- IP-only: termination requires barrier parameter below this thresholdsparseJacobian-true/falseforces all constraint Jacobians to that representation viaSparsityForcedConstraint;Optional.empty()uses the constraint's native auto-detectcallback- per-iteration callback; returntrueto terminate. May benullmaxIter- maximum outer iterationsverbose- verbosity level (0 silent, 1 termination report, 2-3 per-iteration progress)finiteDifferenceRelStep- relative step size for FD gradient/Hessian; may benullinitialConstraintPenalty- initial constraint penalty for the merit functionf(x) + rho ||c(x)||_2initialTrustRadius- initial trust-region radiusinitialBarrierParameter- IP-only: initial barrier parameter for the log-barrier subprobleminitialBarrierTolerance- IP-only: initial inner-loop tolerance for the barrier subproblemfactorizationMethod- how to factor the equality-Jacobian for the projection: one ofAUGMENTED_SYSTEM,QR_FACTORIZATION,SVD_FACTORIZATION, ornullfor auto-select (QR for dense, AUGMENTED_SYSTEM for sparse)disp- iftrue, bumpsverboseto 1 when it was 0- Returns:
- populated
OptimizeResult
-
minimizeTrustConstr
public static OptimizeResult minimizeTrustConstr(ToDoubleBiFunction<Matrix, Object> fun, Matrix x0, Object args, BiFunction<Matrix, Object, Matrix> grad, BiFunction<Matrix, Object, Matrix> hess, HessianProduct hessp, Bounds bounds, Object constraints, double xTol, double gTol, double barrierTol, Optional<Boolean> sparseJacobian, IterationCallback callback, int maxIter, int verbose, Matrix finiteDifferenceRelStep, double initialConstraintPenalty, double initialTrustRadius, double initialBarrierParameter, double initialBarrierTolerance, ProjectionMethod factorizationMethod, boolean disp, ExecutorService workers) Strict scipy_minimize_trustregion_constr(..., workers=N)counterpart. Same arguments asminimizeTrustConstr(ToDoubleBiFunction, Matrix, Object, BiFunction, BiFunction, HessianProduct, Bounds, Object, double, double, double, Optional, IterationCallback, int, int, Matrix, double, double, double, double, ProjectionMethod, boolean), plus a finalExecutorServicefor parallel FD evaluation.workersonly affects the FD-gradient path (whengradisnull); analytic gradients are unaffected.- Parameters:
fun- objective(x, args) -> fx0- starting iterate (n x 1)args- extra arguments forwarded tofun/grad/hessgrad- analytic gradient(x, args) -> grad f(x), ornullfor FDhess- analytic Hessian(x, args) -> H(x), ornullfor BFGShessp- matrix-free Hessian-vector product(x, p, args) -> H(x) p, ornullbounds- box bounds on the decision variables, ornullconstraints-LinearConstraint,NonlinearConstraint,Object[]mix, ornullxTol- step-size convergence tolerancegTol- KKT-optimality convergence tolerancebarrierTol- IP-path barrier-parameter convergence tolerancesparseJacobian- forces sparse / dense Jacobian;Optional.empty()auto-detectscallback- per-iteration callback, returnstrueto terminate;nulldisablesmaxIter- iteration limitverbose- verbosity level (0 silent, 1 progress table)finiteDifferenceRelStep- FD relative step (per-element vector);nulluses the eps-derived defaultinitialConstraintPenalty- initial merit-function penaltyinitialTrustRadius- initial trust-region radiusinitialBarrierParameter- IP-path: initial barrier coefficientinitialBarrierTolerance- IP-path: initial barrier-subproblem tolerancefactorizationMethod- projection factorisation;nullpicks QR for dense / AugmentedSystem for sparsedisp- bumpsverboseto 1 when it was 0workers- executor for parallel FD evaluation;null= serial- Returns:
- populated
OptimizeResult
-