MCPcopy Create free account
hub / github.com/Apress/quantum-machine-learning-python / QAOA

Class QAOA

Chapter_7/listing7_3/QAOA.py:9–132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7
8
9class QAOA:
10
11 def __init__(self, num_elems:int,
12 hamiltonian_type:str,
13 hamiltonian_interactions:np.ndarray,
14 verbose=True):
15 self.num_elems = num_elems
16 self.hamiltonian_type = hamiltonian_type
17 self.hamiltonian_interactions = hamiltonian_interactions
18 self.verbose = verbose
19 if self.hamiltonian_type not in ['isling']:
20 raise ValueError(f"No support for the Hamiltonian type {self.hamiltonian_type}")
21 self.qubits = [cirq.LineQubit(x) for x in range(num_elems)]
22
23
24 @staticmethod
25 def interaction_gate(q1, q2, gamma=1):
26 circuit = cirq.Circuit()
27 circuit.append(cirq.CZ(q1, q2)**gamma)
28 circuit.append([cirq.X(q2), cirq.CZ(q1, q2)**(-gamma), cirq.X(q2)])
29 circuit.append([cirq.X(q1), cirq.CZ(q1, q2) **(-gamma), cirq.X(q1)])
30 circuit.append([cirq.X(q1), cirq.X(q2), cirq.CZ(q1, q2) ** gamma, cirq.X(q1), cirq.X(q2)])
31 return circuit
32
33# Build the Target Hamiltonian based circuit Evolution
34 def target_hamiltonian_evolution_circuit(self, gamma):
35 circuit = cirq.Circuit()
36 # Apply the interaction gates to all the qubit pairs
37
38 for i in range(self.num_elems):
39
40 for j in range(i+1, self.num_elems):
41 circuit.append(self.interaction_gate(
42 self.qubits[i], self.qubits[j],
43 gamma=gamma))
44 return circuit
45
46# Build the Starting Hamiltonian based evolution circuit
47 def starting_hamiltonian_evolution_circuit(self, beta):
48 for i in range(self.num_elems):
49 yield cirq.X(self.qubits[i])**beta
50
51 def build_qoaa_circuit(self, gamma_store, beta_store):
52 self.circuit = cirq.Circuit()
53 # Hadamard gate on each qubit to get an equal superposition state
54 print(self.qubits)
55 self.circuit.append(cirq.H.on_each(self.qubits))
56
57 for i in range(len(gamma_store)):
58 self.circuit.append(self.target_hamiltonian_evolution_circuit(gamma_store[i]))
59 self.circuit.append(self.starting_hamiltonian_evolution_circuit(beta_store[i]))
60
61 def simulate(self):
62 #print(self.circuit)
63 sim = cirq.Simulator()
64 waveform = sim.simulate(self.circuit)
65 return waveform
66

Callers 1

QAOA.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected