Skip to content

Speed and Accuracy

PharosAbad edited this page Apr 27, 2023 · 11 revisions

We present our limit test on the following package for portfolio selection

  • LightenQP, a pure Julia numerical solver using the primal-dual interior point algorithms supplied by OOQP
  • OSQP: an Operator Splitting QP numerical Solver
  • Clarabel: a Julia implementation of an interior point numerical solver

To replicate our result, download the following files, and run SpeedAccuracy.jl

  1. https://github.com/PharosAbad/LightenQP.jl/raw/main/examples/SpeedAccuracy.jl
  2. https://github.com/PharosAbad/EfficientFrontier.jl/raw/main/examples/uOSQP.jl
  3. https://github.com/PharosAbad/EfficientFrontier.jl/raw/main/examples/uClarabel.jl

Versions

pkg> st
Status `~/.julia/environments/v1.9/Project.toml`
  [61c947e1] Clarabel v0.5.0
  [732b1220] LightenQP v1.0.9
  [ab2f91bb] OSQP v0.8.0

The outputs (stdout.txt or stdoutL.txt) from SpeedAccuracy.jl: the first column is the corner portfolios (except the last one, the GMVP), and the $i$-th row is the range(cp[i], stop=cp[i+1], length=17)[1:end-1], say, linspace from the expected return of corner portfolio $i$ to $i+1$

First, checking if it is solved successfully: 1 success, 0 fail (infeasible, max iteration exceeded, etc)

------- Solution status ------- LightenQP/OSQP/Clarabel
18×16 BitMatrix:
 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 .
 .
 .

Accuracy

Accuracy is the portfolio weights z relative to the true value z0, reported by norm(z-z0, Inf). In the context of portfolio optimization, the accuracy of the solution (portfolio weights) is more important than the accuracy of objective function value.

