Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions results/20260306_dhruv_windows.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{"problem_name": "qp/portfolio_large", "solver_name": "CLARABEL", "compilation_time": 0.10566091537475586, "solve_time": 0.1790603, "setup_time": null, "total_time": 0.31874770001741126, "status": "optimal", "objective_value": -0.11845479466053731, "num_iters": 10, "problem_type": "QP", "num_scalar_variables": 2000, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 2000, "cvxpy_version": "1.8.1", "solver_version": "CLARABEL", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:33.907487+00:00", "contributor": "dhruv"}
{"problem_name": "qp/portfolio_large", "solver_name": "HIGHS", "compilation_time": 0.042612552642822266, "solve_time": 0.1562458999978844, "setup_time": null, "total_time": 0.2362062999745831, "status": "optimal", "objective_value": -0.11845479927483858, "num_iters": 176, "problem_type": "QP", "num_scalar_variables": 2000, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 2000, "cvxpy_version": "1.8.1", "solver_version": "HIGHS", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.149288+00:00", "contributor": "dhruv"}
{"problem_name": "qp/portfolio_large", "solver_name": "OSQP", "compilation_time": 0.03833127021789551, "solve_time": 0.29224459999999997, "setup_time": null, "total_time": 0.3394095000112429, "status": "optimal", "objective_value": -0.11845479927483929, "num_iters": 550, "problem_type": "QP", "num_scalar_variables": 2000, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 2000, "cvxpy_version": "1.8.1", "solver_version": "OSQP", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.493458+00:00", "contributor": "dhruv"}
{"problem_name": "qp/portfolio_large", "solver_name": "SCIPY", "compilation_time": null, "solve_time": null, "setup_time": null, "total_time": 0.0003561000048648566, "status": "solver_error", "objective_value": null, "num_iters": null, "problem_type": "QP", "num_scalar_variables": 2000, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 2000, "cvxpy_version": "1.8.1", "solver_version": "", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.500011+00:00", "contributor": "dhruv"}
{"problem_name": "qp/portfolio_large", "solver_name": "SCS", "compilation_time": 0.04887056350708008, "solve_time": 0.31787079999999995, "setup_time": 0.026249500000000002, "total_time": 0.39838179998332635, "status": "optimal", "objective_value": -0.11845405674731666, "num_iters": 525, "problem_type": "QP", "num_scalar_variables": 2000, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 2000, "cvxpy_version": "1.8.1", "solver_version": "SCS", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.901465+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_small", "solver_name": "CLARABEL", "compilation_time": 0.004888772964477539, "solve_time": 0.001065, "setup_time": null, "total_time": 0.006660699989879504, "status": "optimal", "objective_value": 0.0002597606131069493, "num_iters": 9, "problem_type": "QP", "num_scalar_variables": 50, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 50, "cvxpy_version": "1.8.1", "solver_version": "CLARABEL", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.923483+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_small", "solver_name": "HIGHS", "compilation_time": 0.0042154788970947266, "solve_time": 0.001967000018339604, "setup_time": null, "total_time": 0.007648599974345416, "status": "optimal", "objective_value": 0.00025976013848479513, "num_iters": 143, "problem_type": "QP", "num_scalar_variables": 50, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 50, "cvxpy_version": "1.8.1", "solver_version": "HIGHS", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.934212+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_small", "solver_name": "OSQP", "compilation_time": 0.003573894500732422, "solve_time": 0.0004896, "setup_time": null, "total_time": 0.0061113999981898814, "status": "optimal", "objective_value": 0.000259760138484762, "num_iters": 50, "problem_type": "QP", "num_scalar_variables": 50, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 50, "cvxpy_version": "1.8.1", "solver_version": "OSQP", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.943348+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_small", "solver_name": "SCIPY", "compilation_time": null, "solve_time": null, "setup_time": null, "total_time": 0.00024210000992752612, "status": "solver_error", "objective_value": null, "num_iters": null, "problem_type": "QP", "num_scalar_variables": 50, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 50, "cvxpy_version": "1.8.1", "solver_version": "", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.947202+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_small", "solver_name": "SCS", "compilation_time": 0.0046880245208740234, "solve_time": 0.000127, "setup_time": 0.0002821, "total_time": 0.005818600009661168, "status": "optimal", "objective_value": 0.0002597601288857309, "num_iters": 25, "problem_type": "QP", "num_scalar_variables": 50, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 50, "cvxpy_version": "1.8.1", "solver_version": "SCS", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:34.957040+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_medium", "solver_name": "CLARABEL", "compilation_time": 0.06456303596496582, "solve_time": 0.1214088, "setup_time": null, "total_time": 0.2096603999962099, "status": "optimal", "objective_value": 2.118578042230701e-05, "num_iters": 7, "problem_type": "QP", "num_scalar_variables": 500, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 500, "cvxpy_version": "1.8.1", "solver_version": "CLARABEL", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:35.351168+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_medium", "solver_name": "HIGHS", "compilation_time": 0.07010722160339355, "solve_time": 0.37664390000281855, "setup_time": null, "total_time": 0.49977530000614934, "status": "optimal", "objective_value": 2.1185435511323312e-05, "num_iters": 1497, "problem_type": "QP", "num_scalar_variables": 500, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 500, "cvxpy_version": "1.8.1", "solver_version": "HIGHS", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:36.068529+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_medium", "solver_name": "OSQP", "compilation_time": 0.07428789138793945, "solve_time": 0.0788078, "setup_time": null, "total_time": 0.1605682999943383, "status": "optimal", "objective_value": 2.1185435511323264e-05, "num_iters": 50, "problem_type": "QP", "num_scalar_variables": 500, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 500, "cvxpy_version": "1.8.1", "solver_version": "OSQP", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:36.423339+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_medium", "solver_name": "SCIPY", "compilation_time": null, "solve_time": null, "setup_time": null, "total_time": 0.0002442999975755811, "status": "solver_error", "objective_value": null, "num_iters": null, "problem_type": "QP", "num_scalar_variables": 500, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 500, "cvxpy_version": "1.8.1", "solver_version": "", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:36.703979+00:00", "contributor": "dhruv"}
{"problem_name": "qp/risk_parity_medium", "solver_name": "SCS", "compilation_time": 0.06734466552734375, "solve_time": 0.007136, "setup_time": 0.0399389, "total_time": 0.12719250001828186, "status": "optimal", "objective_value": 2.1185434418243035e-05, "num_iters": 25, "problem_type": "QP", "num_scalar_variables": 500, "num_scalar_eq_constr": 1, "num_scalar_leq_constr": 500, "cvxpy_version": "1.8.1", "solver_version": "SCS", "python_version": "3.13.12", "os_info": "Windows 11", "cpu_info": "Intel64 Family 6 Model 154 Stepping 4, GenuineIntel", "timestamp": "2026-03-06T10:20:37.149792+00:00", "contributor": "dhruv"}
52 changes: 52 additions & 0 deletions src/solver_benchmarks/problems/qp.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,55 @@ def elastic_net_bikeshare(seed: int = 0) -> cp.Problem:
penalty2 = cp.norm2(x_sparse) / n_sparse + cp.norm2(x_dense)

return cp.Problem(cp.Minimize(SSE + penalty1 + penalty2))
@register_problem(
"qp/portfolio_large",
tags=["qp", "large"],
description="Large portfolio optimization (2000 assets)",
)
def portfolio_large(seed: int = 0) -> cp.Problem:
rng = np.random.default_rng(seed)
n = 2000
mu = rng.standard_normal(n) * 0.05
F = rng.standard_normal((n, 50)) * 0.1
Sigma_sqrt = F
gamma = 1.0

x = cp.Variable(n)
ret = mu @ x
risk = cp.sum_squares(Sigma_sqrt.T @ x)
constraints = [cp.sum(x) == 1, x >= 0]
return cp.Problem(cp.Minimize(-ret + gamma * risk), constraints)


@register_problem(
"qp/risk_parity_small",
tags=["qp", "small", "finance"],
description="Risk parity portfolio optimization (50 assets)",
)
def risk_parity_small(seed: int = 0) -> cp.Problem:
rng = np.random.default_rng(seed)
n = 50
F = rng.standard_normal((n, 10)) * 0.1
Sigma = F @ F.T + 0.01 * np.eye(n)

x = cp.Variable(n)
risk = cp.quad_form(x, Sigma)
constraints = [cp.sum(x) == 1, x >= 0]
return cp.Problem(cp.Minimize(risk), constraints)


@register_problem(
"qp/risk_parity_medium",
tags=["qp", "medium", "finance"],
description="Risk parity portfolio optimization (500 assets)",
)
def risk_parity_medium(seed: int = 0) -> cp.Problem:
rng = np.random.default_rng(seed)
n = 500
F = rng.standard_normal((n, 30)) * 0.1
Sigma = F @ F.T + 0.01 * np.eye(n)

x = cp.Variable(n)
risk = cp.quad_form(x, Sigma)
constraints = [cp.sum(x) == 1, x >= 0]
return cp.Problem(cp.Minimize(risk), constraints)
2 changes: 1 addition & 1 deletion tests/test_problems.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def test_problem_names_have_type_prefix():

def test_problems_have_type_tag():
"""Each problem should have a type tag matching its prefix."""
valid_types = {"lp", "qp", "socp", "sdp", "mip"}
valid_types = {"lp", "qp", "socp", "sdp", "mip","ecp"}
for spec in list_problems():
prefix = spec.name.split("/")[0]
assert prefix in valid_types, f"{spec.name} has unknown prefix '{prefix}'"
Expand Down