Skip to main content

PyQUBO allows you to create QUBOs or Ising models from mathematical expressions.

Project description

https://img.shields.io/pypi/v/pyqubo.svg https://codecov.io/gh/recruit-communications/pyqubo/branch/master/graph/badge.svg https://readthedocs.org/projects/pyqubo/badge/?version=latest https://circleci.com/gh/recruit-communications/pyqubo.svg?style=svg

PyQUBO

PyQUBO allows you to create QUBOs or Ising models from flexible mathematical expressions easily. Some of the features of PyQUBO are

  • Python based (C++ backend).

  • Fully integrated with Ocean SDK. (details)

  • Automatic validation of constraints. (details)

  • Placeholder for parameter tuning. (details)

For more details, see PyQUBO Documentation.

Example Usage

Creating QUBO

This example constructs a simple expression and compile it to model. By calling model.to_qubo(), we get the resulting QUBO. (This example solves Number Partitioning Problem with a set S = {4, 2, 7, 1})

>>> from pyqubo import Spin
>>> s1, s2, s3, s4 = Spin("s1"), Spin("s2"), Spin("s3"), Spin("s4")
>>> H = (4*s1 + 2*s2 + 7*s3 + s4)**2
>>> model = H.compile()
>>> qubo, offset = model.to_qubo()
>>> pprint(qubo)
{('s1', 's1'): -160.0,
('s1', 's2'): 64.0,
('s2', 's2'): -96.0,
('s3', 's1'): 224.0,
('s3', 's2'): 112.0,
('s3', 's3'): -196.0,
('s4', 's1'): 32.0,
('s4', 's2'): 16.0,
('s4', 's3'): 56.0,
('s4', 's4'): -52.0}

Integration with D-Wave Ocean

PyQUBO can output the BinaryQuadraticModel(BQM) which is compatible with Sampler class defined in D-Wave Ocean SDK. In the example below, we solve the problem with SimulatedAnnealingSampler.

>>> import neal
>>> sampler = neal.SimulatedAnnealingSampler()
>>> bqm = model.to_bqm()
>>> sampleset = sampler.sample(bqm, num_reads=10)
>>> decoded_samples = model.decode_sampleset(sampleset)
>>> best_sample = min(decoded_samples, key=lambda x: x.energy)
>>> best_sample.sample # doctest: +SKIP
{'s1': 0, 's2': 0, 's3': 1, 's4': 0}

If you want to solve the problem by actual D-Wave machines, just replace the sampler by a DWaveCliqueSampler instance, for example.

For more examples, see example notebooks.

Installation

pip install pyqubo

or

python setup.py install

Supported Python Versions

Python 3.5, 3.6, 3.7 and 3.8 are supported.

Supported Operating Systems

  • Linux (32/64bit)

  • OSX (64bit, >=10.9)

  • Win (64bit)

Test

Run all tests.

python -m unittest discover test

Show coverage report.

coverage run -m unittest discover
coverage html

Run test with circleci CLI.

circleci build --job $JOBNAME

Run doctest.

make doctest

Citation

If you use PyQUBO in your research, please cite this paper.

@article{tanahashi2019application,
  title={Application of Ising Machines and a Software Development for Ising Machines},
  author={Tanahashi, Kotaro and Takayanagi, Shinichi and Motohashi, Tomomitsu and Tanaka, Shu},
  journal={Journal of the Physical Society of Japan},
  volume={88},
  number={6},
  pages={061010},
  year={2019},
  publisher={The Physical Society of Japan}
}

Organization

Recruit Communications Co., Ltd.

Licence

Released under the Apache License 2.0.

Contribution

We welcome contributions to this project. See CONTRIBUTING.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyqubo-1.0.0.tar.gz (18.2 kB view hashes)

Uploaded Source

Built Distributions

pyqubo-1.0.0-py3.8-macosx-10.9-x86_64.egg (244.2 kB view hashes)

Uploaded Source

pyqubo-1.0.0-py3.7-macosx-10.9-x86_64.egg (240.8 kB view hashes)

Uploaded Source

pyqubo-1.0.0-py3.6-macosx-10.9-x86_64.egg (240.7 kB view hashes)

Uploaded Source

pyqubo-1.0.0-py3.5-macosx-10.9-x86_64.egg (241.1 kB view hashes)

Uploaded Source

pyqubo-1.0.0-cp38-cp38-win_amd64.whl (205.8 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

pyqubo-1.0.0-cp38-cp38-manylinux1_x86_64.whl (241.6 kB view hashes)

Uploaded CPython 3.8

pyqubo-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl (224.7 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pyqubo-1.0.0-cp37-cp37m-win_amd64.whl (203.6 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

pyqubo-1.0.0-cp37-cp37m-manylinux1_x86_64.whl (247.8 kB view hashes)

Uploaded CPython 3.7m

pyqubo-1.0.0-cp37-cp37m-macosx_10_9_x86_64.whl (221.3 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pyqubo-1.0.0-cp36-cp36m-win_amd64.whl (203.6 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

pyqubo-1.0.0-cp36-cp36m-manylinux1_x86_64.whl (246.7 kB view hashes)

Uploaded CPython 3.6m

pyqubo-1.0.0-cp36-cp36m-macosx_10_9_x86_64.whl (221.2 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

pyqubo-1.0.0-cp35-cp35m-win_amd64.whl (203.6 kB view hashes)

Uploaded CPython 3.5m Windows x86-64

pyqubo-1.0.0-cp35-cp35m-manylinux1_x86_64.whl (246.7 kB view hashes)

Uploaded CPython 3.5m

pyqubo-1.0.0-cp35-cp35m-macosx_10_9_x86_64.whl (221.2 kB view hashes)

Uploaded CPython 3.5m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page