VQE-based portfolio optimization with PennyLane
Project description
Portfolio Optimization via VQE
PyPI: https://pypi.org/project/vqe-portfolio/
Website: https://sidrichardsquantum.github.io/VQE_Portfolio_Optimization/
This package implements portfolio optimization using Variational Quantum Eigensolvers (VQE) as a clean, testable, and reusable Python library, with notebooks acting purely as clients.
Three complementary quantum formulations are provided:
- Binary VQE — asset selection under a cardinality constraint (QUBO → Ising → VQE)
- QAOA — gate-based combinatorial optimization using alternating cost and mixer Hamiltonians
- Fractional VQE — long-only allocation on the simplex using a constraint-preserving quantum parameterization
All core logic lives in src/vqe_portfolio/; notebooks and examples simply call the public API.
Implemented Methods
1. Binary VQE (Asset Selection)
Select exactly K assets by solving a constrained mean–variance problem:
$$ \min_{x \in {0,1}^n} ;\lambda, x^\top \Sigma x ;-;\mu^\top x ;+;\alpha(\mathbf{1}^\top x - K)^2 $$
Highlights
- QUBO formulation mapped to an Ising Hamiltonian
- Configurable ansatz options: RY + CZ ring, RY/RZ + CZ ring, and PennyLane strongly-entangling layers
- VQE minimizes ⟨H⟩ directly
- Outputs include probabilities, samples, Top‑K projections, λ‑sweeps, and efficient frontiers
Notebook client:
notebooks/Binary.ipynbnotebooks/examples/02_Real_Example.ipynb
2. QAOA (Binary Asset Selection)
Solve the same constrained mean–variance problem using the Quantum Approximate Optimization Algorithm (QAOA):
$$ \min_{x \in {0,1}^n} ;\lambda, x^\top \Sigma x ;-;\mu^\top x ;+;\alpha(\mathbf{1}^\top x - K)^2 $$
Highlights
- Uses the same QUBO → Ising mapping as Binary VQE
- Alternating operator ansatz:
- cost unitary $e^{-i\gamma H_C}$
- mixer unitary $e^{-i\beta H_M}$
- Supports:
- standard X mixer
- XY mixer for improved constraint structure
- Produces:
- bitstring samples
- marginal selection probabilities
- Top-K projections
- feasible candidate solutions
- λ-sweeps
Notebook client:
notebooks/QAOA.ipynbnotebooks/examples/03_Real_Example.ipynb
3. Fractional VQE (Continuous Allocation)
Solve the long-only mean–variance problem on the simplex:
$$ \min_{w \in \Delta}; -\mu^\top w + \lambda, w^\top \Sigma w \quad\text{with}\quad \Delta={w\ge0,\sum_i w_i=1} $$
Highlights
- Simplex constraint enforced by construction
- Configurable ansatz options: RY, RY + CZ ring, and RY/RZ + CZ ring
- No penalty tuning required
- Smooth λ‑sweeps with optional warm starts
- Efficient frontier computed from allocations
Notebook clients:
notebooks/Fractional.ipynbnotebooks/examples/01_Real_example.ipynb
Why Quantum Here?
Classical mean–variance portfolio optimization is well understood and efficiently solvable in its simplest form. However, many practically relevant extensions introduce combinatorial structure that scales poorly with problem size.
This project focuses on those regimes.
What is classically easy
- Unconstrained or long-only Markowitz optimization
- Convex quadratic objectives on the simplex
- Small-scale cardinality constraints via heuristics
What becomes hard
- Exact cardinality constraints (select exactly K assets)
- Discrete–continuous hybrid decision spaces
- Exhaustive exploration of correlated asset subsets
- Non-convex penalty landscapes introduced by constraints
These settings naturally map to QUBO / Ising formulations, which are native to near-term quantum algorithms such as VQE and QAOA.
Why VQE is a natural research tool
- VQE directly minimizes ⟨H⟩ for problem-encoded Hamiltonians
- Constraints can be enforced structurally (fractional case) or via penalties (binary case)
- Hybrid quantum–classical loops align with existing optimization workflows
- The framework cleanly supports:
- Ansatz experimentation
- Noise and shot studies
- Warm-started parameter sweeps
What this project does not claim
- Quantum advantage over classical solvers
- Near-term production readiness
- Superiority to specialized classical optimizers
Instead, this repository provides a carefully engineered research baseline for exploring how constrained financial optimization problems behave when expressed in quantum-native representations.
Installation
Base install (quantum algorithms only):
pip install vqe-portfolio
With real market data utilities:
pip install "vqe-portfolio[data]"
With classical Markowitz baseline:
pip install "vqe-portfolio[markowitz]"
For development:
pip install -e ".[dev]"
Repository Structure
src/
└── vqe_portfolio/
├── binary.py # Binary VQE (QUBO / Ising formulation)
├── qaoa.py # QAOA portfolio optimization
├── fractional.py # Fractional VQE (simplex parameterization)
├── frontier.py # Efficient frontier utilities
├── comparison.py # Exact baselines and comparison helpers
├── ansatz.py # Shared circuit ansätze
├── optimize.py # Optimizer loops
├── metrics.py # Risk / return utilities
├── plotting.py # Centralized plotting helpers
├── data.py # Market data utilities
└── types.py # Dataclasses for configs & results
scripts/
├── generate_comparison_results.py # Synthetic baselines and repeatability CSVs
└── generate_ansatz_comparison.py # Compact ansatz comparison CSV
results/
├── synthetic_comparison.csv
├── real_data_comparison.csv
├── generated_comparison_summary.csv
├── generated_repeatability_trials.csv
├── real_data_method_comparison.csv
└── ansatz_comparison.csv
notebooks/
├── Binary.ipynb
├── QAOA.ipynb
├── Fractional.ipynb
├── Benchmark_Comparison.ipynb
├── Real_Data_Comparison.ipynb
├── Ansatz_Comparison.ipynb
├── examples/
│ ├── 01_Real_example.ipynb
│ ├── 02_Real_Example.ipynb
│ └── 03_Real_Example.ipynb
└── images/
tests/
└── test_*.py
Usage
This package can be used both programmatically (Python API) and from the command line (CLI).
See USAGE.md for:
- Command-line interface (CLI) usage
- Minimal API examples
- Synthetic-data quickstart
- Real-data workflows
- Benchmark comparison workflows
- λ-sweeps and efficient frontiers
Additional Documentation
- Theory & derivations:
THEORY.md - Usage & reproducibility:
USAGE.md - Committed benchmark results:
RESULTS.md
Why This Matters
This project demonstrates:
- Mapping financial optimization problems to quantum Hamiltonians
- Clean constraint handling (cardinality vs simplex)
- A strict separation between research code, notebook clients, and benchmark scripts
- Reproducible hybrid quantum–classical workflows
- Production‑grade packaging and CI for quantum algorithms
References
- QUBO overview: https://en.wikipedia.org/wiki/Quadratic_unconstrained_binary_optimization
- PennyLane documentation: https://docs.pennylane.ai
Support development
If this repository is useful for research, learning, or experimentation, you can support continued development via GitHub Sponsors:
https://github.com/sponsors/SidRichardsQuantum
Sponsorship supports continued work on open-source implementations of quantum optimization algorithms, including improvements to documentation, reproducible workflows, example notebooks, and benchmarking utilities.
Support helps maintain accessible reference implementations of VQE and QAOA methods for constrained optimization problems and hybrid quantum–classical experimentation.
Author
Sid Richards
LinkedIn: https://www.linkedin.com/in/sid-richards-21374b30b/
GitHub: https://github.com/SidRichardsQuantum
License
MIT License — see LICENSE
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vqe_portfolio-0.2.3.tar.gz.
File metadata
- Download URL: vqe_portfolio-0.2.3.tar.gz
- Upload date:
- Size: 34.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cc8fb4b9ace8b24de040bd4fcaf5634fb644e8891b47e7f98eac3f157740736
|
|
| MD5 |
0bd2e959282bf17af2cc533599fe254b
|
|
| BLAKE2b-256 |
5a91b71e3b2d64b2de32197a26cfdbb7d3141b830efe2d82ba1776f4e11de7a8
|
Provenance
The following attestation bundles were made for vqe_portfolio-0.2.3.tar.gz:
Publisher:
publish.yml on SidRichardsQuantum/VQE_Portfolio_Optimization
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vqe_portfolio-0.2.3.tar.gz -
Subject digest:
8cc8fb4b9ace8b24de040bd4fcaf5634fb644e8891b47e7f98eac3f157740736 - Sigstore transparency entry: 1470669420
- Sigstore integration time:
-
Permalink:
SidRichardsQuantum/VQE_Portfolio_Optimization@afffaa267d75b00c72328dde0fb7350ffc9aae8e -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/SidRichardsQuantum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@afffaa267d75b00c72328dde0fb7350ffc9aae8e -
Trigger Event:
push
-
Statement type:
File details
Details for the file vqe_portfolio-0.2.3-py3-none-any.whl.
File metadata
- Download URL: vqe_portfolio-0.2.3-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
322637737625cf3f3fd5c73bfd9a187d1f7e4e51f4644323c8a5c0e61a3bb691
|
|
| MD5 |
e9e5bd07204063289520eb69eef56486
|
|
| BLAKE2b-256 |
29003361eac0626e6a79075920f9d4c98c99d82c50d0923da2e7e4b8b011677f
|
Provenance
The following attestation bundles were made for vqe_portfolio-0.2.3-py3-none-any.whl:
Publisher:
publish.yml on SidRichardsQuantum/VQE_Portfolio_Optimization
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vqe_portfolio-0.2.3-py3-none-any.whl -
Subject digest:
322637737625cf3f3fd5c73bfd9a187d1f7e4e51f4644323c8a5c0e61a3bb691 - Sigstore transparency entry: 1470669493
- Sigstore integration time:
-
Permalink:
SidRichardsQuantum/VQE_Portfolio_Optimization@afffaa267d75b00c72328dde0fb7350ffc9aae8e -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/SidRichardsQuantum
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@afffaa267d75b00c72328dde0fb7350ffc9aae8e -
Trigger Event:
push
-
Statement type: