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
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
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 matrixX.
Returns
nothing.
Related