Skip to content
Shinya Morino edited this page May 5, 2019 · 28 revisions

Welcome to sqaod wiki!

Sqaod

Sqaod is a collection of solvers for simulated quantum annealing, providing a high-performance and stable implementation. This package is intended for researchers and engineers to explore various problems on quantum computing with conventional workstations and servers. Sqaod is also available for deployment in commercial use-cases.

Here's a list of useful links for starters:

Version 1.0.3 Released (2018/11/17)

Version 1.0.3 includes one bug fix that was not fixed in 1.0.2. Please update to 1.0.3 if you're using older versions.

  • Fix: QUBO energy was not correctly calculated and in SA algorithms in CUDA-based solver.
  • This version is only for deb and rpm packages. Python packages stay at 1.0.2.

Version 1.0.2 (2018/11/11)

Version 1.0.2 includes miscellaneous bug fixes, which affect annealing behavior. Please update to 1.0.2 if you're using older versions.

  • getSystemE() is added to solvers to calculate system energy during annealing. [#60]
  • sqaod.algorithm.sa_default is added to select default SA algorithms in annealers. [#61]
  • calculate_E() and make_solutions() are not required to get QUBO energy and solutions. These functions are for caching energies and solutions. [#63]
  • Python solvers return copies of objects.[#62]
  • Fix: anneal_one_step() for SA algorithm did not work, since parameters are not correctly passed. [#65]
  • Fix: QUBO energy was not correctly calculated and beta was not correctly applied in SQA algorithms. [#64]
  • Fix: symmetrize() was not correctly handled. [#66]

Future plan

Please visit the 'Release history' page for changes and updates.

Features

Solving annealing problems with simple mathematical definitions.

1. Python

All solvers are callable from python 2.7 and python 3.3 or later.

2. QUBO Graphs

Sqaod is capable to deal with two graphs of dense graph and bipartite graph. These graphs have simple mathematical representations, and directly solved without any modifications.

  • Dense graph is the most generic form of QUBO, and utilized for problems such as TSP.
  • Bipartite graph is for problems that have input and output nodes in graph. An example is RBM.

3. Algorithm

Two solver algorithm, monte-carlo-based simulated quantum annealer and brute-force search are implemented.

  • Monte-carlo based simulated quantum annealer is to get approximated solutions for problems with larger number of bits. One can solve problems with thousands of bits for dense graph and bipartite graph with simulated quantum annealers.
  • Brute-force search is for getting strict solutions for problems with smaller number of bits. With brute-force solvers, strict solutions for problems with 30 bits or larger can be obtained within tens of seconds when high-end GPUs are utilized.

4. Reproducibility

Since sqaod solvers are based on numerical calculation, one can reproduce simulation when parameters are defined.

5. Parallelized and accelerated

Sqaod solvers have CUDA(NVIDIA-GPU)-based and CPU(multicore)-based backends for acceleration.

  • Multi-core CPUs with OpenMP are utilized for CPU-based solvers.
  • NVIDIA GPUs by using CUDA are utilized for GPU-based solvers.

6. Problem size

Since sqaod is a pure software implementation, solvers are able to deal with problems with a large number of bits as long as memory capacity allows. Sqaod is also accelerated by modern high-performance devices such as CPUs and GPUs, and able to solve large sized problems.

Implementation

Sqaod has 3 sub packages for solvers.

language python package description
python sqaod.py Provided to show algorithm.
CPU sqaod.cpu CPU-based solvers, parallelized and accelerated by OpenMP.
CUDA sqaod.cuda GPU solvers, parallelized and accelerated by CUDA.

Examples

Please visit example directory. Examples are provided to show typical procedure to solve optimization problem defined by QUBO.

File name graph algorithm
dense_graph_annealer.py dense graph simulated quantum annealing
bipartite_graph_annealer.py bipartite graph simulated quantum annealing
dense_graph_bf_searcher.py dense graph brute-force searcher
bipartite_graph_bf_searcher.py bipartite graph brute-force searcher