------- Accuracy -------LightenQP/OSQP/Clarabel   [9.26e-9, 2.38e-8, 1.3e-7]
---- quantile 99% ----   [5.48e-9, 1.42e-9, 3.94e-8]
------- median -------   [1.96e-15, 9.06e-16, 1.53e-14]
---- quantile  1% ----   [2.22e-16, 1.39e-16, 5.58e-16]
18×16 Matrix{Float64}:
 2.84e-15  4.44e-14  4.26e-14  4.44e-14  4.36e-14  3.28e-14  4.01e-14  4.19e-14  3.07e-14  2.75e-14  3.76e-14  2.9e-14   2.41e-14  2.52e-14  2.53e-14  1.98e-14
 7.42e-16  1.78e-15  2.0e-15   1.24e-15  1.64e-15  1.55e-15  1.33e-15  8.33e-16  4.3e-16   4.02e-16  6.52e-16  4.3e-16   5.69e-16  5.2e-16   6.52e-16  6.73e-16
 5.62e-16  7.49e-16  1.13e-15  1.67e-15  9.85e-16  1.42e-15  1.37e-15  1.55e-15  1.86e-15  3.48e-15  2.0e-15   2.46e-15  5.62e-15  4.08e-15  3.89e-15  4.25e-15
 4.3e-9    5.79e-15  5.44e-15  5.2e-15   4.55e-15  4.08e-15  3.5e-15   3.19e-15  2.91e-15  2.51e-15  1.94e-15  1.39e-15  1.14e-15  4.86e-16  2.08e-16  3.05e-16
 3.79e-9   1.22e-14  1.18e-15  1.2e-14   3.97e-15  1.86e-15  1.5e-15   5.55e-16  1.22e-15  1.86e-15  2.97e-15  5.33e-15  1.19e-15  1.19e-15  3.22e-15  5.6e-14
 5.36e-9   2.39e-15  2.07e-15  1.89e-15  1.69e-15  1.71e-15  1.44e-15  1.22e-15  1.28e-15  2.03e-15  3.41e-15  6.13e-15  1.18e-14  1.11e-15  2.33e-15  2.33e-14
 2.65e-9   4.72e-15  8.88e-16  6.38e-16  3.61e-16  7.63e-16  6.8e-16   6.66e-16  5.0e-16   3.89e-16  4.44e-16  3.05e-16  3.89e-16  3.47e-16  3.75e-16  5.25e-15
 2.64e-9   2.25e-15  1.09e-14  2.8e-15   1.05e-15  1.25e-15  1.53e-15  1.61e-15  2.3e-15   1.53e-15  2.12e-15  2.25e-15  2.37e-15  2.39e-15  3.5e-15   2.84e-15
 3.96e-9   3.8e-15   2.3e-15   2.01e-15  1.98e-15  1.83e-15  1.58e-15  1.37e-15  1.3e-15   1.5e-15   2.78e-15  5.22e-15  1.09e-14  3.1e-14   1.5e-15   1.94e-14
 9.26e-9   6.83e-15  5.13e-16  9.1e-15   2.72e-15  1.33e-15  1.3e-15   1.36e-15  1.51e-15  1.67e-15  1.61e-15  2.57e-15  3.15e-15  5.22e-15  1.69e-15  1.75e-15
 4.74e-9   1.39e-15  8.13e-15  1.73e-15  1.53e-15  2.39e-15  3.58e-15  5.08e-15  7.33e-15  1.15e-14  2.06e-14  4.51e-14  1.61e-15  3.36e-15  1.52e-14  1.95e-13
 6.25e-9   1.47e-14  1.33e-15  6.94e-16  5.83e-16  3.91e-15  1.8e-15   9.16e-16  6.38e-16  3.61e-16  9.16e-16  2.22e-16  5.0e-16   5.83e-16  7.77e-16  6.66e-16
 4.56e-9   6.38e-16  2.78e-15  6.94e-16  6.66e-16  5.83e-16  5.0e-16   5.0e-16   5.55e-16  4.72e-16  4.44e-16  8.88e-16  1.64e-15  2.83e-15  4.55e-15  8.33e-16
 2.79e-9   4.14e-13  2.98e-14  6.13e-15  2.3e-15   7.77e-16  4.77e-14  2.5e-14   1.34e-14  7.3e-15   6.05e-15  6.22e-15  9.88e-15  5.19e-14  3.44e-15  6.18e-14
 4.4e-9    6.62e-14  7.58e-15  1.12e-13  3.72e-14  1.45e-14  6.77e-15  3.14e-15  3.08e-15  3.0e-14   5.83e-15  1.11e-15  2.33e-15  1.06e-14  7.2e-14   1.26e-14
 8.34e-9   8.05e-16  1.55e-15  1.19e-15  1.33e-15  1.11e-15  9.71e-16  1.08e-15  8.33e-16  6.94e-16  6.38e-16  6.66e-16  6.38e-16  9.44e-16  2.78e-15  2.21e-14
 4.53e-9   8.6e-16   1.64e-15  5.27e-16  5.07e-16  3.26e-16  2.22e-16  1.58e-16  2.5e-16   4.16e-16  4.44e-16  3.89e-16  5.27e-16  9.16e-16  1.08e-15  6.33e-15
 2.54e-9   1.61e-15  1.15e-14  2.39e-15  8.33e-16  1.17e-15  1.49e-14  8.1e-15   4.94e-15  3.16e-15  2.03e-15  1.39e-15  9.16e-16  1.25e-15  1.28e-15  1.11e-15
