Skip to content

Hybrid classical/quantum portfolio optimizer: cleans S&P 500 data, solves Markowitz baselines with CVXPY, maps penalties into QAOA circuits, and applies ZNE/M3/DD mitigation. Includes simulation & IBM hardware runners plus analysis/visualization tooling, Mermaid diagrams, and Python‑3.11-friendly setup.

Notifications You must be signed in to change notification settings

3yit/Quantum-Enhanced-Portfolio-Optimization-with-NISQ-Era-ErrorMitigation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Quantum-Enhanced Portfolio Optimization with NISQ-Era Error Mitigation

Hybrid classical/quantum portfolio optimization with QAOA, KKT-informed penalties, and practical noise-mitigation technique, this is a work in progress.

The pipeline:

  • Data Preparation: Fetches and cleans historical price data from the S&P 500, calculates annualized returns and covariance matrices.
  • Classical Benchmark: Solves the continuous Markowitz problem using CVXPY, providing a performance baseline and extracting KKT multipliers to inform the quantum model.
  • Quantum Formulation: Maps the portfolio problem to a QUBO and constructs the corresponding QAOA circuits.
  • Noise Mitigation: Implements a suite of techniques—including Zero-Noise Extrapolation (ZNE) and measurement error mitigation—to improve results on real hardware.
  • Experiments: Runs simulations with noise-free statevector simulators and prepares for execution on IBM Quantum systems.

Research questions

  • How do QAOA-derived portfolios compare to the classical optimum (objective, Sharpe)?
  • Which mitigation strategies deliver the largest practical gains on NISQ hardware?
  • How do classical duals (KKT multipliers) guide quantum penalty selection?

Repository Map

├── analysis/                # Post-processing: performance tables, plots, LaTeX
│   ├── results_analysis.py
│   └── visualization.py
├── data/                    # Raw price data & downloader script
├── docs/diagrams/           # Mermaid diagrams (professional & simplified)
├── experiments/             # Simulation & hardware experiment drivers
│   ├── simulation_runs.py
│   └── hardware_runs.py
├── outputs/                 # Generated results/figures 
├── src/
│   ├── data_loader.py       # CSV cleaning, universe selection, stats
│   ├── classical_optimizer.py
│   ├── quantum_circuits.py
│   └── error_mitigation.py
├── requirements.txt
└── README.md              

Mermaid System Overview

%%{init: {"theme": "neutral"}}%%
graph TD
    subgraph Data_Preparation
        A1[load_price_history] --> A2[Clean index & gaps]
        A2 --> A3[select_universe]
        A3 --> A4[compute_return_statistics → μ, Σ]
    end

    subgraph Classical_Benchmark
        A4 --> B1[build_quadratic_program]
        B1 --> B2[solve_relaxed_problem]
        B2 --> B3[export_results JSON]
        B2 --> B4[calibrate_penalties]
    end

    subgraph Quantum_Pipeline
        A4 --> C1[build_qubo_hamiltonians]
        B4 --> C1
        C1 --> C2[construct_qaoa_circuit]
    end

    subgraph Mitigation
        C2 --> D1[build_mitigation_pipeline]
        D1 --> D2[Zero-noise extrapolation]
        D1 --> D3[Measurement mitigation]
        D1 --> D4[Dynamical decoupling]
    end

    subgraph Experiments
        C2 --> E1[run_simulation_sweep]
        D1 --> E1
        C2 --> E2[execute_hardware_campaign]
        D1 --> E2
    end

    E1 --> F1[Compare vs classical objective / Sharpe]
    E2 --> F1
Loading

Additional subsystem diagrams (docs/diagrams/) break down data prep, classical benchmark, quantum stack, mitigation, and experiment orchestration in professional & simplified variants.

Setup

  1. Install Python 3.11 (Qiskit requires ≤3.11 as of October 2025):
    brew install python@3.11          # or use python.org installer
    python3.11 -m venv venv
    source venv/bin/activate
  2. Install dependencies:
    python -m pip install --upgrade pip
    python -m pip install -r requirements.txt
  3. IBM Quantum credentials (for hardware execution):
    python - <<'PY'
    from qiskit_ibm_runtime import QiskitRuntimeService
    QiskitRuntimeService.save_account(
        channel="ibm_quantum",
        token="YOUR_API_TOKEN",
        instance="hub/group/project"  
    )
    PY

About

Hybrid classical/quantum portfolio optimizer: cleans S&P 500 data, solves Markowitz baselines with CVXPY, maps penalties into QAOA circuits, and applies ZNE/M3/DD mitigation. Includes simulation & IBM hardware runners plus analysis/visualization tooling, Mermaid diagrams, and Python‑3.11-friendly setup.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages