1 from scipy.stats
import unitary_group
3 from squander
import Variational_Quantum_Eigensolver
4 from squander
import utils
as utils
9 from networkx.generators.random_graphs
import random_regular_graph
10 from qiskit.quantum_info
import SparsePauliOp
12 np.set_printoptions(linewidth=200)
15 from scipy.optimize
import minimize
21 from mpi4py
import MPI
23 except ModuleNotFoundError:
30 rank = comm.Get_rank()
31 world_size = comm.Get_size()
39 topology = random_regular_graph(3,n,seed=31415).edges
42 topology = comm.bcast(topology, root=0)
45 topology = [[0,1],[0,4],[0,8], 69 oplist.append((
"XX",[i[0],i[1]],1))
70 oplist.append((
"YY",[i[0],i[1]],1))
71 oplist.append((
"ZZ",[i[0],i[1]],1))
73 oplist.append((
"Z",[i],1))
74 return SparsePauliOp.from_sparse_list(oplist,num_qubits=n).to_matrix(
True)
79 topology = random_regular_graph(3,n,seed=31415).edges
82 oplist.append((
"XX",[i[0],i[1]],1))
83 oplist.append((
"YY",[i[0],i[1]],1))
84 oplist.append((
"ZZ",[i[0],i[1]],1))
86 oplist.append((
"Z",[i],1))
87 return SparsePauliOp.from_sparse_list(oplist,num_qubits=n).to_matrix(
True)
98 project_name =
'Test_GROQ' 100 with open(project_name +
'_Hamiltonian.dat',
'wb')
as file:
101 pickle.dump(Hamiltonian, file)
102 pickle.dump(topology, file)
106 config = {
"max_inner_iterations":800,
110 "use_line_search": 0,
111 "output_periodicity": 1,
112 "convergence_length": 20}
118 VQE_Heisenberg = Variational_Quantum_Eigensolver(Hamiltonian, qbit_num, config, accelerator_num=1)
122 VQE_Heisenberg.set_Ansatz(
"HEA_ZYZ")
125 VQE_Heisenberg.set_Project_Name( project_name )
128 VQE_Heisenberg.Generate_Circuit( layers, inner_blocks)
131 param_num = VQE_Heisenberg.get_Parameter_Num()
132 print(
'The number of free parameters: ', param_num)
133 parameters = np.random.randn( param_num ) *2*np.pi
136 parameters = comm.bcast(parameters, root=0)
140 start_time = time.time()
142 cost_fnc_GROQ = VQE_Heisenberg.Optimization_Problem( parameters )
144 print(
"--- %s seconds elapsed during cost function evaluation with Groq ---" % (time.time() - start_time))
152 VQE_Heisenberg = Variational_Quantum_Eigensolver(Hamiltonian, qbit_num, config, accelerator_num=0)
156 VQE_Heisenberg.set_Ansatz(
"HEA_ZYZ")
159 VQE_Heisenberg.set_Project_Name( project_name )
162 VQE_Heisenberg.Generate_Circuit( layers, inner_blocks)
165 param_num = VQE_Heisenberg.get_Parameter_Num()
166 print(
'The number of free parameters: ', param_num)
170 parameters = comm.bcast(parameters, root=0)
172 start_time = time.time()
174 cost_fnc_CPU = VQE_Heisenberg.Optimization_Problem( parameters )
176 print(
"--- %s seconds elapsed during cost function evaluation with CPU ---" % (time.time() - start_time))
178 print( cost_fnc_GROQ, cost_fnc_CPU )
179 assert abs((cost_fnc_GROQ-cost_fnc_CPU)/cost_fnc_CPU) < 1e-3
def generate_hamiltonian(n)
def generate_hamiltonian_tmp(n)