- hubbard_functions.py : Contains all the functions programmed and used for solving one-dimensional hubbard model. It includes numpy based functions to : calculate the dimension, set basis states for the system, hamiltonian of the subspace and the fock space for a given N (number of lattice sites and electron occupancy (r)). It also conatns functions which generates the hamiltonian of the system in temrs of spin operators and some functions are to study some properties of the system for example the density of states and site occupation fo eigenstates.
- hubb0_properties, hubb2_properies : Contains some visuals which explain the properties of the hubbard model with 1 and 2 allowed spins respectively at each site.
- VarQITE Results : Contains the solutions for Variational Quantum Imaginary Time Evolution for different ansatz. It also contains the companrison results and the overall performance of the algorithm for one-dimensional hubbard model for 2 to 8 lattice size. ===================================================================================
In this project, we study lattice models like Tight Binding Model, Hubbard Model. We generate matrices of these models, solve them using NumPy and discuss some of the properties of the eigenvalues and eigenvectors. We realize the need of quantum simulation of these models and propose a quantum method for solving them. We implement it on a quantum circuit in different ways and compare the solutions with the NumPy results.
The Tight Binding Model describes the electronic structure of solids by considering the onsite energies and hopping energy of electrons.
Here,
We create the matrices for one electron occupation Tight Binding Model and solve it using NumPy. Using the eigenstates obtained from solving the mkatrix, we find the occupation of that eigenstate at all the lattice sites and plot the probability of the state occupying the sites. In the following figures we show how different onsite energies result in different occupation of the ground state (vec 0) and the eigenstate with maximum energy (vec 1).
e peak |
e periodic |
e increasing |
occupation peak |
occupation periodic |
occupation increasing |
It is used to understand the energy distribution in a system. We find this using a delta or a lorentzian function. Once we have the eigenvalues of a system, we can find the distribution of these eigenvalues across an energy range. We can use the Lorentzian function along with the delta function to plot the density. The Lorentzian function broadens the delta function peaks corresponding to individual energy level giving a continuous density plot.
The following figure gives the Density of states for N=100, number of centers = 150, gamma = 0.3, t=1 and e=[0]*N
N site lattice model, with only one allowed spin. Describes the electronic structure of a solid by considering the onsite, hopping and nearest neighbour interaction term.
We now write a generalised matrix for a Hubbard model. This can now handle any electron occupation. It takes the description of the lattice model adn the number of electorns as input and returns the Hamiltonian matrix of that subspace. For an N site lattice model and r occupied electron, the dimension of the Hamiltonian becomes
In the following figures, we solve a 12 site Hubbard Model with
1 electron |
1/4th occupation |
1/2 occupation |
1 Hole |
3/4th occupation |
In the following figures, we solve a 12 site Hubbard Model with
1 electron |
1/4th occupation |
1/2 occupation |
1 Hole |
3/4th occupation |
We conclude from above data that a lattice problem with r-electron is the same as a problem with r holes. Their eigenvalues, eigenstates, their site occupation and the density of states have similar trends.
For one orbital models with two allowed spins, the fock dimension is exponentially larger than fock dimension of spinless models. While spinless one orbital model has
spinless vs 2-spin fock dimension |
hubb2 sub dimensions |
For each combination of up and down electrons, the model will have a subspace of a specific dimension. We can see how the subspace dimension varies with number of up and down electrons in the second figure above.
We can solve a lattice model effectively by breaking down the problem into its subspces and solving them using NumPy. However, as the number of sites increases, the dimension of subspaces increase and the time taken to generate their basis and then generate the Hamiltonian becomes exponentially larger.
Fock dim vs N |
Sub dim vs N |
Basis time vs N |
In the above figures we can see how the fock space dimesnion increases exponentially, how the subspace dimesnion is maximum for half-filled electron and how that number increases appreciably with increasing lattice size. We can also see how the time taken to generate the half-filled basis increases exponentially with increasing lattice size.
We will first discuss ways in which we can implement the lattice model hamiltonian on a quantum circuit. There are different transformations that we can do to change a fermionic operator to a spin operator. We disscuss one such transformation.
So far, we were representing and solving the tight binding hamiltonian in terms of the fermionic creation
To preserve the anticommutation relations (
On using this transformation on our fermionic Hamiltonian, we get the following spin Hamiltonian :
As this expression is expressed in terms of the Pauli operators, we can implement this as a gate in a quantum circuit.
One can use imaginary time evolution to find the ground state and energy of a Hamiltonian. A state
One can see that for
We use a variational quantum algorithm (VQA) to implement imaginary time evolution. We make use of the VarQITE (Qiskit) time evolution algorithm and input an evolution problem defined using the lattice Hailtonian. The varitional algorithm takes a parameterized ansatz as input and finds a set of parameters which minimizes the expectation value of the Hamiltonian. It is therefore important to take an ansatz which spans all the wavefunctions and can be trained efficiently. In the following sections we try out two different ansatz, compare it to the benchmarked SciPy and classical results.
When enough information about the interested eigenstate is not known, a heuristic ansatz that is arbitrarily parameterized and entangled, can be used, such as Efficient SU(2) ansatz. Here is a circuit of this ansatz repeated once.
One can use the python package qiskit-symb, to see the parameterized state obtained from this circuit. One can also observe the amplitudes of different states in this statevector and modify their ansatz in order to achieve specific amplitudes for specific states.
We compare the efficiency of SU(2) VarQITE method with the SciPy method. This solves the application of the time evolution operator for imaginary time on the quantum state at all the discrete steps. The following figures show the comparison of performance of SciPyImaginaryEvolver and VarQITE with SU(2) ansatz.
Estimated eigenvalues during time evolution |
Accuracy Comparison |
Time Comparison |
We use the circuit to create Dicke states, which are superposition of states with equal weights, and parameterize it to form our ansatz.
We can see from the comparison below that the number of parameters required for it less than number of parameters required for SU(2) repeated thrice.
We use this ansatz for solving different subspaces of our Hamiltonian. The results and the properties we study are mentioned in the following section. We plot the performance of the quantum method, the numpy method the the scipy method for two different values of U.
We can see that the Dicke state variational method was able to find the correct eigenvalues for all the subspaces while the scipy method tries to find the lowest eigenvalue at all times.In this section we make use of the information we received from the variaitiona method and see which properties we can study using these results.
In this section we study how the energy of the system varies as the interaction increases.
We can see that as U increases for a certain model with certain number of lattice sites, the energy of the system increases. We can also see that the lowest energy of a system is for the half-filled scenario when there is no interaction present. As the interaction increases, the lowest energy shifts to the cases where the electron occupation is less.
We find the density of states from the eigenvalues we obtained from the variational method and we compare it with the density of states we get from the eigenvalues calculated from numpy.
DOS NumPy |
DOS VarQITE |
We can see that the results we got, give a similar trend for density states. However, the values calculated are not very accurate and thus the figure is shifted from the original points. However, this is good to understand the distribution of eigenvalues over an energy range.