Introduction

dwave-system enables easy incorporation of the D-Wave system as a sampler—the component used to find variable values that minimize the binary quadratic model (BQM) representing a problem—in the typical Ocean problem-solving procedure:

  1. Formulate the problem as a BQM.
  2. Solve the BQM with a sampler.

Example

This example solves a small example of a known graph problem, minimum vertex cover. It uses the NetworkX graphic package to create the problem, Ocean’s dwave_networkx to formulate the graph problem as a BQM, and dwave-system’s DWaveSampler() to use a D-Wave system as the sampler. (Access to a D-Wave system has been set up in a configuration file that is used implicitly.) dwave-system’s EmbeddingComposite() handles mapping between the problem graph to the D-Wave system’s numerically indexed qubits, a mapping known as minor-embedding.

>>> import networkx as nx
>>> import dwave_networkx as dnx
>>> from dwave.system.samplers import DWaveSampler
>>> from dwave.system.composites import EmbeddingComposite
...
>>> s5 = nx.star_graph(4)  # a star graph where node 0 is hub to four other nodes
>>> sampler = EmbeddingComposite(DWaveSampler())
>>> print(dnx.min_vertex_cover(s5, sampler))
[0]

Using the D-Wave System as a Sampler

The dimod API makes it possible to easily interchange samplers in your code. For example, you might develop code using dwave_neal, Ocean’s simulated annealing sampler, and then swap in a D-Wave system composed sampler.

Using a D-Wave System explains how you set up access to a D-Wave system.

D-Wave System Documentation describes the D-Wave system, its features, parameters, and properties. The documentation provides guidance on programming the D-Wave system, including how to formulate problems and configure parameters.

Samplers

Samplers are processes that sample from low energy states of a problem’s objective function. A BQM sampler samples from low energy states in models such as those defined by an Ising equation or a Quadratic Unconstrained Binary Optimization (QUBO) problem and returns an iterable of samples, in order of increasing energy.

Ocean software provides a variety of dimod samplers, which all support ‘sample_qubo’ and ‘sample_ising’ methods as well as the generic BQM sampler method. In addition to DWaveSampler(), classical solvers, which run on CPU or GPU, are available and useful for developing code or on a small versions of a problem to verify code.

Composites

Samplers can be composed. The composite pattern allows layers of pre- and post-processing to be applied to binary quadratic programs without needing to change the underlying sampler implementation. We refer to these layers as composites. A composed sampler includes at least one sampler and possibly many composites.

Examples of composites are EmbeddingComposite(), used in the example above, and VirtualGraphComposite(), both of which handle the mapping known as minor-embedding.

Embedding

To solve an arbitrarily posed binary quadratic problem on a D-Wave system requires mapping, called minor embedding, to a Chimera graph that represents the system’s quantum processing unit. This preprocessing can be done by a composed sampler consisting of the DWaveSampler() and a composite that performs minor-embedding.

See the Embedding section for more information on minor-embedding and the provided functionality.