Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
.. image:: https://img.shields.io/pypi/v/pyqubo.svg :target: https://pypi.python.org/pypi/pyqubo
.. image:: https://codecov.io/gh/recruit-communications/pyqubo/branch/master/graph/badge.svg :target: https://codecov.io/gh/recruit-communications/pyqubo
.. image:: https://readthedocs.org/projects/pyqubo/badge/?version=latest :target: http://pyqubo.readthedocs.io/en/latest/?badge=latest
.. image:: https://static.pepy.tech/badge/pyqubo :target: https://www.pepy.tech/projects/pyqubo
.. image:: https://github.com/recruit-communications/pyqubo/actions/workflows/build_and_upolad.yaml/badge.svg :target: https://github.com/recruit-communications/pyqubo/actions/workflows/build_and_upolad.yaml
.. index-start-marker1
PyQUBO allows you to create QUBOs or Ising models from flexible mathematical expressions easily. Some of the features of PyQUBO are
details <https://github.com/recruit-communications/pyqubo#integration-with-d-wave-ocean>
__)details <https://pyqubo.readthedocs.io/en/latest/getting_started.html#validation-of-constraints>
__)details <https://pyqubo.readthedocs.io/en/latest/getting_started.html#placeholder>
__)For more details, see PyQUBO Documentation <https://pyqubo.readthedocs.io/>
_.
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 <https://en.wikipedia.org/wiki/Partition_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) # doctest: +SKIP
{('s1', 's1'): -160.0,
('s1', 's2'): 64.0,
('s1', 's3'): 224.0,
('s1', 's4'): 32.0,
('s2', 's2'): -96.0,
('s2', 's3'): 112.0,
('s2', 's4'): 16.0,
('s3', 's3'): -196.0,
('s3', 's4'): 56.0,
('s4', 's4'): -52.0}
.. _integration:
Integration with D-Wave Ocean
PyQUBO can output the BinaryQuadraticModel(BQM) <https://docs.ocean.dwavesys.com/en/stable/docs_dimod/reference/bqm.html>
_
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 <https://github.com/recruit-communications/pyqubo/tree/master/notebooks>
_.
Since the core logic of the new PyQUBO (>=1.0.0) is written in C++ and the logic itself is also optimized, the execution time to produce QUBO has become shorter. We benchmarked the execution time to produce QUBOs of TSP with the new PyQUBO (1.0.0) and the previous PyQUBO (0.4.0). The result shows the new PyQUBO runs 1000 times faster as the problem size increases.
.. image:: https://raw.githubusercontent.com/recruit-communications/pyqubo/master/images/benchmark.svg :scale: 60% :width: 550 :height: 440 :align: center
Execution time includes building Hamiltonian, compilation, and producing QUBOs. The code to produce the above result is found in here <https://github.com/recruit-communications/pyqubo/tree/master/benchmark/>
_.
.. code-block:: shell
pip install pyqubo
or
.. code-block:: shell
python -m pip install .
Python 3.8, 3.9, 3.10, 3.11, 3.12, 3.13 are supported.
.. index-end-marker1
Run all tests.
.. code-block:: shell
export USE_TEST=1
python -m unittest discover tests
Show coverage report.
.. code-block:: shell
export USE_TEST=1
coverage run -m unittest discover
coverage html
Run doctest.
.. code-block:: shell
make doctest
This repository contains the source code of cimod <https://github.com/OpenJij/cimod>
_ which is licensed under the Apache License 2.0.
cimod <https://github.com/OpenJij/cimod>
_ is the C++ header-only library for a binary quadratic model, developed by OpenJij <https://github.com/OpenJij>
_.
If you use PyQUBO in your research, please cite the following papers ([M. Zaman, et al., 2021] <https://ieeexplore.ieee.org/document/9369010>
, [K. Tanahashi, et al., 2019] <https://journals.jps.jp/doi/full/10.7566/JPSJ.88.061010>
).
::
@article{zaman2021pyqubo,
title={PyQUBO: Python Library for QUBO Creation},
author={Zaman, Mashiyat and Tanahashi, Kotaro and Tanaka, Shu},
journal={IEEE Transactions on Computers},
year={2021},
publisher={IEEE}
}
@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}
}
Recruit Communications Co., Ltd.
Released under the Apache License 2.0.
We welcome contributions to this project. See CONTRIBUTING <./CONTRIBUTING.rst>
_.
We thank all contributors, especially @tail-island and @29rou.
FAQs
PyQUBO allows you to create QUBOs or Ising models from mathematical expressions.
We found that pyqubo demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.