Skip to content

A research-style project that solves the mean-variance portfolio optimization problem with a cardinality constraint using integer programming. This model captures the real-world need to limit the number of assets in a portfolio, introducing combinatorial complexity and paving the way for quantum-inspired methods.

Notifications You must be signed in to change notification settings

mirkovicdev/Cardinality-Constrained-Portfolio-Optimization

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 

Repository files navigation

Cardinality-Constrained Portfolio Optimization

This project explores portfolio optimization under cardinality constraints, where the number of assets selected in a portfolio is explicitly limited. Using integer programming, the project demonstrates how adding a cardinality constraint transforms a convex Markowitz optimization problem into a combinatorial, non-convex challengeβ€”motivating the need for advanced solvers and quantum-inspired approaches.


🧠 What It Does

Given:

  • A covariance matrix of asset returns $$\Sigma$$
  • A vector of expected returns $$\mu$$
  • A target expected return $$r^*$$
  • A cardinality limit $$K$$ (max number of non-zero assets)

The optimizer solves:

$$ \min_w \quad w^T \Sigma w \quad \text{subject to:} $$

  • $\sum w_i = 1$ (fully invested)
  • $\mu^T w \geq r^*$ (target return)
  • $w_i \leq z_i, \quad z_i \in {0, 1}$ (selection constraint)
  • $\sum z_i \leq K$ (cardinality constraint)
  • $w_i \geq 0$ (long-only)

πŸ” Features

  • βœ… Solves the cardinality-constrained minimum-variance problem
  • βœ… Compares with the unconstrained Markowitz solution
  • βœ… Uses mip for mixed-integer quadratic programming
  • βœ… Visualizes how limiting asset count affects portfolio composition and performance
  • βœ… Prepares groundwork for future QUBO or quantum annealing implementations

πŸ“Š Visualization

  • Efficient frontier with vs. without cardinality constraint
  • Portfolio weights vs. cardinality limit
  • Risk-return tradeoff curves and asset sparsity plots

πŸ“¦ Requirements

  • Python 3.x
  • NumPy
  • Matplotlib
  • mip (Mixed Integer Programming)

Install dependencies:

pip install numpy matplotlib mip

About

A research-style project that solves the mean-variance portfolio optimization problem with a cardinality constraint using integer programming. This model captures the real-world need to limit the number of assets in a portfolio, introducing combinatorial complexity and paving the way for quantum-inspired methods.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published