qiskit-nature
qiskit-nature copied to clipboard
Low rank representations
What should we add?
The low rank representations of the quantum chemistry Hamiltonian (https://www.nature.com/articles/s41534-021-00416-z.pdf) are useful for time evolution as well as variational algorithms. We should add functionality to calculate and use these representations.
- [x] Add low-level linear algebra utilies for performing the modified Cholesky decomposition (#1022 )
- [ ] Introduce a subclass of
Hamiltonian
(calledDoubledFactorizedHamiltonian
) that stores a low rank representation of the two-body tensor - [ ] Add a high-level routine
low_rank_decomposition
that takes anElectronicEnergy
as input and outputs aDoubleFactorizedHamiltonian
- [ ] Add the "compressed" low rank factorization of https://arxiv.org/abs/2104.08957
- [ ] Add functionality to generate circuits for performing time evolution of a
DoubleFactorizedHamiltonian
using Trotter-Suzuki formulas.
Example pseudocode:
electronic_energy = (ElectronicEnergy instance obtained somehow)
df_hamiltonian = low_rank_decomposition(electronic_energy) # returns a DoubleFactorizedHamiltonian
circuit = simulate_trotter(df_hamiltonian, time, n_steps) # returns a QuantumCircuit
Thanks for updating the proposal above. Can you please also write some pseudo code of what you expect the actual user-facing workflow to look like?
That said, I am not sold on DoubleFactorizedHamiltonian
class. With the work done in #1033 we will be able to instead store the low-rank 2-body integrals instead of the standard 4D matrix directly inside the existing framework. See for example how I implemented AO-symmetry aware 2-body tensors here.
I've added some pseudocode to the opening post.