Brownian Distance Variance Constraints: private API

PortfolioOptimisers.set_brownian_distance_variance_constraints!Function
set_brownian_distance_variance_constraints!(
    model::Model,
    ::NormOneConeBrownianDistanceVariance,
    Dt::AbstractMatrix{<:Union{var"#s136", var"#s53"} where {var"#s136"<:Number, var"#s53"<:AbstractJuMPScalar}},
    Dx::AbstractMatrix{<:Union{var"#s136", var"#s53"} where {var"#s136"<:Number, var"#s53"<:AbstractJuMPScalar}};
    prefix
)

Add auxiliary BDV constraints linking the symmetric distance matrix Dt to portfolio-return differences Dx.

The NormOneConeBrownianDistanceVariance overload adds per-element L1-norm cone constraints [sc * Dt[i,j]; sc * Dx[i,j]] in NormOneCone(2) for each upper-triangular entry. The IneqBrownianDistanceVariance overload adds global non-negativity constraints on Dt - Dx and Dt + Dx.

Mathematical definition

\[\begin{align} D_t(i,j) &\geq |\hat{r}_i - \hat{r}_j|\,, \\ \mathrm{BDV}(\boldsymbol{w}) &= \frac{1}{T^2}\sum_{i,j} D_t(i,j)^2 - \left(\frac{1}{T^2}\sum_{i,j} D_t(i,j)\right)^2\,. \end{align}\]

Where:

  • $D_t(i,j)$: Distance auxiliary variable between returns at times $i$ and $j$.
  • $\hat{r}_i$, $\hat{r}_j$: Portfolio returns at times $i$ and $j$.
  • $\mathrm{BDV}(\boldsymbol{w})$: Brownian distance variance.
  • $T$: Number of observations.

Arguments

  • model::JuMP.Model: The JuMP optimisation model.
  • Dt::MatNum: Symmetric JuMP matrix variable for absolute distances.
  • Dx::MatNum: JuMP expression matrix for portfolio-return pairwise differences.

Returns

  • nothing.

Related

source
PortfolioOptimisers.set_brownian_distance_risk_constraint!Function
set_brownian_distance_risk_constraint!(
    model::Model,
    ::QuadRiskExpr,
    Dt::AbstractMatrix{<:Union{var"#s136", var"#s53"} where {var"#s136"<:Number, var"#s53"<:AbstractJuMPScalar}},
    iT2::Number;
    prefix
) -> Any

Build the Brownian distance variance risk expression.

The QuadRiskExpr overload encodes BDV as a quadratic dot product of Dt plus a squared sum term. The RSOCRiskExpr overload introduces a scalar variable tDt bounded by a rotated second-order cone on vec(Dt), then builds the same expression with tDt in place of the quadratic dot product.

Arguments

  • model::JuMP.Model: The JuMP optimisation model.
  • Dt::MatNum: Symmetric distance matrix variable.
  • iT2::Number: Inverse square of the number of observations (1 / T^2).

Returns

  • bdvariance_risk: JuMP expression for the Brownian distance variance risk.

Related

source
PortfolioOptimisers.set_risk_constraints!Method
set_risk_constraints!(
    model::Model,
    ,
    r::BrownianDistanceVariance,
    opt::RiskJuMPOptimisationEstimator,
    pr::AbstractPriorResult,
    args...;
    prefix,
    kwargs...
) -> Any

Add Brownian distance variance risk constraints to model.

Constructs the pairwise return difference matrix Dx, introduces a symmetric variable matrix Dt, builds the BDV risk expression via set_brownian_distance_risk_constraint!, and links Dt to Dx via set_brownian_distance_variance_constraints!. Returns the existing expression if already present.

Arguments

  • model::JuMP.Model: The JuMP optimisation model.
  • r::BrownianDistanceVariance: BDV risk measure instance.
  • opt::RiskJuMPOptimisationEstimator: Risk-based optimisation estimator.
  • pr::AbstractPriorResult: Prior result containing the returns matrix X.

Returns

  • nothing.

Related

source