Simulasi efisien Circuit stabilizer dengan primitif Qiskit Aer
Versi paket
Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami merekomendasikan menggunakan versi ini atau yang lebih baru.
qiskit[all]~=2.3.0
qiskit-aer~=0.17
Halaman ini menunjukkan cara menggunakan primitif Qiskit Aer untuk mensimulasikan Circuit stabilizer secara efisien, termasuk yang terkena noise Pauli.
Circuit stabilizer, yang juga dikenal sebagai Clifford Circuit, adalah kelas terbatas dari Circuit kuantum yang penting dan dapat disimulasikan secara efisien secara klasik. Ada beberapa cara yang setara untuk mendefinisikan Circuit stabilizer. Salah satu definisinya adalah bahwa Circuit stabilizer adalah Circuit kuantum yang hanya terdiri dari Gate-Gate berikut:
Perlu diperhatikan bahwa dengan menggunakan Hadamard dan S, kita bisa membangun Gate rotasi Pauli apa pun (, , dan ) yang memiliki sudut dalam himpunan (sampai fase global), sehingga kita juga bisa memasukkan Gate-Gate ini dalam definisi tersebut.
Circuit stabilizer penting dalam studi koreksi kesalahan kuantum. Kemampuan simulasinya secara klasik juga membuatnya berguna untuk memverifikasi output komputer kuantum. Misalnya, bayangkan kamu ingin mengeksekusi Circuit kuantum yang menggunakan 100 Qubit di komputer kuantum. Bagaimana kamu tahu bahwa komputer kuantum berperilaku dengan benar? Circuit kuantum pada 100 Qubit berada di luar jangkauan simulasi klasik brute-force. Dengan memodifikasi Circuit kamu sehingga menjadi Circuit stabilizer, kamu bisa menjalankan Circuit di komputer kuantum yang memiliki struktur serupa dengan Circuit yang kamu inginkan, namun bisa disimulasikan di komputer klasik. Dengan memeriksa output komputer kuantum pada Circuit stabilizer, kamu bisa mendapatkan keyakinan bahwa komputer tersebut berperilaku dengan benar pada Circuit non-stabilizer juga. Lihat Evidence for the utility of quantum computing before fault tolerance untuk contoh ide ini dalam praktik.
Simulasi eksak dan noisy dengan primitif Qiskit Aer menunjukkan cara menggunakan Qiskit Aer untuk melakukan simulasi eksak dan noisy dari Circuit kuantum generik. Perhatikan contoh Circuit yang digunakan dalam artikel tersebut, sebuah Circuit 8-Qubit yang dibangun 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 bisa mensimulasikan Circuit ini dengan mudah. Namun, bayangkan kita mengatur jumlah Qubit menjadi 500:
n_qubits = 500
circuit = efficient_su2(n_qubits)
# don't try to draw the circuit because it's too large
Karena biaya simulasi Circuit kuantum bertumbuh secara eksponensial seiring jumlah Qubit, Circuit sebesar itu umumnya akan melampaui kemampuan bahkan simulator berkinerja tinggi seperti Qiskit Aer. Simulasi klasik Circuit kuantum generik menjadi tidak layak ketika jumlah Qubit melebihi sekitar 50 hingga 100 Qubit. Namun, perhatikan bahwa Circuit efficient_su2 diparameterkan oleh sudut pada Gate dan . Jika semua sudut ini berada dalam himpunan , maka Circuit tersebut adalah Circuit stabilizer, dan bisa disimulasikan secara efisien!
Pada sel berikut, kita menjalankan Circuit dengan primitif Sampler yang didukung oleh simulator Circuit stabilizer, menggunakan parameter yang dipilih secara acak sedemikian rupa sehingga Circuit dijamin menjadi Circuit stabilizer.
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 stabilizer juga mendukung simulasi noisy, tetapi hanya untuk kelas model noise yang terbatas. Secara khusus, setiap noise kuantum harus dikarakterisasi oleh kanal kesalahan Pauli. Kesalahan depolarisasi termasuk dalam kategori ini, sehingga bisa disimulasikan juga. Kanal noise klasik seperti kesalahan readout juga bisa disimulasikan.
Sel kode berikut menjalankan simulasi yang sama seperti sebelumnya, tetapi kali ini menentukan model noise yang menambahkan kesalahan depolarisasi sebesar 2% ke setiap Gate CX, serta kesalahan readout yang membalik setiap bit yang diukur dengan probabilitas 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 didukung oleh simulator stabilizer untuk menghitung nilai ekspektasi dari observable . Karena struktur khusus Circuit stabilizer, 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 selanjutnyaβ
- Untuk mensimulasikan Circuit dengan Qiskit Aer, lihat Simulasi eksak dan noisy dengan primitif Qiskit Aer.
- Tinjau dokumentasi Qiskit Aer.