18×16 Matrix{Float64}:
 2.38e-8   1.44e-9   1.43e-9   1.42e-9   1.42e-9   1.41e-9   1.4e-9    1.39e-9   1.39e-9   1.38e-9   1.37e-9   1.37e-9   1.36e-9   1.35e-9   1.34e-9   1.34e-9
 2.75e-10  1.12e-15  1.68e-15  1.36e-15  4.02e-16  1.08e-15  8.88e-16  3.89e-16  3.4e-16   8.6e-16   9.44e-16  6.66e-16  7.63e-16  5.76e-16  1.55e-15  1.28e-15
 3.61e-16  1.39e-15  4.44e-15  8.05e-16  1.69e-15  2.04e-15  3.25e-15  1.44e-15  2.46e-15  2.05e-15  3.07e-15  2.58e-15  3.48e-15  3.18e-15  3.23e-15  4.97e-15
 4.72e-15  6.4e-15   5.66e-15  5.18e-15  4.9e-15   4.27e-15  3.98e-15  3.64e-15  2.87e-15  2.64e-15  2.04e-15  1.85e-15  1.18e-15  7.49e-16  3.89e-16  2.78e-16
 1.37e-15  7.77e-16  2.3e-15   6.94e-16  5.55e-16  1.94e-15  5.83e-16  8.05e-16  1.61e-15  2.72e-15  1.47e-15  2.53e-15  1.17e-15  2.11e-15  2.22e-15  1.03e-15
 2.36e-15  2.43e-15  2.1e-15   1.98e-15  1.79e-15  1.55e-15  1.4e-15   1.24e-15  1.01e-15  9.71e-16  6.94e-16  5.27e-16  4.44e-16  5.0e-16   5.27e-16  6.38e-16
 6.11e-16  5.27e-16  5.83e-16  5.27e-16  7.49e-16  4.16e-16  4.16e-16  3.33e-16  2.78e-16  1.67e-16  4.72e-16  5.55e-16  2.91e-16  4.02e-16  3.89e-16  4.44e-16
 4.44e-16  6.38e-16  8.33e-16  9.58e-16  1.24e-15  1.35e-15  1.6e-15   1.72e-15  1.87e-15  2.0e-15   2.16e-15  2.35e-15  2.51e-15  2.62e-15  2.73e-15  3.0e-15
 2.53e-15  2.54e-15  2.36e-15  2.14e-15  2.08e-15  1.8e-15   1.67e-15  1.3e-15   1.15e-15  9.44e-16  7.22e-16  5.41e-16  5.27e-16  5.31e-16  3.23e-16  3.05e-16
 1.11e-15  5.55e-16  7.29e-16  1.22e-15  8.95e-16  9.44e-16  1.78e-15  1.19e-15  1.5e-15   1.3e-15   1.15e-15  1.29e-15  1.61e-15  1.72e-15  1.61e-15  1.8e-15
 9.44e-16  8.33e-16  8.88e-16  7.77e-16  6.38e-16  7.77e-16  6.11e-16  6.94e-16  5.83e-16  5.83e-16  6.94e-16  4.44e-16  5.27e-16  4.44e-16  4.72e-16  6.11e-16
 4.72e-16  5.83e-16  4.44e-16  5.27e-16  4.72e-16  3.33e-16  3.61e-16  2.78e-16  2.5e-16   3.61e-16  3.61e-16  5.27e-16  4.44e-16  5.55e-16  5.0e-16   5.83e-16
 8.05e-16  5.55e-16  4.44e-16  5.55e-16  4.72e-16  2.78e-16  3.61e-16  2.5e-16   3.05e-16  3.05e-16  2.78e-16  1.94e-16  2.5e-16   4.44e-16  3.33e-16  3.33e-16
 2.78e-16  2.22e-16  2.36e-16  3.05e-16  1.39e-16  1.39e-16  1.39e-16  2.22e-16  2.5e-16   3.89e-16  1.94e-16  7.49e-16  2.78e-16  5.27e-16  5.55e-16  8.33e-16
 2.0e-15   1.61e-15  1.42e-15  1.89e-15  9.99e-16  1.61e-15  1.61e-15  1.53e-15  9.44e-16  7.22e-16  1.03e-15  6.66e-16  6.94e-16  6.38e-16  5.83e-16  8.33e-16
 1.18e-15  1.36e-15  1.22e-15  1.17e-15  1.11e-15  1.03e-15  9.16e-16  7.49e-16  6.38e-16  6.11e-16  5.55e-16  5.55e-16  5.0e-16   6.11e-16  6.38e-16  6.38e-16
 5.83e-16  5.97e-16  4.3e-16   4.16e-16  2.22e-16  1.39e-16  1.25e-16  2.5e-16   2.78e-16  3.05e-16  5.83e-16  6.66e-16  5.55e-16  8.88e-16  9.99e-16  1.05e-15
 1.11e-15  1.53e-15  1.5e-15   1.5e-15   1.53e-15  1.53e-15  1.53e-15  1.64e-15  1.55e-15  1.44e-15  1.36e-15  1.58e-15  1.58e-15  1.67e-15  1.58e-15  1.58e-15
