Quantum Machine Learning of Reduced Density Matrices

QMLearn builds surrogate electronic structure methods by learning one- and two-electron reduced density matrices in the atomic-orbital basis. From a single model you get energies, forces, orbitals, and energy-conserving AIMD.

1- & 2-RDMγ, Γ, Γc, and Δ models
OBSERVABLESone model, any observable
AIMDCustom ASE calculator

Learn the electronic structure

Kernel models map the external potential to the 1-RDM (γ) or 2-RDM (Γ), including correlated (Γc) and cumulant (Δ) decompositions. Observables follow by contraction with integrals.

Drop-in ASE calculator

QMLCalculator plugs into ASE for geometry optimization and molecular dynamics. Energies and forces come from the predicted RDM, optionally with a second-learn correction.

Any QM method as target

Train on DFT, Hartree–Fock, CASCI, CCSD, or FCI via PySCF. The surrogate inherits the quality of the training method at a fraction of the cost.


Overview

A snapshot of QMLearn

Training geometries sample configuration space; QM engines fill an HDF5 database of potentials and RDMs; scikit-learn models learn the maps; ASE drives predictions and dynamics.

QMLearn workflow: training set, RDM learning, and prediction of energies and forces
Example

1- and 2-RDM AIMD in a few lines

Load a trained model from an HDF5 database, attach the ASE calculator, and run NVE dynamics. The same pattern covers 1-RDM (gamma) and 2-RDM (gamma2, gamma2cum) models.

Maps

What is learned

  • γ-learning — Vext → 1-RDM
  • δγ-learning — Vext → γ − γHF
  • Γ-learning — Vext → 2-RDM
  • Γc / Δ — correlated 2-RDM or cumulant

See the tutorials for training notebooks and water AIMD examples at 300 K.

Script

Minimal AIMD

from sklearn.kernel_ridge import KernelRidge
from qmlearn.io.model import db2qmmodel
from qmlearn.api.api4ase import QMLCalculator
from ase.build import molecule
from ase.md.verlet import VelocityVerlet
from ase import units

models = {'delta_gamma': KernelRidge(alpha=0.0, kernel='rbf')}
qmmodel = db2qmmodel('train.hdf5', mmodels=models,
                     target='delta_gamma', method='delta_gamma')

atoms = molecule('H2O')
atoms.calc = QMLCalculator(qmmodel=qmmodel, method='gamma',
                           properties=('energy', 'forces'))
dyn = VelocityVerlet(atoms, 0.5 * units.fs)
dyn.run(200)
Literature

Papers

Scientific papers related to QMLearn

People & funding

Contributors

Thanks to

  • Quantum Multiscale (Q-MS) collaboration
  • NSF CyberTraining
  • NSF Chemical Theory Models and Computations
  • PySCF, ASE, and scikit-learn developers
Quick links

Start here