Skip to content
13

Kurtosis Constraints

PortfolioOptimisers.get_chol_or_Gkt_pm Function
julia
get_chol_or_Gkt_pm(model::Model, pr::HighOrderPrior) -> Any

Retrieve or compute and cache the Cholesky factor of the co-kurtosis matrix.

If model does not yet contain Gkt, computes the upper Cholesky factor of pr.S2 * pr.kt * pr.S2' and stores it as model[:Gkt].

Arguments

  • model::JuMP.Model: The JuMP optimisation model.

  • pr::HighOrderPrior: High-order prior containing kt and S2.

Returns

  • Gkt::Matrix: Upper Cholesky factor of the co-kurtosis projected matrix.

Related

source
PortfolioOptimisers.get_kt_Akt_pm Function
julia
get_kt_Akt_pm(
    model::Model,
    pr::HighOrderPrior
) -> Tuple{Any, Any}

Retrieve or compute and cache the eigendecomposition of the co-kurtosis matrix.

Builds the block-vectorised kurtosis matrix A, clamps its eigenvalues to be non-negative, and stores vals_Akt and vecs_Akt in model.

Arguments

  • model::JuMP.Model: The JuMP optimisation model.

  • pr::HighOrderPrior: High-order prior containing kt and mu.

Returns

  • A 2-tuple (vals_Akt, vecs_Akt) of eigenvalues and eigenvectors.

Related

source
PortfolioOptimisers.set_kurtosis_risk! Function
julia
set_kurtosis_risk!(
    model::Model,
    r::Kurtosis{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:SOCRiskExpr},
    opt::RiskJuMPOptimisationEstimator,
    sqrt_kurtosis_risk::AbstractJuMPScalar,
    _,
    key::Symbol,
    args...
) -> AbstractJuMPScalar

Finalise the kurtosis risk expression and apply bounds according to the chosen formulation.

The SOCRiskExpr overload passes the SOC variable directly to set_risk_bounds_and_expression!. The SquaredSOCRiskExpr overload squares the variable and bounds the original variable. The QuadRiskExpr overload uses a quadratic dot product of x_kurt. The RSOCRiskExpr overload adds a rotated second-order cone constraint.

Arguments

  • model::JuMP.Model: The JuMP optimisation model.

  • r::Kurtosis: Kurtosis risk measure instance.

  • opt::RiskJuMPOptimisationEstimator: Risk-based optimisation estimator.

  • sqrt_kurtosis_risk: SOC variable representing the square root of kurtosis risk.

  • x_kurt: Auxiliary vector expression used in Quad/RSOC formulations.

  • key::Symbol: Symbol used to name constraints or expressions in the model.

  • i: Constraint index for unique naming (used by the RSOC overload).

Returns

  • The kurtosis risk JuMP expression.

Related

source
PortfolioOptimisers.set_risk_constraints! Method
julia
set_risk_constraints!(
    model::Model,
    i,
    r::Kurtosis{<:Any, <:Any, <:Any, <:Any, <:Integer},
    opt::RiskJuMPOptimisationEstimator,
    pr::HighOrderPrior,
    args...;
    kwargs...
) -> Any

Add kurtosis risk constraints to model.

The Integer N overload uses an approximate spectral decomposition of the co-kurtosis tensor to build N eigen-directions and encodes kurtosis via SOC and equality constraints. The Nothing N overload uses the full Cholesky-based formulation with the duplication matrix. The LowOrderPrior overload unconditionally throws an ArgumentError since kurtosis estimation requires a high-order prior.

Arguments

  • model::JuMP.Model: The JuMP optimisation model.

  • i: Constraint index for unique variable and constraint naming.

  • r::Kurtosis: Kurtosis risk measure instance.

  • opt::RiskJuMPOptimisationEstimator: Risk-based optimisation estimator.

  • pr::HighOrderPrior: High-order prior containing kt, S2, and L2.

Returns

  • nothing.

Related

source
PortfolioOptimisers.set_risk_constraints! Method
julia
set_risk_constraints!(
    model::Model,
    i,
    r::Kurtosis{<:Any, <:Any, <:Any, <:Any, Nothing},
    opt::RiskJuMPOptimisationEstimator,
    pr::HighOrderPrior,
    args...;
    kwargs...
) -> Any

Add JuMP risk constraints for Kurtosis with a continuous Nothing truncation parameter to model.

Uses the full Cholesky-based SDP formulation to compute the portfolio kurtosis risk as a second-order cone constraint over the vectorised weight matrix W. This overload applies when the kurtosis truncation rank is Nothing (no truncation).

Arguments

  • model::JuMP.Model: The JuMP optimisation model.

  • i: Constraint index for unique variable and constraint naming.

  • r::Kurtosis{<:Any, <:Any, <:Any, <:Any, Nothing, <:Any, <:Any}: The kurtosis risk measure with no truncation.

  • opt::RiskJuMPOptimisationEstimator: Risk-based optimisation estimator.

  • pr::HighOrderPrior: High-order prior containing the kurtosis matrix kt.

Returns

  • nothing.

Related

source
PortfolioOptimisers.set_risk_constraints! Method
julia
set_risk_constraints!(
    ::Model,
    ,
    ::Kurtosis,
    ::RiskJuMPOptimisationEstimator,
    pr::LowOrderPrior,
    args...;
    kwargs...
)

Throw an ArgumentError indicating that Kurtosis requires a HighOrderPrior.

This fall-through overload is triggered when a LowOrderPrior is passed and always raises an error.

Arguments

  • r::Kurtosis: The kurtosis risk measure (unused).

  • pr::LowOrderPrior: A low-order prior (not compatible with kurtosis).

Returns

  • Does not return; always throws ArgumentError.

Related

source