Qiskit adalah SDK sumber terbuka untuk bekerja dengan komputer kuantum pada tingkat sirkuit kuantum yang diperluas, operator, dan primitif.
Pustaka ini adalah komponen inti Qiskit, yang berisi blok penyusun untuk membuat dan bekerja dengan sirkuit kuantum, operator kuantum, dan fungsi primitif (Sampler dan Estimator). Ini juga berisi transpiler yang mendukung pengoptimalan sirkuit kuantum, dan kotak peralatan informasi kuantum untuk membuat operator tingkat lanjut.
Untuk detail lebih lanjut tentang cara menggunakan Qiskit, lihat dokumentasi yang ada di sini:
https://docs.quantum.ibm.com/
Peringatan
Jangan mencoba meningkatkan lingkungan Qiskit 0.* yang sudah ada ke Qiskit 1.0 yang sudah ada. Baca selengkapnya.
Kami menganjurkan pemasangan Qiskit melalui pip
:
pip install qiskit
Pip akan menangani semua dependensi secara otomatis dan Anda akan selalu menginstal versi terbaru (dan sudah teruji).
Untuk menginstal dari sumber, ikuti petunjuk dalam dokumentasi.
Sekarang setelah Qiskit terinstal, saatnya mulai bekerja dengan Qiskit. Bagian penting dari program kuantum adalah:
sampler
untuk mengambil sampel hasil atau estimator
untuk memperkirakan nilai. Buat contoh rangkaian kuantum menggunakan kelas QuantumCircuit
:
import numpy as np
from qiskit import QuantumCircuit
# 1. A quantum circuit for preparing the quantum state |000> + i |111>
qc_example = QuantumCircuit ( 3 )
qc_example . h ( 0 ) # generate superpostion
qc_example . p ( np . pi / 2 , 0 ) # add quantum phase
qc_example . cx ( 0 , 1 ) # 0th-qubit-Controlled-NOT gate on 1st qubit
qc_example . cx ( 0 , 2 ) # 0th-qubit-Controlled-NOT gate on 2nd qubit
Contoh sederhana ini membuat keadaan terjerat dikenal sebagai keadaan GHZ h
), Gerbang fase ( p
), dan gerbang CNOT ( cx
).
Setelah Anda membuat sirkuit kuantum pertama, pilih fungsi primitif mana yang akan Anda gunakan. Dimulai dengan sampler
, kita menggunakan measure_all(inplace=False)
untuk mendapatkan salinan sirkuit tempat semua qubit diukur:
# 2. Add the classical output in the form of measurement of all qubits
qc_measured = qc_example . measure_all ( inplace = False )
# 3. Execute using the Sampler primitive
from qiskit . primitives import StatevectorSampler
sampler = StatevectorSampler ()
job = sampler . run ([ qc_measured ], shots = 1000 )
result = job . result ()
print ( f" > Counts: { result [ 0 ]. data [ "meas" ]. get_counts () } " )
Menjalankan ini akan memberikan hasil yang serupa dengan {'000': 497, '111': 503}
yaitu 000
50% sepanjang waktu dan 111
50% sepanjang waktu hingga fluktuasi statistik. Untuk mengilustrasikan kekuatan Estimator, kami sekarang menggunakan kotak peralatan informasi kuantum untuk membuat operator run()
, bersama dengan sirkuit kuantum kita. Perhatikan bahwa Estimator memerlukan rangkaian tanpa pengukuran, jadi kami menggunakan rangkaian qc_example
yang kami buat sebelumnya.
# 2. Define the observable to be measured
from qiskit . quantum_info import SparsePauliOp
operator = SparsePauliOp . from_list ([( "XXY" , 1 ), ( "XYX" , 1 ), ( "YXX" , 1 ), ( "YYY" , - 1 )])
# 3. Execute using the Estimator primitive
from qiskit . primitives import StatevectorEstimator
estimator = StatevectorEstimator ()
job = estimator . run ([( qc_example , operator )], precision = 1e-3 )
result = job . result ()
print ( f" > Expectation values: { result [ 0 ]. data . evs } " )
Menjalankan ini akan memberikan hasil 4
. Untuk bersenang-senang, coba berikan nilai +/- 1 untuk setiap operator qubit tunggal X dan Y dan lihat apakah Anda dapat mencapai hasil ini. (Peringatan spoiler: ini tidak mungkin!)
Menggunakan qiskit.primitives.StatevectorSampler
dan qiskit.primitives.StatevectorEstimator
yang disediakan Qiskit tidak akan membawa Anda terlalu jauh. Kekuatan komputasi kuantum tidak dapat disimulasikan pada komputer klasik dan Anda perlu menggunakan perangkat keras kuantum nyata untuk menskalakannya ke sirkuit kuantum yang lebih besar. Namun, menjalankan sirkuit kuantum pada perangkat keras memerlukan penulisan ulang gerbang basis dan konektivitas perangkat keras kuantum. Alat yang melakukan hal ini adalah transpiler, dan Qiskit menyertakan lintasan transpiler untuk sintesis, optimasi, pemetaan, dan penjadwalan. Namun, ini juga menyertakan kompiler default, yang berfungsi sangat baik di sebagian besar contoh. Kode berikut akan memetakan contoh rangkaian ke basis_gates = ['cz', 'sx', 'rz']
dan rantai linier qubit coupling_map =[[0, 1], [1, 2]]
.
from qiskit import transpile
qc_transpiled = transpile ( qc_example , basis_gates = [ 'cz' , 'sx' , 'rz' ], coupling_map = [[ 0 , 1 ], [ 1 , 2 ]] , optimization_level = 3 )
Qiskit menyediakan lapisan abstraksi yang memungkinkan pengguna menjalankan sirkuit kuantum pada perangkat keras dari vendor mana pun yang menyediakan antarmuka yang kompatibel. Cara terbaik untuk menggunakan Qiskit adalah dengan lingkungan runtime yang menyediakan implementasi sampler
dan estimator
yang dioptimalkan untuk platform perangkat keras tertentu. Waktu proses ini mungkin melibatkan penggunaan sebelum dan sesudah pemrosesan, seperti lintasan transpiler yang dioptimalkan dengan penekanan kesalahan, mitigasi kesalahan, dan, pada akhirnya, koreksi kesalahan bawaan. Waktu proses mengimplementasikan antarmuka qiskit.primitives.BaseSamplerV2
dan qiskit.primitives.BaseEstimatorV2
. Misalnya, beberapa paket yang menyediakan implementasi implementasi primitif runtime adalah:
Qiskit juga menyediakan antarmuka abstrak tingkat rendah untuk mendeskripsikan backend kuantum. Antarmuka ini, terletak di qiskit.providers
, mendefinisikan kelas BackendV2
abstrak yang dapat diimplementasikan oleh penyedia untuk mewakili perangkat keras atau simulator mereka ke Qiskit. Kelas backend mencakup antarmuka umum untuk mengeksekusi sirkuit di backend; namun, dalam antarmuka ini setiap penyedia dapat melakukan berbagai jenis pra-pemrosesan dan pasca-pemrosesan serta hasil pengembalian yang ditentukan vendor. Beberapa contoh paket penyedia yang dipublikasikan yang berinteraksi dengan perangkat keras nyata adalah:
Anda dapat merujuk ke dokumentasi paket-paket ini untuk instruksi lebih lanjut tentang cara mendapatkan akses dan menggunakan sistem ini.
Jika Anda ingin berkontribusi pada Qiskit, silakan lihat pedoman kontribusi kami. Dengan berpartisipasi, Anda diharapkan menjunjung tinggi kode etik kami.
Kami menggunakan masalah GitHub untuk melacak permintaan dan bug. Silakan bergabung dengan komunitas Qiskit Slack untuk berdiskusi, berkomentar, dan bertanya. Untuk pertanyaan terkait menjalankan atau menggunakan Qiskit, Stack Overflow memiliki qiskit
. Untuk pertanyaan seputar komputasi kuantum dengan Qiskit, gunakan tag qiskit
di Quantum Computing Stack Exchange (silakan baca dulu panduan cara bertanya di forum tersebut).
Qiskit adalah karya banyak orang yang berkontribusi pada proyek di berbagai tingkatan. Jika Anda menggunakan Qiskit, harap kutip sesuai file BibTeX yang disertakan.
Log perubahan untuk rilis tertentu dibuat secara dinamis dan ditulis ke halaman rilis di Github untuk setiap rilis. Misalnya, Anda dapat menemukan halaman rilis 0.46.0
di sini:
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
Changelog untuk rilis saat ini dapat ditemukan di tab rilis: Changelog memberikan gambaran singkat tentang perubahan penting untuk rilis tertentu.
Selain itu, sebagai bagian dari setiap rilis, catatan rilis terperinci ditulis untuk mendokumentasikan secara rinci apa yang berubah sebagai bagian dari rilis. Ini mencakup dokumentasi apa pun tentang potensi perubahan yang dapat menyebabkan gangguan pada peningkatan dan fitur baru. Lihat semua catatan rilis di sini.
Kami mengakui dukungan parsial untuk pengembangan Qiskit dari DOE Office of Science National Quantum Information Science Research Centers, Co-design Center for Quantum Advantage (C2QA) di bawah nomor kontrak DE-SC0012704.
Lisensi Apache 2.0