Simulasi cekap Circuit penstabil dengan primitif Qiskit Aer
Versi pakej
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.
qiskit[all]~=2.3.0
qiskit-aer~=0.17
Halaman ini menunjukkan cara menggunakan primitif Qiskit Aer untuk mensimulasikan Circuit penstabil dengan cekap, termasuk yang tertakluk kepada hingar Pauli.
Circuit penstabil, yang juga dikenali sebagai Circuit Clifford, adalah kelas Circuit kuantum terhad yang penting dan boleh disimulasikan secara cekap secara klasik. Terdapat beberapa cara yang setara untuk mendefinisikan Circuit penstabil. Satu definisi ialah Circuit penstabil adalah Circuit kuantum yang terdiri sepenuhnya daripada Gate berikut:
Perhatikan bahawa menggunakan Hadamard dan S, kita boleh membina sebarang Gate putaran Pauli (, , dan ) yang mempunyai sudut dalam set (sehingga fasa global), jadi kita boleh menyertakan Gate ini dalam definisi juga.
Circuit penstabil penting dalam kajian pembetulan ralat kuantum. Kebolehan simulasi klasik mereka juga menjadikannya berguna untuk mengesahkan output komputer kuantum. Sebagai contoh, andaikan anda ingin melaksanakan Circuit kuantum yang menggunakan 100 Qubit pada komputer kuantum. Bagaimana anda tahu bahawa komputer kuantum berfungsi dengan betul? Circuit kuantum pada 100 Qubit adalah di luar kemampuan simulasi klasik secara kasar. Dengan mengubah suai Circuit anda supaya ia menjadi Circuit penstabil, anda boleh menjalankan Circuit pada komputer kuantum yang mempunyai struktur serupa dengan Circuit yang dikehendaki, tetapi yang boleh anda simulasikan pada komputer klasik. Dengan menyemak output komputer kuantum pada Circuit penstabil, anda boleh memperoleh keyakinan bahawa ia berfungsi dengan betul pada Circuit bukan penstabil juga. Lihat Evidence for the utility of quantum computing before fault tolerance untuk contoh idea ini dalam praktik.
Simulasi tepat dan berbising dengan primitif Qiskit Aer menunjukkan cara menggunakan Qiskit Aer untuk melakukan simulasi tepat dan berbising bagi Circuit kuantum generik. Pertimbangkan Circuit contoh yang digunakan dalam artikel tersebut, Circuit 8 Qubit yang dibina menggunakan efficient_su2:
# Added by doQumentation β required packages for this notebook
!pip install -q numpy qiskit qiskit-aer
from qiskit.circuit.library import efficient_su2
n_qubits = 8
circuit = efficient_su2(n_qubits)
circuit.draw("mpl")
Menggunakan Qiskit Aer, kita dapat mensimulasikan Circuit ini dengan mudah. Namun, andaikan kita menetapkan bilangan Qubit kepada 500:
n_qubits = 500
circuit = efficient_su2(n_qubits)
# don't try to draw the circuit because it's too large
Memandangkan kos mensimulasikan Circuit kuantum berskala secara eksponen dengan bilangan Qubit, Circuit sebesar itu secara amnya akan melebihi kemampuan simulator berprestasi tinggi sekalipun seperti Qiskit Aer. Simulasi klasik bagi Circuit kuantum generik menjadi tidak praktikal apabila bilangan Qubit melebihi kira-kira 50 hingga 100 Qubit. Namun, perhatikan bahawa Circuit efficient_su2 diparameterkan dengan sudut pada Gate dan . Jika semua sudut ini berada dalam set , maka Circuit tersebut adalah Circuit penstabil, dan ia boleh disimulasikan dengan cekap!
Dalam sel berikut, kita menjalankan Circuit dengan primitif Sampler yang disokong oleh simulator Circuit penstabil, menggunakan parameter yang dipilih secara rawak supaya Circuit dijamin menjadi Circuit penstabil.
import numpy as np
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_aer import AerSimulator
from qiskit_aer.primitives import SamplerV2 as Sampler
measured_circuit = circuit.copy()
measured_circuit.measure_all()
rng = np.random.default_rng(1234)
params = rng.choice(
[0, np.pi / 2, np.pi, 3 * np.pi / 2],
size=circuit.num_parameters,
)
# Initialize a Sampler backed by the stabilizer circuit simulator
exact_sampler = Sampler(
options=dict(backend_options=dict(method="stabilizer"))
)
# The circuit needs to be transpiled to the AerSimulator target
pass_manager = generate_preset_pass_manager(
1, AerSimulator(method="stabilizer")
)
isa_circuit = pass_manager.run(measured_circuit)
pub = (isa_circuit, params)
job = exact_sampler.run([pub])
result = job.result()
pub_result = result[0]
counts = pub_result.data.meas.get_counts()
Simulator Circuit penstabil juga menyokong simulasi berbising, tetapi hanya untuk kelas model hingar yang terhad. Khususnya, sebarang hingar kuantum mesti dicirikan oleh saluran ralat Pauli. Ralat depolarizing termasuk dalam kategori ini, jadi ia boleh disimulasikan juga. Saluran hingar klasik seperti ralat pembacaan juga boleh disimulasikan.
Sel kod berikut menjalankan simulasi yang sama seperti sebelumnya, tetapi kali ini menentukan model hingar yang menambahkan ralat depolarizing sebanyak 2% kepada setiap Gate CX, serta ralat pembacaan yang membalikkan setiap bit yang diukur dengan kebarangkalian 5%.
from qiskit_aer.noise import NoiseModel, depolarizing_error, ReadoutError
noise_model = NoiseModel()
cx_depolarizing_prob = 0.02
bit_flip_prob = 0.05
noise_model.add_all_qubit_quantum_error(
depolarizing_error(cx_depolarizing_prob, 2), ["cx"]
)
noise_model.add_all_qubit_readout_error(
ReadoutError(
[
[1 - bit_flip_prob, bit_flip_prob],
[bit_flip_prob, 1 - bit_flip_prob],
]
)
)
noisy_sampler = Sampler(
options=dict(
backend_options=dict(method="stabilizer", noise_model=noise_model)
)
)
job = noisy_sampler.run([pub])
result = job.result()
pub_result = result[0]
counts = pub_result.data.meas.get_counts()
Sekarang, mari gunakan primitif Estimator yang disokong oleh simulator penstabil untuk mengira nilai jangkaan bagi boleh cerapan . Disebabkan struktur istimewa Circuit penstabil, hasilnya sangat mungkin adalah 0.
from qiskit.quantum_info import SparsePauliOp
from qiskit_aer.primitives import EstimatorV2 as Estimator
observable = SparsePauliOp("Z" * n_qubits)
exact_estimator = Estimator(
options=dict(backend_options=dict(method="stabilizer")),
)
isa_circuit = pass_manager.run(circuit)
pub = (isa_circuit, observable, params)
job = exact_estimator.run([pub])
result = job.result()
pub_result = result[0]
exact_value = float(pub_result.data.evs)
exact_value
0.0
Langkah seterusnyaβ
- Untuk mensimulasikan Circuit dengan Qiskit Aer, lihat Simulasi tepat dan berbising dengan primitif Qiskit Aer.
- Semak dokumentasi Qiskit Aer.