feat(portfolio): add CARA, convex, mean-variance & ERC portfolio optimization module

New Rust portfolio_optimization module with PyO3 bindings:
- CARA/CRRA utility maximization via projected gradient descent
- General-purpose convex objective solver on simplex (ProjectedGradientSolver)
- Mean-variance optimization (max Sharpe, target return, min variance)
- Equal Risk Contribution (ERC) portfolio allocation
- Python bindings: cara_optimal_weights, mean_variance_optimal_weights,
  min_variance_weights, erc_weights
- 6/6 unit tests passing

Convergence fix: removed gradient-norm criterion on simplex boundary
(projected gradient never vanishes at constrained optimum).
Default learning rate increased from 0.005 to 0.1.
This commit is contained in:
ThotDjehuty
2026-04-15 03:08:08 +02:00
parent 58c3793b66
commit e67b0f8376
8 changed files with 889 additions and 0 deletions
+19
View File
@@ -50,6 +50,20 @@ except (ImportError, AttributeError):
MFGConfig = None
solve_mfg_1d_rust = None
# Portfolio Optimization (CARA, Mean-Variance, ERC)
try:
from optimizr._core import (
cara_optimal_weights,
mean_variance_optimal_weights,
min_variance_weights,
erc_weights,
)
except (ImportError, AttributeError):
cara_optimal_weights = None
mean_variance_optimal_weights = None
min_variance_weights = None
erc_weights = None
__version__ = "0.2.0"
__all__ = [
"HMM",
@@ -83,4 +97,9 @@ __all__ = [
# Mean Field Games
"MFGConfig",
"solve_mfg_1d_rust",
# Portfolio Optimization
"cara_optimal_weights",
"mean_variance_optimal_weights",
"min_variance_weights",
"erc_weights",
]