18×16 Matrix{Float64}:
 3.85e-14  3.07e-14  2.31e-14  2.3e-14   2.18e-14  3.71e-14  2.81e-14  1.49e-14  5.38e-14  3.82e-14  3.87e-14  5.04e-15  3.06e-14  3.52e-14  3.14e-14  2.74e-14
 7.42e-16  1.46e-15  8.6e-16   9.16e-16  6.8e-16   5.62e-16  4.79e-16  9.85e-16  8.88e-16  4.44e-16  1.08e-15  2.16e-15  6.59e-16  8.6e-16   6.11e-16  9.99e-16
 2.64e-15  4.88e-15  2.08e-15  1.3e-15   1.07e-14  9.24e-15  4.14e-15  4.64e-15  2.6e-15   4.07e-15  2.83e-15  2.19e-15  6.69e-15  1.1e-14   8.0e-14   2.6e-14
 3.12e-8   1.07e-14  6.3e-15   5.54e-15  4.98e-15  4.72e-15  4.61e-15  3.62e-15  3.84e-15  2.96e-15  2.47e-15  2.12e-15  1.8e-15   9.85e-16  7.77e-16  8.65e-15
 1.3e-7    2.48e-13  7.96e-13  8.6e-14   1.14e-14  1.47e-15  4.79e-14  1.05e-14  8.43e-14  6.25e-16  4.0e-15   2.17e-14  5.75e-14  1.39e-13  7.08e-13  1.63e-13
 2.33e-8   8.66e-15  7.11e-15  9.21e-15  1.28e-14  1.61e-14  2.28e-14  2.44e-14  4.72e-14  4.7e-14   7.76e-14  1.56e-13  4.45e-13  3.31e-14  2.08e-13  7.88e-14
 2.65e-8   9.31e-14  5.86e-15  3.86e-14  8.52e-15  6.91e-15  9.66e-15  6.61e-15  7.2e-15   1.16e-14  1.04e-14  1.28e-14  2.53e-14  3.22e-15  1.42e-14  1.02e-13
 3.15e-8   8.99e-14  3.42e-13  5.35e-14  2.07e-14  4.19e-15  1.69e-15  1.22e-15  2.72e-14  1.94e-14  1.71e-14  1.95e-14  2.76e-14  1.86e-15  1.71e-14  2.13e-13
 4.29e-8   5.65e-14  6.67e-14  1.37e-14  9.77e-15  8.16e-15  1.24e-14  2.83e-14  3.09e-14  4.47e-14  1.04e-13  2.07e-13  5.76e-13  9.18e-14  1.48e-13  3.19e-13
 6.42e-8   3.81e-13  1.54e-14  5.27e-15  8.74e-16  3.69e-14  1.83e-14  1.65e-14  1.59e-14  2.39e-14  3.46e-14  5.91e-14  1.97e-15  5.27e-15  5.16e-15  2.45e-14
 3.89e-8   6.17e-13  4.55e-14  4.38e-15  2.08e-15  9.91e-15  3.94e-15  6.08e-15  2.01e-14  3.09e-14  4.24e-14  1.0e-13   2.92e-13  1.17e-14  1.89e-13  2.21e-12
 1.86e-8   3.44e-14  1.07e-13  1.56e-14  9.52e-15  1.5e-15   7.49e-16  2.42e-14  1.13e-14  7.3e-15   4.27e-15  1.33e-15  8.6e-16   1.36e-15  6.13e-15  3.5e-15
 2.59e-8   6.52e-15  2.51e-14  3.64e-15  9.44e-16  6.94e-16  2.23e-14  1.71e-14  5.27e-16  7.22e-16  2.05e-15  1.92e-15  3.08e-15  5.52e-15  1.52e-14  5.74e-14
 1.16e-8   9.45e-13  1.06e-13  5.81e-13  2.83e-13  6.2e-14   9.82e-14  1.73e-14  1.02e-14  7.22e-15  4.64e-14  3.52e-15  7.44e-15  3.28e-14  1.44e-13  3.75e-12
 2.23e-8   3.88e-12  1.61e-13  1.48e-14  5.99e-13  1.75e-13  6.5e-14   2.3e-14   1.67e-14  4.91e-15  6.22e-14  7.49e-15  7.53e-14  2.84e-13  4.43e-14  1.29e-12
 3.68e-8   4.72e-15  3.14e-15  1.8e-15   4.64e-15  1.92e-15  1.25e-15  3.77e-15  4.19e-15  3.86e-15  4.33e-15  5.52e-15  1.32e-14  4.69e-14  1.56e-14  6.71e-14
 1.59e-8   9.26e-14  5.13e-15  1.39e-15  1.36e-14  4.22e-15  1.8e-15   5.69e-16  7.49e-16  1.03e-15  2.64e-15  6.08e-15  1.54e-14  1.64e-15  5.08e-15  9.46e-14
 1.01e-8   3.59e-13  1.33e-14  1.92e-13  6.78e-14  1.71e-14  7.47e-15  1.09e-14  1.92e-15  1.13e-13  6.61e-14  4.98e-14  3.44e-14  2.41e-14  1.76e-14  9.6e-15


