@@ -258,18 +258,19 @@ def estimate_local_parameters(qubit_hamiltonian, n_qubits):
258258def tfim_ground_state_angles (n_qubits , J_vec , h_vec , z_vec , t = 10.0 ):
259259 ry_angles = np .zeros (n_qubits )
260260 for i in range (n_qubits ):
261- m = tfim_magnetization (J = J_vec [i ], h = h_vec [i ], z = z_vec [i ], theta = np .random .rand () * np .pi , t = t , n_qubits = 1 )
262- p = np .clip ((1.0 - m ) / 2.0 , 1e-6 , 1 - 1e-6 )
263- ry_angles [i ] = 2.0 * np .arcsin (np .sqrt (p ))
261+ J = J_vec [i ]
262+ h = h_vec [i ]
263+ z = z_vec [i ]
264+ ry_angles [i ] = np .arcsin (max (min (1 , abs (h ) / (z * J )) if np .isclose (z * J , 0 ) else (1 if J > 0 else - 1 ), - 1 ))
264265 return ry_angles
265266
266- def hybrid_tfim_vqe (qubit_hamiltonian , n_qubits , dev = None , layers = 1 ):
267+ def hybrid_tfim_vqe (qubit_hamiltonian , n_qubits , dev = None ):
267268 """
268269 Estimate energy from TFIM-predicted RY angles.
269270 """
270271 z , J , h = estimate_local_parameters (qubit_hamiltonian , n_qubits )
271- angles = tfim_ground_state_angles (n_qubits , J , h , z )
272- weights_shape = {"weights" : ( layers , n_qubits , 3 ) }
272+ theta = tfim_ground_state_angles (n_qubits , J , h , z )
273+ weights_shape = {"weights" : n_qubits }
273274
274275 if dev is None :
275276 dev = qml .device ("default.qubit" , wires = n_qubits )
@@ -297,10 +298,11 @@ def hybrid_tfim_vqe(qubit_hamiltonian, n_qubits, dev=None, layers=1):
297298 hamiltonian = qml .Hamiltonian (coeffs , observables )
298299
299300 @qml .qnode (dev )
300- def circuit (weights ):
301- for i , angle in enumerate (angles ):
302- qml .RY (angle , wires = i )
303- qml .StronglyEntanglingLayers (weights , wires = range (n_qubits ))
301+ def circuit (delta ):
302+ for i in range (n_qubits ):
303+ qml .RY (theta [i ] + delta [i ], wires = i )
304+ for i in range (n_qubits - 1 ):
305+ qml .CZ (wires = [i , i + 1 ])
304306 return qml .expval (hamiltonian )
305307
306308 return circuit , weights_shape
0 commit comments