QAOAKit: A Toolkit for Reproducible Application and Verification of QAOA
Installation
Recommended: create an Anaconda environment
conda create -n qaoa python=3
conda activate qaoa
Note that current implementation requires significant amounts of RAM (~5GB) as it loads the entire dataset into memory. Linux and macOS are currently supported.
pip install QAOAKit
python -m QAOAKit.build_tables
Example
import networkx as nx
from qiskit.providers.aer import AerSimulator
from QAOAKit import opt_angles_for_graph, angles_to_qaoa_format
from QAOAKit.qaoa import get_maxcut_qaoa_circuit
# build graph
G = nx.star_graph(5)
# grab optimal angles
p = 3
angles = angles_to_qaoa_format(opt_angles_for_graph(G,p))
# build circuit
qc = get_maxcut_qaoa_circuit(G, angles['beta'], angles['gamma'])
qc.measure_all()
# run circuit
backend = AerSimulator()
print(backend.run(qc).result().get_counts())
Almost all counts you get should correspond to one of the two optimal MaxCut solutions for star graph: 000001 or 111110.
For graphs where no pre-optimized angles are available, the angles from "The fixed angle conjecture for QAOA on regular MaxCut graphs" (arXiv:2107.00677) will be returned.
Advanced usage
More advanced examples are available in examples folder:
- Using optimal parameters in state-of-the-art tensor network QAOA simulator QTensor:
examples/qtensor_get_energy.py - Transferring parameters to large unseen instances: unweighted (
examples/Transferability_to_unseen_instances.ipynb) and weighted (examples/weighted_transfer.ipynb) - Exploring the role of problem structure in QAOA performance
examples/QAOA_symmetry_and_performance.ipynb - Exploring the performance of QAOA on small graphs as a function of average degree:
examples/performance.ipynb - Running classical algorithms for MaxCut:
examples/classical_algorithms.py - Comparing QAOA with classical algorithms for MaxCut:
examples/classical_vs_quantum.ipynb - Clustering degenerate QAOA angles:
examples/degenerate_optima_in_angle_space.py
Citation
Please cite the following paper when using QAOAKit:
@inproceedings{Shaydulin2021,
doi = {10.1109/qcs54837.2021.00011},
url = {https://doi.org/10.1109/qcs54837.2021.00011},
year = {2021},
month = nov,
publisher = {{IEEE}},
author = {Ruslan Shaydulin and Kunal Marwaha and Jonathan Wurtz and Phillip C. Lotshaw},
title = {{QAOAKit}: A Toolkit for Reproducible Study, Application, and Verification of the {QAOA}},
booktitle = {2021 {IEEE}/{ACM} Second International Workshop on Quantum Computing Software ({QCS})}
}
Consider citing relevant papers for the particular dataset you use as well.
Install from source
git clone https://github.com/QAOAKit/QAOAKit.git
cd QAOAKit
pip install -e .
python -m QAOAKit.build_tables
pytest
Nauty installation issues
If you have an issue like "Illegal Instruction (core dumped)", you may have to force pip to recompile Nauty binaries (pip install --no-binary pynauty pynauty), use conda (conda install -c conda-forge pynauty) or install Nauty separately: https://pallini.di.uniroma1.it/
Contributing
You should set up the linter to run before every commit.
pip install pre-commit
pre-commit install
Note that linter checks passing is a necessary condition for your contribution to be reviewed.
We are in the process of moving the codebase to numpy-style docstrings. See documentation here: https://numpydoc.readthedocs.io/en/latest/format.html
Metadata
Release files for QAOAKit 0.1.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| QAOAKit-0.1.13.tar.gz | 21.1 kB | Without provenance | Details for QAOAKit-0.1.13.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| QAOAKit-0.1.13-py3-none-any.whl | Python 3 | none | any | Details for QAOAKit-0.1.13-py3-none-any.whl |
Total release size: 39.2 kB
Release files / QAOAKit-0.1.13.tar.gz
| Download URL | QAOAKit-0.1.13.tar.gz |
|---|---|
| Size | 21.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f33f3b8d0135e1fbd6b097891fd4e04ea17bb4727126a66ae47508292d8d9c6b
|
|
BLAKE2b-256 checksum How to use checksums |
2bb137f9d2260f75de5b0b3fce2629b1c3016e53569a33133430eb06f6606cfe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.10.4
|
Release files / QAOAKit-0.1.13-py3-none-any.whl
| Download URL | QAOAKit-0.1.13-py3-none-any.whl |
|---|---|
| Size | 18.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0bd598e0ea8c2efc663c6242534c157a0c7a9562cb9f98fde36159f3cad803cb
|
|
BLAKE2b-256 checksum How to use checksums |
db9b7aba566a67b9eb6eb1c779dc5d7231e0cc04077d746086d43233a37d2830
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.0 CPython/3.10.4
|
Security for QAOAKit 0.1.13
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.