CI¶
Representation of dets¶
In PyNQS, we adopted the following convention for occupation number vectors (ONVs).
\[|n_0n_1n_2n_3n_4n_5\rangle \triangleq a_0^{n_0} a_1^{n_1} a_2^{n_2} a_3^{n_3}a_4^{n_4} a_5^{n_5} |vac\rangle\]
ONVs to Tensor
1from libs.C_extension import onv_to_tensor
2bra = torch.tensor([0b1111, 0, 0, 0, 0, 0, 0, 0], dtype=torch.uint8)
3sorb = 8
4output = onv_to_tensor(bra, sorb)
5output
6# tensor([[1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0]], dtype=torch.double)
Tensor to ONVs
1from libs.C_extension import tensor_to_onv
2bra = torch.tensor([1, 1, 1, 1, 0, 0, 0, 0], dtype=torch.uint8)
3sorb = 8
4output = tensor_to_onv(bra, sorb)
5output
6# tensor([[0b1111, 0, 0, 0, 0, 0, 0, 0]], dtype=torch.uint8)
CI-NQS¶
see: ci_vmc/hybrid/NqsCi and Exclude partial dets.
Define:
\[\psi = \sum_i^{M}(c_i\phi_i) + c_N\phi_{NQS}\]
Optimize CI-coeff:
\[\begin{split}H =
\begin{bmatrix}
H_{ij} & v = \Braket{\phi_{i}|H|\phi_{NQS}} \\
v^{\dagger} & \Braket{\phi_{NQS}|H|\phi_{NQS}}
\end{bmatrix}\end{split}\]
Diagonalize \(H\):
\[\begin{align}
HC & = \varepsilon C \rightarrow \varepsilon_0, C_0:\{c_i\},c_N
\end{align}\]
Gradient:
\[\begin{split}\begin{align}
\frac{\partial\varepsilon}{\partial_\theta} & =
c_i^*\Braket{\phi_i|H|\frac{\partial\phi_{N}}{\partial_\theta}}c_N +
c_N^*\Braket{\frac{\partial\phi_{N}}{\partial_\theta}|H|\phi_i}c_i + \\
& + c_N^*\Braket{\frac{\partial\phi_{N}}{\partial_\theta}|H|\phi_{N}}c_N +
c_N^*\Braket{\phi_{N}|H|\frac{\partial\phi_{N}}{\partial_\theta}}c_N \\
& = c_N^*\bra{\frac{\partial\phi_{N}}{\partial_\theta}}H\left( \ket{\phi_N}c_N + \ket{\phi_i}c_i \right) + \mathrm{c.c.} \\
& = c_N^*\mathbb{E}_p\left\{ \partial_{\theta}\ln\phi_{n}^* \times F(n) \right\} + \mathrm{c.c.}
\end{align}\end{split}\]
\[\begin{split}\begin{align}
F(n) & = \frac{\Braket{n|H-E|\Psi}}{\Braket{n|\phi}} =
\frac{\Braket{n|H|\Psi}}{\Braket{n|\phi}} - E_0\frac{\Braket{n|\Phi}}{\Braket{n|\phi}} \\
& = \frac{\Braket{n|H|\phi}c_N + \Braket{n|H|\phi_i}c_i}{\Braket{n|\phi}} - E_0
\frac{\Braket{n|\phi}c_N + \Braket{n|\phi_i}c_i}{\Braket{n|\phi}} \\
& = \frac{\Braket{n|H|\phi}}{\Braket{n|\phi}}c_N +
\frac{\Braket{n|H|\phi_i}}{\Braket{n|\phi}}c_i - E_0c_N \ (\Braket{n|\phi_i} = 0)
\end{align}\end{split}\]
Gradient method one:
\[\frac{\partial\varepsilon}{\partial_\theta} = 2\mathcal{R}||c_N||^2 \times \mathrm {scale} \times \mathbb{E}_p\left\{
\partial_{\theta}\ln\phi_{n}^* \times \left\{\underbrace{\frac{\Braket{n|H|\phi}}{\Braket{n|\phi}}}_{eloc} +
\underbrace{ \frac{\Braket{n|H|\phi_i}c_i}{\Braket{n|\phi}c_N}}_{\text{new term}} - E_0 \right\}
\right\}\]
Gradient method two:
\[\frac{\partial\varepsilon}{\partial_\theta} = 2\mathcal{R}c_N^* \times \mathrm{scale} \times \mathbb{E}_p \left\{
\partial_{\theta}\ln\phi_{n}^* \times
\left[\frac{\Braket{n|H|\phi}}{\Braket{n|\phi}} c_N +
\frac{\Braket{n|H|\phi_i}}{\Braket{n|\phi}}c_i - E_0 c_N
\right]
\right\}\]
Calculation details:
\[\begin{split}\begin{align}
\Braket{\phi_{NQS}|H|\phi_{NQS}} & = \mathcal{R}\mathbb{E}_p[eloc] \\
\Braket{\phi_i | H | \phi_{NQS}} & = \sum_j^{j \in {SD_i}}\Braket{i|H|j} \Braket{j|\phi_{NQS}} \\
\frac{\Braket{n|H|\phi_i}c_i}{\Braket{n|\phi}c_N} & = \frac{\Braket{n|H|i}c_i}{\Braket{n|\phi}c_N} \\
\end{align}\end{split}\]