Speed

Given by time used, less time for faster speed

--- Speed (time span, smaller for faster speed) ---LightenQP/OSQP/Clarabel   [0.075, 0.0936, 0.827]
---- quantile 99% ----   [0.013, 0.00293, 0.000341]
------- median -------   [0.000383, 0.000136, 0.000227]
---- quantile  1% ----   [0.000334, 8.59e-5, 0.000207]
18×16 Matrix{Float64}:
 0.075     0.000497  0.000464  0.000656  0.0285    0.000542  0.000398  0.000418  0.0004    0.000396  0.000369  0.000366  0.000366  0.000394  0.000403  0.000406
 0.000408  0.000444  0.000412  0.000392  0.000395  0.000399  0.00044   0.000447  0.000445  0.000444  0.000422  0.000415  0.000487  0.000421  0.000418  0.000413
 0.000411  0.000465  0.000466  0.000481  0.000465  0.000469  0.000465  0.000459  0.000458  0.000459  0.000462  0.000462  0.000468  0.000458  0.000461  0.000489
 0.000681  0.000491  0.000487  0.000492  0.000504  0.000487  0.000493  0.000459  0.000471  0.000462  0.00049   0.000489  0.00049   0.00049   0.000462  0.000465
 0.00068   0.000491  0.000487  0.000465  0.000475  0.00046   0.000465  0.000459  0.000458  0.0212    0.000402  0.000395  0.000392  0.000389  0.000386  0.000385
 0.000534  0.000387  0.000369  0.000365  0.000364  0.000369  0.000364  0.000362  0.000365  0.000361  0.000363  0.000376  0.000368  0.000385  0.000383  0.000382
 0.000542  0.000362  0.000361  0.000363  0.000367  0.000345  0.00034   0.000358  0.000365  0.000362  0.000366  0.00036   0.000364  0.000365  0.000362  0.000366
 0.00054   0.000387  0.000365  0.000362  0.000364  0.000371  0.000364  0.000363  0.00034   0.000345  0.000336  0.000338  0.000336  0.000335  0.000336  0.000356
 0.000517  0.000364  0.000367  0.000371  0.000368  0.000368  0.00037   0.000374  0.000376  0.000366  0.00038   0.000417  0.000399  0.0118    0.000398  0.000383
 0.000509  0.000355  0.000354  0.000336  0.000338  0.000333  0.000351  0.00034   0.000337  0.000335  0.000341  0.000338  0.000341  0.00034   0.000361  0.00036
 0.000546  0.000403  0.000359  0.000362  0.00036   0.000364  0.000362  0.000361  0.00036   0.000357  0.000361  0.000357  0.000391  0.000394  0.000375  0.000374
 0.000505  0.000356  0.000355  0.000357  0.000355  0.000335  0.00033   0.00035   0.000334  0.000337  0.000334  0.000334  0.000364  0.000363  0.000364  0.000388
 0.000586  0.000467  0.000517  0.000532  0.000461  0.000363  0.00036   0.000361  0.00037   0.000364  0.000362  0.000384  0.000364  0.000363  0.00036   0.000385
 0.000525  0.000399  0.00253   0.000415  0.000402  0.000449  0.000452  0.000392  0.000388  0.000408  0.000414  0.000393  0.000391  0.000453  0.000415  0.000413
 0.000541  0.000404  0.000416  0.000383  0.000386  0.000386  0.000386  0.000563  0.000386  0.000361  0.000367  0.000383  0.000389  0.000387  0.000382  0.000403
 0.000511  0.000357  0.000364  0.000388  0.000366  0.00037   0.000359  0.000377  0.000358  0.000357  0.000359  0.000356  0.000359  0.000357  0.000357  0.000362
 0.000508  0.000367  0.000336  0.000337  0.000339  0.000368  0.000342  0.000388  0.00039   0.000387  0.000388  0.000389  0.00038   0.000358  0.000358  0.000359
 0.00053   0.0004    0.000379  0.000377  0.000376  0.00241   0.000368  0.000357  0.00036   0.00036   0.000355  0.000354  0.000361  0.000354  0.000358  0.000423
