Kurtosis Constraints
PortfolioOptimisers.get_chol_or_Gkt_pm Function
get_chol_or_Gkt_pm(model::Model, pr::HighOrderPrior) -> AnyRetrieve 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 containingktandS2.
Returns
Gkt::Matrix: Upper Cholesky factor of the co-kurtosis projected matrix.
Related
sourcePortfolioOptimisers.get_kt_Akt_pm Function
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 containingktandmu.
Returns
- A 2-tuple
(vals_Akt, vecs_Akt)of eigenvalues and eigenvectors.
Related
sourcePortfolioOptimisers.set_kurtosis_risk! Function
set_kurtosis_risk!(
model::Model,
r::Kurtosis{<:Any, <:Any, <:Any, <:Any, <:Any, <:Any, <:SOCRiskExpr},
opt::RiskJuMPOptimisationEstimator,
sqrt_kurtosis_risk::AbstractJuMPScalar,
_,
key::Symbol,
args...
) -> AbstractJuMPScalarFinalise 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
sourcePortfolioOptimisers.set_risk_constraints! Method
set_risk_constraints!(
model::Model,
i,
r::Kurtosis{<:Any, <:Any, <:Any, <:Any, <:Integer},
opt::RiskJuMPOptimisationEstimator,
pr::HighOrderPrior,
args...;
kwargs...
) -> AnyAdd 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 containingkt,S2, andL2.
Returns
nothing.
Related
sourcePortfolioOptimisers.set_risk_constraints! Method
set_risk_constraints!(
model::Model,
i,
r::Kurtosis{<:Any, <:Any, <:Any, <:Any, Nothing},
opt::RiskJuMPOptimisationEstimator,
pr::HighOrderPrior,
args...;
kwargs...
) -> AnyAdd 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 matrixkt.
Returns
nothing.
Related
sourcePortfolioOptimisers.set_risk_constraints! Method
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