minorminer#
Reference documentation for minorminer:
About minorminer#
minorminer is a heuristic tool for minor embedding: given a minor and target graph, it tries to find a mapping that embeds the minor into the target.
The primary utility function, find_embedding()
, is an implementation of
the heuristic algorithm described in [1]. It accepts various optional parameters
used to tune the algorithm’s execution or constrain the given problem.
This implementation performs on par with tuned, non-configurable implementations while providing users with hooks to easily use the code as a basic building block in research.
[1] https://arxiv.org/abs/1406.2741
Another function, find_clique_embedding()
, can be used to find clique
embeddings for Chimera, Pegasus, and Zephyr graphs in polynomial time. It is an
implementation of the algorithm described in [2]. There are additional utilities
for finding biclique embeddings as well.
[2] https://arxiv.org/abs/1507.04774
Examples#
from minorminer import find_embedding
# A triangle is a minor of a square.
triangle = [(0, 1), (1, 2), (2, 0)]
square = [(0, 1), (1, 2), (2, 3), (3, 0)]
# Find an assignment of sets of square variables to the triangle variables
embedding = find_embedding(triangle, square, random_seed=10)
print(len(embedding)) # 3, one set for each variable in the triangle
print(embedding)
# We don't know which variables will be assigned where, here are a
# couple possible outputs:
# [[0, 1], [2], [3]]
# [[3], [1, 0], [2]]
# We can insist that variable 0 of the triangle will always be assigned to [2]
embedding = find_embedding(triangle, square, fixed_chains={0: [2]})
print(embedding)
# [[2], [3, 0], [1]]
# [[2], [1], [0, 3]]
# And more, but all of them start with [2]
# If we didn't want to force variable 0 to stay as [2], but we thought that
# was a good start we could provide it as an initialization hint instead.
embedding = find_embedding(triangle, square, initial_chains={0: [2]})
print(embedding)
# [[2], [0, 3], [1]]
# [[0], [3], [1, 2]]
# Output where variable 0 has switched to something else is possible again.
import networkx as nx
# An example on some less trivial graphs
# We will try to embed a fully connected graph with 6 nodes, into a
# random regular graph with degree 3.
clique = nx.complete_graph(6).edges()
target_graph = nx.random_regular_graph(d=3, n=30).edges()
embedding = find_embedding(clique, target_graph)
print(embedding)
# There are many possible outputs for this, sometimes it might even fail
# and return an empty list
A more fleshed out example can be found under examples/fourcolor.py
cd examples
pip install -r requirements.txt
python fourcolor.py
Introduction#
minorminer is a library of tools for finding graph minor embeddings, developed to embed Ising problems onto quantum annealers (QA). While this library can be used to find minors in arbitrary graphs, it is particularly geared towards state-of-the-art QA: problem graphs of a few to a few hundred variables, and hardware graphs of a few thousand qubits.
minorminer has both a Python and C++ API, and includes implementations of multiple embedding algorithms to best fit different problems.
Minor-Embedding and QPU Topology#
For an introduction to minor-embedding, see the Minor Embedding section.
For an introduction to the topologies of D-Wave hardware graphs, see the Topologies section and the Exploring Pegasus Jupyter Notebook that explains the Advantage architecture in further detail.
Minor-embedding can be done manually, though typically for very small problems only. For a walkthrough of the manual minor-embedding process, see the SAT: Formulate, Embed, and Submit section.
Minor-Embedding in Ocean#
Minor-embedding can also be automated through Ocean. minorminer is used by
several Ocean embedding composites for this purpose.
For details on automated (and manual) minor-embedding through
Ocean, see how the EmbeddingComposite
and
FixedEmbeddingComposite
classes are used
in this Boolean AND Gate example.
Once an embedding has been found, D-Wave’s Problem Inspector tool can be used to evaluate its quality. See the Using the Problem Inspector section for more information.
Usage Information#
Concepts for terminology
Minor Embedding for an introduction to minor embedding
Minor-Embedding: Best Practices provides advanced guidance
Examples in the AND Gate: Minor-Embedding, Logic Circuit: Embedding Effects, and Using the Problem Inspector sections show through some simple examples how to embed and set chain strength.