qiskit-nature icon indicating copy to clipboard operation
qiskit-nature copied to clipboard

Low rank representations

Open kevinsung opened this issue 2 years ago • 2 comments

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 (called DoubledFactorizedHamiltonian) that stores a low rank representation of the two-body tensor
  • [ ] Add a high-level routine low_rank_decomposition that takes an ElectronicEnergy as input and outputs a DoubleFactorizedHamiltonian
  • [ ] 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

kevinsung avatar May 02 '22 13:05 kevinsung

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.

mrossinek avatar Jan 17 '23 15:01 mrossinek

I've added some pseudocode to the opening post.

kevinsung avatar Jan 17 '23 16:01 kevinsung