# limitations under the License. import numpy import cirq import openfermion from openfermioncirq.variational.ansatzes import SplitOperatorTrotterAnsatz # Construct a Hubbard model Hamiltonian hubbard_model = openfermion.fermi_hubbard(2, 2, 1., 4.) hubbard_hamiltonian = openfermion.get_diagonal_coulomb_hamiltonian( hubbard_model) # Construct a jellium model Hamiltonian grid = openfermion.Grid(2, 2, 1.0) jellium = openfermion.jellium_model(grid, spinless=True, plane_wave=False) jellium_hamiltonian = openfermion.get_diagonal_coulomb_hamiltonian(jellium) # Construct a Hamiltonian of ones ones_hamiltonian = openfermion.DiagonalCoulombHamiltonian(one_body=numpy.ones( (5, 5)), two_body=numpy.ones( (5, 5))) def test_split_operator_trotter_ansatz_params(): ansatz = SplitOperatorTrotterAnsatz(hubbard_hamiltonian) assert (set(ansatz.params()) == { cirq.Symbol(name)
import openfermion import openfermioncirq # Set parameters of jellium model. wigner_seitz_radius = 5. # Radius per electron in Bohr radii. n_dimensions = 2 # Number of spatial dimensions. grid_length = 3 # Number of grid points in each dimension. spinless = True # Whether to include spin degree of freedom or not. n_electrons = 2 # Number of electrons. # Figure out length scale based on Wigner-Seitz radius and construct a basis grid. length_scale = openfermion.wigner_seitz_length_scale(wigner_seitz_radius, n_electrons, n_dimensions) grid = openfermion.Grid(n_dimensions, grid_length, length_scale) # Initialize the model and compute its ground energy in the correct particle number manifold fermion_hamiltonian = openfermion.jellium_model(grid, spinless=spinless, plane_wave=False) hamiltonian_sparse = openfermion.get_sparse_operator(fermion_hamiltonian) ground_energy, _ = openfermion.jw_get_ground_state_at_particle_number( hamiltonian_sparse, n_electrons) print('The ground energy of the jellium Hamiltonian at {} electrons is {}'. format(n_electrons, ground_energy)) # Convert to DiagonalCoulombHamiltonian type. hamiltonian = openfermion.get_diagonal_coulomb_hamiltonian(fermion_hamiltonian) # Define the objective function objective = openfermioncirq.HamiltonianObjective(hamiltonian)