qml.qaoa.cycle.out_flow_constraint

out_flow_constraint(graph)[source]

Calculates the out flow constraint Hamiltonian for the maximum-weighted cycle problem.

Given a subset of edges in a directed graph, the out-flow constraint imposes that at most one edge can leave any given node, i.e., for all \(i\):

\[\sum_{j,(i,j)\in E}x_{ij} \leq 1,\]

where \(E\) are the edges of the graph and \(x_{ij}\) is a binary number that selects whether to include the edge \((i, j)\).

A set of edges satisfies the out-flow constraint whenever the following Hamiltonian is minimized:

\[\sum_{i\in V}\left(d_{i}^{out}(d_{i}^{out} - 2)\mathbb{I} - 2(d_{i}^{out}-1)\sum_{j,(i,j)\in E}\hat{Z}_{ij} + \left( \sum_{j,(i,j)\in E}\hat{Z}_{ij} \right)^{2}\right)\]

where \(V\) are the graph vertices, \(d_{i}^{\rm out}\) is the outdegree of node \(i\), and \(Z_{ij}\) is a qubit Pauli-Z matrix acting upon the qubit specified by the pair \((i, j)\). Mapping from edges to wires can be achieved using edges_to_wires().

Parameters

graph (nx.DiGraph or rx.PyDiGraph) – the directed graph specifying possible edges

Returns

the out flow constraint Hamiltonian

Return type

qml.Hamiltonian

Raises

ValueError – if the input graph is not directed