forked from quantumcoalition/qrise2024-infleqtion-challenge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVQE_Implementation.py
31 lines (30 loc) · 1.69 KB
/
VQE_Implementation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as npfrom qiskit import QuantumCircuit, transpile
from qiskit.circuit.library import RealAmplitudes, MSGatefrom qiskit_algorithms.optimizers import COBYLA
from qiskit.quantum_info import SparsePauliOpfrom qiskit_aer import AerSimulator
from qiskit_algorithms import VQEfrom qiskit.primitives import BaseEstimator
# Define the Hamiltonian (objective function)
#H = SparsePauliOp([('ZIZ', 1.0), ('IZZ', -1.0), ('ZZI', -1.0)])H = SparsePauliOp.from_list([('ZIZ', 1.0), ('IZZ', -1.0), ('ZZI', -1.0)])
# Choose an optimizeroptimizer = COBYLA(maxiter=100)
# Define the quantum circuit
qc = QuantumCircuit(3)
# Apply Ry rotations with pi/2 phase on all qubitsfor i in range(3):
qc.ry(np.pi/2, i)
# Add RealAmplitudes ansatzansatz = RealAmplitudes(num_qubits=3, entanglement='linear', reps=2, insert_barriers=True)
qc.compose(ansatz, inplace=True)
# Incorporate Molmer-Sorensen gateqc.append(MSGate(num_qubits=3, theta=np.pi/4), [0, 1, 2])
# Add reversed ansatz for decoding
reversed_ansatz = ansatz.inverse()qc.compose(reversed_ansatz, inplace=True)
# Apply Rx rotations with pi/2 phase on all qubits
for i in range(3): qc.rx(np.pi/2, i)
# Measure all qubits
qc.measure_all()
# Transpile the circuitqc_transpiled = transpile(qc, AerSimulator())
vqe = VQE(estimator= BaseEstimator, ansatz=QuantumCircuit, optimizer=optimizer)
# Run the optimization
result = MinimumEigenSolver(operator=H)
# Extract the optimized parametersopt_params = result.optimal_parameters
# Apply the optimized parameters to the quantum circuit
optimized_circuit = qc.assign_parameters(opt_params)
# Execute the circuitjob = execute(optimized_circuit, AerSimulator(method="statevector"), shots=1000)
counts = job.result().get_counts()
print(counts)