Speed and Accuracy
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
- https://github.com/PharosAbad/LightenQP.jl/raw/main/examples/SpeedAccuracy.jl
- https://github.com/PharosAbad/EfficientFrontier.jl/raw/main/examples/uOSQP.jl
- https://github.com/PharosAbad/EfficientFrontier.jl/raw/main/examples/uClarabel.jl
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 range(cp[i], stop=cp[i+1], length=17)[1:end-1]
, say, linspace from the expected return of corner portfolio
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 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
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 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
.
.
.
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
andLightenQP
, 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)
- Interior point solvers,
-
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.