QuantumKitHub / MPSKit.jl

A Julia package dedicated to simulating quantum many-body systems using Matrix Product States (MPS)
MIT License
139 stars 30 forks source link

Add Chepiga ansatz #147

Closed lkdvos closed 5 months ago

lkdvos commented 5 months ago

Co-authored-by: Atsushi Ueda

codecov[bot] commented 5 months ago

Codecov Report

Attention: Patch coverage is 95.55556% with 2 lines in your changes missing coverage. Please review.

Project coverage is 83.73%. Comparing base (f7076b4) to head (c4fd585).

Files Patch % Lines
src/algorithms/excitation/chepigaansatz.jl 95.55% 2 Missing :warning:
Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #147 +/- ## ========================================== + Coverage 83.62% 83.73% +0.11% ========================================== Files 72 73 +1 Lines 4701 4746 +45 ========================================== + Hits 3931 3974 +43 - Misses 770 772 +2 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

Gertian commented 5 months ago

@lkdvos could add a reference for this Ansatz ?

lkdvos commented 5 months ago

It's already in the docstrings and the documentation page, not sure where else you want the reference?

Jutho commented 5 months ago

I am not a huge fan of arbitrarily naming things after (a subset of) authors of papers. The search term "chepiga ansatz" has no hits on Google or Google Scholar. I know coming up with a good name is hard, but I believe it is worth the effort.

Gertian commented 5 months ago

It's already in the docstrings and the documentation page, not sure where else you want the reference?

I ment what Jutho just mentioned above. But I also agree that this is not easy. From my part this was just out of curiosity, I didn't notice you already mentioned the source in the docstring.

Jutho commented 5 months ago

Something like LocalizedExcitationAnsatz (maybe even without the Ansatz part)?

Also, I am not sure whether the documentation advice is correct that this is good if the system is "sufficiently" gapped. Even in the gapped case, you need the excitation to delocalise. My impression was that this ansatz actually works well in the case of critical systems, because there the virtual space (of an MPS that well approximates the ground state) contains sufficient degrees of freedom to change the global state by only modifying a single local tensor. I.e. it is the much slower decay of correlations in such states that makes this ansatz work. If you do this is a strongly gapped state like AKLT, it would be pretty bad I think (one could easily check). There, even with the momentum space ansatz (I still don't like the quasiparticle name either :smile:), modifying a single tensor is not sufficient to reach great precision, and this should be strictly worse.

lkdvos commented 5 months ago

Ah, I seem to have read over the abstract too quickly. In any case, it seems like this ansatz is probably contained within the manifold of the quasiparticle ansatz, so I would guess in general this is strictly "worse" than that, however it is also a whole lot cheaper. I'll try and adapt the doc page a bit, it's not too easy to write things for an algorithm I know very little about. I think it's mostly added for easy comparison, and since Atsushi sent me the code I just put it in.

Considering the name, we already have a couple of these in MPSKit, as for example marek_gap is presumably not known beyond our office, and VOMPS also gives no hits on google scholar. In that sense, I actually quite like the name, as it is A. short and easy to remember B. has already been used colloquially by some people in Benasque and in our office and C. has some explicit form of credit/citation in the code, so there is some benefit to naming it that way (I did not come up with this myself). I agree that it is a bit personal, so maybe I'll send an email to the authors asking for their permission, or if they use a different name themselves?

Jutho commented 5 months ago

marek_gap definitely needs to go, that's not even using a family name. The problem with this is that you only credit the first author, which is often not a fair representation of reality.

Jutho commented 5 months ago

For marek_gap, it anyway seems the documentation is very limited and the interface is not at all specified. The first return value is not the "Marek" gap but the actual (inverse) correlation length, and only the second return value is the gap. Personally, I would think that interface in the form of

(inverse_)correlation_length_spectrum(state, howmany, some options such as which symmetry sector or which angle)

would be more useful. Then there could be a first_gap utility, to find the first gap in a list of values that represent a spectrum of some kind. But this should probably not be discussed here.