Open alfagalileo opened 4 years ago
Hey! Thanks for your interest.
So... there are a bunch of issues if you want to reproduce the results by Saito... 1 - Are you sure that you are writing the exact-same Hamiltonian? It might be possible that there are a bunch of factors that don't match... If you then do (not tested...)
using QuantumOptics
H_qo = SparseOperator(H)
???.groundstate_energy(H_qo)
do you get the correct (Saito) result? Note that you'll probably need to reduce the system size for this to work. If you indeed get the same...
2 - The network: you are using a RBM/trivial NeuralQuantumState. Saito uses a more complicated, effectively a 2-layer network. You can imitate it (but it won't be exactly the same) by using a chain and a weighted-sum layer.
alpha = 1 # from your example...
ch = Chain(Dense(ComplexF64, N, alpha*N, af_logcosh), WSum(ComplexF64, alpha*N))
net = PureStateAnsatz(ch, N)
3 - Sampling: If I recall correctly Saito performs the computation by fixing the total number of bosons/excitations. (Can you confirm? or am I wrong?). This is particularly important when dealing with bosonic systems... To do that, you need
HomogeneousFock
. you'll need to pass a kwarg excitations=Nbosons
).ExchangeRule(hamiltonian)
in lieu of LocalRule
.Ah, I see! By the way, your way of encoding Nbosons=9
as the local cutoff is... well, not wrong, but... it's completely different from his point of view that there should only be 9 particles in the system.
If you update to the last version of NeuralQuantum you should really just do
cutoff = 3
hilb = HomogeneousFock( nsites, cutoff, excitations=nbosons)
maybe even cutoff = 2 to start with...
Hi, actually I am trying to reproduce the Saito's paper with NeuralQuantum.jl. However, I am getting energy values that do not match with the values reported in this paper.
Here is the code
`
nsites = 11 nbosons = 9 U = 2.0 J = 1.0 V = (collect(0:10).-5).^2
`
I would like to know if I am making a mistake.