diff --git a/README.md b/README.md index b305d1e..863d399 100644 --- a/README.md +++ b/README.md @@ -114,3 +114,19 @@ opCacheVec = [ return MPO_new(os, sites; basisOpCacheVec=opCacheVec) ``` + +## Examples: Electronic Structure Hamiltonian + +After looking at the previous example one might assume that the relative speed of ITensorMPOConstruction over Renormalizer might be due to the fact that for the Fermi-Hubbard Hamiltonian ITensorMPOConstruction is able to construct a much more compact MPO. In the case of the electronic structure Hamiltonian all algorithms produce MPOs of similar bond dimensions. + +![](./docs/plot-generators/es.png) + +However ITensorMPOConstruction is still an order of magnitude faster than Renormalizer. The code for this example can be found in [examples/electronic-structure.jl](https://github.com/ITensor/ITensorMPOConstruction.jl/blob/main/examples/electronic-structure.jl). The run time to generate these MPOs are shown below (again on a 2021 MacBook Pro with the M1 Max CPU and 32GB of memory). + +| $N$ | ITensors | Renormalizer | ITensorMPOConstruction | +|-----|----------|--------------|------------------------| +| 10 | 3.0s | 2.1s | 0.37s | +| 20 | 498s | 61s | 7.1s | +| 30 | N/A | 458s | 46s | +| 40 | N/A | 2250s | 183 | +| 50 | N/A | N/A | 510s | diff --git a/docs/plot-generators/es.png b/docs/plot-generators/es.png new file mode 100644 index 0000000..0a71326 Binary files /dev/null and b/docs/plot-generators/es.png differ diff --git a/docs/plot-generators/plots.ipynb b/docs/plot-generators/plots.ipynb index 46762b9..6b25773 100644 --- a/docs/plot-generators/plots.ipynb +++ b/docs/plot-generators/plots.ipynb @@ -45,6 +45,42 @@ "plt.legend()\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "numSites = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]\n", + "bondDims = [2, 12, 24, 44, 60, 89, 111, 150, 178, 227, 261, 320, 360, 429, 475, 554, 606, 695, 753, 852, 916, 1025, 1095, 1214, 1290, 1419, 1501, 1640, 1728, 1877]\n", + "plt.plot(numSites, bondDims, label=\"Renormalizer\")\n", + "\n", + "numSites = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]\n", + "bondDims = [1, 12, 13, 43, 50, 89, 96, 150, 158, 227, 236, 320, 330, 429, 440, 554, 566, 695, 708, 852, 866, 1025, 1040, 1214, 1230, 1419, 1436, 1640, 1658, 1877]\n", + "plt.plot(numSites, bondDims, label=\"ITensorMPOConstruction\")\n", + "\n", + "numSites = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]\n", + "bondDims = [1, 12, 14, 43, 50, 89, 96, 150, 158, 227, 236, 320, 330, 429, 440, 554, 566, 695, 708, 852]\n", + "plt.plot(numSites, bondDims, label=\"ITensor\")\n", + "\n", + "plt.title(\"Electronic Structure Hamiltonian\")\n", + "plt.xlabel(\"Number of orbitals\")\n", + "plt.ylabel(\"Maximum bond dimension\")\n", + "plt.legend()\n", + "plt.show()" + ] } ], "metadata": { diff --git a/docs/plot-generators/renormalizer-plots.py b/docs/plot-generators/renormalizer-plots.py index 45b92bc..f93d35e 100644 --- a/docs/plot-generators/renormalizer-plots.py +++ b/docs/plot-generators/renormalizer-plots.py @@ -1,9 +1,10 @@ import numpy as np from timeit import default_timer as timer from renormalizer import Model, Op, BasisSimpleElectron, Mpo +import random -def fermiHubbardKS(N, t, U): +def fermi_hubbard_ks(N, t, U): toSite = lambda k, s: 2 * k + s terms = [] @@ -22,12 +23,58 @@ def fermiHubbardKS(N, t, U): model = Model([BasisSimpleElectron(i) for i in range(2 * N)], terms) return Mpo(model) + +def electronic_structure(N): + toSite = lambda k, s: 2 * k + s + coeff = lambda : random.random() + + terms = [] + for a in range(N): + for b in range(a, N): + factor = coeff() + for spin in (0, 1): + sites = [toSite(a, spin), toSite(b, spin)] + terms.append(Op(r"a^\dagger a", sites, factor)) + + if a != b: + sites = [toSite(b, spin), toSite(a, spin)] + terms.append(Op(r"a^\dagger a", sites, np.conj(factor))) + + for j in range(N): + for s_j in (0, 1): + + for k in range(N): + s_k = s_j + if (s_k, k) <= (s_j, j): + continue + + for l in range(N): + for s_l in (0, 1): + if (s_l, l) <= (s_j, j): + continue + + for m in range(N): + s_m = s_l + if (s_m, m) <= (s_k, k): + continue + + value = coeff() + sites = [toSite(j, s_j), toSite(l, s_l), toSite(m, s_m), toSite(k, s_k)] + terms.append(Op(r"a^\dagger a^\dagger a a", sites, factor)) + + sites = list(reversed(sites)) + terms.append(Op(r"a^\dagger a^\dagger a a", sites, np.conj(factor))) + + model = Model([BasisSimpleElectron(i) for i in range(2 * N)], terms) + return Mpo(model) + + numSites = [] bondDims = [] times = [] -for N in [10, 20, 30, 40, 50]: +for N in [40]: start = timer() - mpo = fermiHubbardKS(N, 1, 4) + mpo = electronic_structure(N) stop = timer() numSites.append(N)