An Approximated Hamiltonian Evolution Method based on Trotter-Suzuki formula.
Reference
[1]: Nielsen, M.A., & Chuang, I.L. (2010). Quantum Computation and Quantum Information, p.208.
Source code in QuICT/algorithm/quantum_algorithm/hamiltonian_simulation/trotter.py
| def __init__(
self,
h: Hamiltonian
) -> None:
self.sys_size = self._system_size(h)
self.parsed_h = self._parse_hamiltonian(h, self.sys_size)
|
circuit
circuit(time_evol: float, num_it: int) -> Circuit
Construct the hamiltonian evolution circuit C = (e^(-itH/n))^n
Parameters:
-
time_evol
(float)
–
-
num_it
(int)
–
number of iteration for the evolution.
Return
Circuit: the hamiltonian evolution circuit.
Source code in QuICT/algorithm/quantum_algorithm/hamiltonian_simulation/trotter.py
| def circuit(self, time_evol: float, num_it: int) -> Circuit:
""" Construct the hamiltonian evolution circuit C = (e^(-itH/n))^n
Args:
time_evol (float): evolve time.
num_it (int): number of iteration for the evolution.
Return:
Circuit: the hamiltonian evolution circuit.
"""
def construct_transform(pauli_char: str, pre_cg: CompositeGate, index: int) -> None:
if pauli_char not in ["I", "X", "Y", "Z"]:
raise ValueError("Not a valid pauli operator.")
if pauli_char == "X":
H | pre_cg(index)
elif pauli_char == "Y":
SX | pre_cg(index)
evolve_it = CompositeGate()
for coef_pauli_pair in self.parsed_h:
coef, pauli_str = coef_pauli_pair
basis_transform = CompositeGate()
cnot_cg = CompositeGate()
core = CompositeGate()
highest_zbasis_idx = -1
for i in reversed(range(self.sys_size)):
pauli_char = pauli_str[i]
construct_transform(pauli_char, basis_transform, i)
if pauli_char != "I":
if highest_zbasis_idx < 0:
Rz(2 * (time_evol / num_it) * coef) | core(i)
else:
cnot_cg.insert(CX & [i, highest_zbasis_idx], 0)
highest_zbasis_idx = i
basis_transform | evolve_it
cnot_cg | evolve_it
core | evolve_it
cnot_cg.inverse() | evolve_it
basis_transform.inverse() | evolve_it
evolve_it.flatten()
trotter_circ = Circuit(self.sys_size)
for _ in range(num_it):
evolve_it | trotter_circ
return trotter_circ
|