18×16 Matrix{Float64}:
 0.0936    0.00227   0.00314   0.00149   0.00165   0.0019    0.00177   0.00195   0.00139   0.00293   0.000895  0.00174   0.00226   0.00293   0.00197   0.00185
 0.000197  0.000257  0.00025   0.000262  0.000299  0.000288  0.000263  0.00021   0.000246  0.000236  0.000206  0.00022   0.000248  0.000222  0.00026   0.000249
 0.000485  0.00046   0.000448  0.000449  0.000456  0.000447  0.000456  0.000444  0.000435  0.000439  0.000422  0.000422  0.000422  0.000408  0.000369  0.000254
 0.000378  0.000115  0.000113  0.000113  0.000112  0.000111  0.000111  0.00011   0.00011   0.00011   0.000115  0.00011   0.000112  0.000112  0.000112  0.000125
 0.000672  0.000676  0.000661  0.000689  0.000643  0.000714  0.000636  0.000602  0.000572  0.000497  0.000418  0.000534  0.000578  0.000597  0.000617  0.000634
 0.000648  0.000112  0.000101  0.000101  9.94e-5   9.93e-5   0.0001    9.85e-5   0.000101  9.85e-5   0.000101  0.0001    9.77e-5   9.81e-5   9.92e-5   0.0001
 9.9e-5    0.000101  0.000101  0.000102  0.000101  0.0001    9.83e-5   0.000101  0.0001    9.85e-5   0.0001    0.000101  9.99e-5   0.0001    9.93e-5   9.84e-5
 0.000102  0.000114  0.000112  0.000113  0.000113  0.00011   0.000112  0.000102  0.000102  0.000101  0.000101  9.95e-5   0.000103  0.000101  9.94e-5   9.94e-5
 9.87e-5   9.07e-5   8.78e-5   8.59e-5   8.84e-5   8.63e-5   8.69e-5   8.73e-5   8.7e-5    8.61e-5   8.49e-5   8.69e-5   8.7e-5    8.52e-5   8.55e-5   8.64e-5
 0.0001    0.000101  9.99e-5   9.81e-5   0.000101  9.97e-5   9.79e-5   9.95e-5   0.000112  9.9e-5    0.000102  0.000112  0.000111  0.000113  0.0001    8.61e-5
 0.000113  0.000114  0.000112  0.000114  0.000136  0.00013   0.000127  0.000132  0.000126  0.000129  0.000113  0.000126  0.000116  0.00015   0.000161  0.000135
 0.000114  8.62e-5   9.98e-5   9.89e-5   9.77e-5   9.84e-5   9.94e-5   9.77e-5   0.000139  0.00014   0.000137  0.000139  9.94e-5   0.0001    9.69e-5   0.000124
 0.000137  0.00014   0.000139  0.000137  0.000151  0.000153  0.000148  0.000151  0.000151  0.000151  0.00015   0.000163  0.000164  0.000164  0.000149  0.000149
 0.000141  0.000141  0.000137  0.000137  0.000139  0.000138  0.000139  0.000137  0.000136  0.000139  0.000136  0.000137  0.000137  0.000138  0.000136  0.000151
 0.000208  0.000211  0.000193  0.000192  0.000189  0.000181  0.00014   0.000176  0.000191  0.000191  0.000189  0.000204  0.000205  0.000202  0.000205  0.000206
 0.000205  0.00014   0.000154  0.000218  0.000181  0.000193  0.000185  0.00018   0.000139  0.00014   0.000138  0.000137  0.000137  0.000139  0.00014   0.000125
 0.000113  0.000101  0.000113  0.000114  0.000113  0.000111  0.000113  0.000112  0.000113  9.89e-5   8.74e-5   0.000113  0.000112  0.000115  0.00011   0.000113
 0.000113  0.000127  0.000139  0.000165  0.000138  0.000113  0.000141  0.000138  0.000167  0.000149  0.00014   0.00014   0.000141  0.000136  0.000138  0.000137
18×16 Matrix{Float64}:
 0.827     0.000421  0.000304  0.00029   0.000281  0.00028   0.000293  0.000288  0.000275  0.000284  0.000304  0.000298  0.000295  0.000295  0.000281  0.000286
 0.000232  0.000227  0.000228  0.000229  0.00023   0.000227  0.000226  0.000231  0.000227  0.000231  0.000228  0.000224  0.000238  0.000234  0.00024   0.000242
 0.000215  0.000225  0.000223  0.000233  0.00021   0.000213  0.000211  0.000212  0.000209  0.000207  0.000211  0.00021   0.000215  0.000208  0.000214  0.000225
 0.000314  0.000211  0.000211  0.000209  0.000207  0.000208  0.000207  0.000211  0.000208  0.000209  0.000207  0.00021   0.000212  0.000232  0.000213  0.000212
 0.000328  0.000237  0.000223  0.000226  0.00022   0.000224  0.000209  0.000211  0.00021   0.000222  0.000223  0.000221  0.000221  0.000224  0.000224  0.000239
 0.000314  0.000224  0.000222  0.000221  0.000224  0.000225  0.000222  0.000225  0.00022   0.000227  0.000224  0.000224  0.000225  0.000236  0.000238  0.000249
 0.000331  0.000223  0.000224  0.000214  0.000209  0.00021   0.000211  0.000213  0.000213  0.000214  0.000207  0.000213  0.000211  0.000227  0.000228  0.000226
 0.000325  0.000252  0.000234  0.000225  0.00023   0.000228  0.00023   0.000226  0.000212  0.000211  0.000214  0.000211  0.000208  0.000226  0.000225  0.000222
 0.000326  0.000238  0.000229  0.000225  0.000226  0.000222  0.000227  0.000222  0.000224  0.000226  0.000229  0.000223  0.000225  0.00024   0.00024   0.000254
 0.000327  0.000225  0.000227  0.00023   0.000221  0.000212  0.000214  0.000209  0.000212  0.000209  0.000214  0.000213  0.000226  0.000225  0.00024   0.000225
 0.000328  0.000239  0.000241  0.000239  0.000251  0.000242  0.000245  0.000239  0.000239  0.000238  0.000239  0.000238  0.000241  0.000252  0.000251  0.00025
 0.000338  0.000249  0.000227  0.00023   0.000227  0.000225  0.000224  0.00021   0.000219  0.000214  0.000213  0.000209  0.000224  0.000213  0.000209  0.00023
 0.00034   0.00024   0.000229  0.000226  0.000225  0.000228  0.000215  0.000213  0.000223  0.000224  0.000223  0.000223  0.00023   0.00023   0.000225  0.000228
 0.00034   0.000277  0.000266  0.000255  0.000251  0.000253  0.000262  0.000251  0.000256  0.000248  0.000251  0.000254  0.000255  0.000256  0.000252  0.000259
 0.000329  0.000252  0.000251  0.000247  0.000238  0.000245  0.00024   0.000248  0.000233  0.000236  0.000226  0.000234  0.000253  0.000238  0.000252  0.00025
 0.000339  0.000224  0.000226  0.000226  0.000225  0.000236  0.000229  0.000229  0.000226  0.000226  0.000224  0.000227  0.000227  0.000224  0.000241  0.000243
 0.000339  0.000228  0.000228  0.000228  0.000216  0.000213  0.000218  0.000213  0.000211  0.000212  0.000213  0.000213  0.00021   0.000226  0.000222  0.000228
 0.000346  0.000252  0.00025   0.000239  0.000241  0.000241  0.00024   0.000246  0.000238  0.000226  0.000229  0.000222  0.000226  0.000223  0.000222  0.000227


