qrisp.qaoa.controlled_RX_mixer_gen#
- controlled_RX_mixer_gen(predicate)[source]#
Generate a controlled RX mixer for a given predicate function.
- Parameters:
- predicatefunction
A function receiving a
QuantumVariableand an index \(i\). This function returns aQuantumBoolindicating if the predicate is satisfied forqv[i], that is, if the elementqv[i]should be swapped in.
- Returns:
- controlled_RX_mixerfunction
A function receiving a
QuantumVariableand a real parameter \(\beta\). This function performs the application of the mixing operator.
Examples
We define the predicate function for the MaxIndepSet problem. It returns
Truefor the index (node) \(i\) if all neighbors \(j\) of the node \(i\) in the graph \(G\) are not selected, andFalseotherwise.from qrisp import QuantumVariable, QuantumBool, h, mcx, auto_uncompute, multi_measurement import networkx as nx G = nx.Graph() G.add_edges_from([(0, 1), (1, 2), (2, 0)]) neighbors_dict = {node: list(G.adj[node]) for node in G.nodes()} def predicate(qv,i): qbl = QuantumBool() if len(neighbors_dict[i])==0: x(qbl) else: mcx([qv[j] for j in neighbors_dict[i]],qbl,ctrl_state='0'*len(neighbors_dict[i])) return qbl qv = QuantumVariable(3) h(qv) qbl = predicate(qv,0) multi_measurement([qv,qbl]) # Yields: {('000', True): 0.125,('100', True): 0.125,('010', False): 0.125,('110', False): 0.125,('001', False): 0.125,('101', False): 0.125,('011', False): 0.125,('111', False): 0.125}
The resulting
controlled_RX_mixerthen only swaps the node \(i\) in if all neighbors \(j\) in the graph \(G\) are not selected.