Loading [MathJax]/jax/output/HTML-CSS/jax.js

qml.qaoa.mixers.bit_flip_mixer

bit_flip_mixer(graph, b)[source]

Creates a bit-flip mixer Hamiltonian.

This mixer is defined as:

HM = vV(G)12d(v)XvwN(v)(I + (1)bZw)

where V(G) is the set of vertices of some graph G, d(v) is the degree of vertex v, and N(v) is the neighbourhood of vertex v. In addition, Zv and Xv are the Pauli-Z and Pauli-X operators on vertex v, respectively, and I is the identity operator.

This mixer was introduced in Hadfield et al. (2019).

Parameters
  • graph (nx.Graph or rx.PyGraph) – A graph defining the collections of wires on which the Hamiltonian acts.

  • b (int) – Either 0 or 1. When b=0, a bit flip is performed on vertex v only when all neighbouring nodes are in state |0. Alternatively, for b=1, a bit flip is performed only when all the neighbours of v are in the state |1.

Returns

Mixer Hamiltonian

Return type

Hamiltonian

Example

The mixer Hamiltonian can be called as follows:

>>> from pennylane import qaoa
>>> from networkx import Graph
>>> graph = Graph([(0, 1), (1, 2)])
>>> mixer_h = qaoa.bit_flip_mixer(graph, 0)
>>> mixer_h
(
    0.5 * X(0)
  + 0.5 * (X(0) @ Z(1))
  + 0.25 * X(1)
  + 0.25 * (X(1) @ Z(2))
  + 0.25 * (X(1) @ Z(0))
  + 0.25 * (X(1) @ Z(0) @ Z(2))
  + 0.5 * X(2)
  + 0.5 * (X(2) @ Z(1))
)
>>> import rustworkx as rx
>>> graph = rx.PyGraph()
>>> graph.add_nodes_from([0, 1, 2])
>>> graph.add_edges_from([(0, 1, ""), (1, 2, "")])
>>> mixer_h = qaoa.bit_flip_mixer(graph, 0)
>>> print(mixer_h)
(
    0.5 * X(0)
  + 0.5 * (X(0) @ Z(1))
  + 0.25 * X(1)
  + 0.25 * (X(1) @ Z(2))
  + 0.25 * (X(1) @ Z(0))
  + 0.25 * (X(1) @ Z(0) @ Z(2))
  + 0.5 * X(2)
  + 0.5 * (X(2) @ Z(1))
)