Objective value

Objective function value the goal to achieve usually, such as to minimize energy consumption, or to maximize loading. However, in portfolio selection, the objective function is just served as a criterion, our goal is to allocate the fund. Hence, the solution as the portfolio weights, is the main concern.

--- Objective function value (diff in sd, not variance) ---LightenQP/OSQP/Clarabel   [9.24e-14, 6.31e-8, 1.17e-13]
---- quantile 99% ----   [4.56e-15, 1.09e-14, 2.13e-14]
------- median -------   [0.0, 0.0, 1.78e-15]
---- quantile  1% ----   [-8.7e-14, -3.0e-9, -8.19e-14]
18×16 Matrix{Float64}:
 -1.07e-14  -9.24e-14  -8.7e-14   -8.88e-14  -8.7e-14   -6.57e-14  -7.99e-14  -8.35e-14  -6.04e-14  -5.33e-14  -7.28e-14  -5.86e-14  -4.62e-14  -4.8e-14   -4.8e-14   -3.55e-14
 -5.33e-15  -8.88e-15  -8.88e-15  -5.33e-15  -7.11e-15  -7.11e-15  -7.11e-15  -5.33e-15   0.0       -3.55e-15  -3.55e-15   0.0        0.0       -1.78e-15   0.0        0.0
  0.0       -1.78e-15  -3.55e-15  -3.55e-15  -1.78e-15  -1.78e-15  -1.78e-15  -1.78e-15  -1.78e-15  -5.33e-15  -1.78e-15  -1.78e-15  -5.33e-15  -5.33e-15  -3.55e-15  -3.55e-15
 .
 .
 .

Summary

To test the SP500 data, run (uncomment the line in SpeedAccuracy.jl)

#cmpSnA(:SP500, false)  #N = 476,  the full SP500

Here are our limited test result: LightenQP's setting is tweet for portfolio optimization. OSQP and Clarabel's default settings are not tuned for portfolio optimization, so we reset them in uOSQP.jl and uClarabel.jl, respectively.

  • Numerical algorithms always have problems of one kind or another, for accuracy on portfolio weights

    • Interior point solvers, Clarabel and LightenQP, all present the symptom of corner portfolio blur (first column)
    • The Operator Splitting QP Solver, OSQP, presents blur on the efficient portfolios between the first and second corner portfolio (first row)
  • For speeds: all are very fast. However, for SP500 data, OSQP is the fastest around LVEP (Lowest Variance Efficient Portfolio, also called GMVP, Global Minimum Variance Portfolio), but it takes 1000x longer time when compute HMFP (Highest Mean Frontier Portfolio), and becomes the slowest QP solver.

Among these numerical solvers, OSQP is best for accuracy. For speeds, they are in the same class. However, OSQP deteriorate when solving the portfolios approaching the top part of frontier. For these high expected return portfolios, using OSQP should be avoided.

As now we have analytical solver EfficientFrontier.jl (A Quick Example) for portfolio selection, using numerical solvers has become a fallback.

Appendix: in the L version (stdoutL.txt), the OSQP improves a lot.

Clone this wiki locally