quantumlib / OpenFermion-PySCF

OpenFermion plugin to interface with the electronic structure package PySCF.
Apache License 2.0
105 stars 44 forks source link

Inconsistency in get_molecular_hamiltonian() #66

Open mafaldaramoa opened 1 year ago

mafaldaramoa commented 1 year ago

Hello,

I'm using the get_molecular_hamiltonian() method for H4, but the behavior is not being consistent from one execution to the next.

My application is VQE. The problem is that I want to store the optimized parameters, but not the Hamiltonian. However, when I evaluate the energy with the supposedly optimized parameters (obtained in a previous execution), the value is often suboptimal. I can't reproduce the ground state, because the parameters that should define it do not minimize the energy calculated with the Hamiltonian I obtain after I recreate the molecule.

Versions: pyscf 2.2.0, openfermion 1.5.1, openfermionpyscf 0.5

A very simple example of the variations in the Hamiltonian:

from openfermion import MolecularData
from openfermionpyscf import run_pyscf

r = 1.5
geometry = [('H', (0,0,0)), ('H', (0,0,r)), ('H', (0,0,2*r)), ('H', (0,0,3*r))]
basis = 'sto-3g'
multiplicity = 1
charge = 0
h4 = MolecularData(geometry,basis,multiplicity,charge,description='H4')
h4 = run_pyscf(h4,run_fci = True,run_ccsd = True)
print(h4.get_molecular_hamiltonian())

I won't post the full output as it's unnecessary, but I leave the last 10 lines for two different executions of the code above:

((7, 1), (6, 1), (6, 0), (3, 0)) 0.03730971574012655
((7, 1), (6, 1), (6, 0), (7, 0)) 0.22562069773706908
((7, 1), (7, 1), (1, 0), (1, 0)) 0.05498004656600459
((7, 1), (7, 1), (1, 0), (5, 0)) -0.0177711366810768
((7, 1), (7, 1), (3, 0), (3, 0)) 0.0588973786630837
((7, 1), (7, 1), (3, 0), (7, 0)) 0.03730971574012656
((7, 1), (7, 1), (5, 0), (1, 0)) -0.017771136681076806
((7, 1), (7, 1), (5, 0), (5, 0)) 0.08469509925466397
((7, 1), (7, 1), (7, 0), (3, 0)) 0.03730971574012655
((7, 1), (7, 1), (7, 0), (7, 0)) 0.22562069773706908
((7, 1), (6, 1), (6, 0), (3, 0)) -0.03730971574012662
((7, 1), (6, 1), (6, 0), (7, 0)) 0.22562069773706936
((7, 1), (7, 1), (1, 0), (1, 0)) 0.0549800465660047
((7, 1), (7, 1), (1, 0), (5, 0)) -0.017771136681076806
((7, 1), (7, 1), (3, 0), (3, 0)) 0.05889737866308378
((7, 1), (7, 1), (3, 0), (7, 0)) -0.037309715740126585
((7, 1), (7, 1), (5, 0), (1, 0)) -0.017771136681076813
((7, 1), (7, 1), (5, 0), (5, 0)) 0.08469509925466404
((7, 1), (7, 1), (7, 0), (3, 0)) -0.03730971574012662
((7, 1), (7, 1), (7, 0), (7, 0)) 0.22562069773706936
ochapman-dphil commented 3 weeks ago

getting the above error in 2024

mafaldaramoa commented 1 week ago

@ochapman-dphil I suggest you take a look at this issue (the PySCF repository is significantly more active): https://github.com/pyscf/pyscf/issues/1935