Qiskit เป็น SDK แบบโอเพ่นซอร์สสำหรับการทำงานกับคอมพิวเตอร์ควอนตัมในระดับวงจรควอนตัมแบบขยาย ตัวดำเนินการ และพื้นฐาน
ไลบรารีนี้เป็นองค์ประกอบหลักของ Qiskit ซึ่งมีส่วนประกอบสำหรับการสร้างและการทำงานกับวงจรควอนตัม ตัวดำเนินการควอนตัม และฟังก์ชันดั้งเดิม (Sampler และ Estimator) นอกจากนี้ยังมีทรานสไพเลอร์ที่รองรับการปรับแต่งวงจรควอนตัมให้เหมาะสม และกล่องเครื่องมือข้อมูลควอนตัมสำหรับสร้างตัวดำเนินการขั้นสูง
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้ Qiskit โปรดดูเอกสารประกอบที่นี่:
https://docs.quantum.ibm.com/
คำเตือน
อย่าพยายามอัปเกรดสภาพแวดล้อม Qiskit 0.* ที่มีอยู่เป็น Qiskit 1.0 แทนที่ อ่านเพิ่มเติม
เราขอแนะนำให้ติดตั้ง Qiskit ผ่าน pip
:
pip install qiskit
Pip จะจัดการการขึ้นต่อกันทั้งหมดโดยอัตโนมัติและคุณจะติดตั้งเวอร์ชันล่าสุด (และผ่านการทดสอบอย่างดี) เสมอ
หากต้องการติดตั้งจากแหล่งที่มา ให้ทำตามคำแนะนำในเอกสารประกอบ
เมื่อติดตั้ง Qiskit แล้ว ก็ถึงเวลาเริ่มทำงานกับ Qiskit ส่วนสำคัญของโปรแกรมควอนตัมคือ:
sampler
ฟังก์ชันดั้งเดิมเพื่อสุ่มตัวอย่างผลลัพธ์ หรือใช้ estimator
เพื่อประมาณค่า ทั้งนี้ขึ้นอยู่กับผลลัพธ์ สร้างตัวอย่างวงจรควอนตัมโดยใช้คลาส 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
ตัวอย่างง่ายๆ นี้ทำให้สถานะที่พัวพันเรียกว่าสถานะ GHZ h
) ประตูเฟส ( p
) และประตู CNOT ( cx
)
เมื่อคุณสร้างวงจรควอนตัมแรกแล้ว ให้เลือกฟังก์ชันพื้นฐานที่คุณจะใช้ เริ่มต้นด้วย sampler
เราใช้ measure_all(inplace=False)
เพื่อรับสำเนาของวงจรที่ใช้วัด qubit ทั้งหมด:
# 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 () } " )
การเรียกใช้สิ่งนี้จะให้ผลลัพธ์คล้ายกับ {'000': 497, '111': 503}
ซึ่งเป็น 000
50% ของเวลาและ 111
50% ของเวลา ขึ้นอยู่กับความผันผวนทางสถิติ เพื่อแสดงให้เห็นถึงพลังของ Estimator ตอนนี้เราใช้กล่องเครื่องมือข้อมูลควอนตัมเพื่อสร้างตัวดำเนินการ run()
พร้อมกับวงจรควอนตัมของเรา โปรดทราบว่าตัวประมาณค่าต้องใช้วงจร ที่ไม่มี การวัด ดังนั้นเราจึงใช้วงจร qc_example
ที่เราสร้างไว้ก่อนหน้านี้
# 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 } " )
การรันสิ่งนี้จะให้ผลลัพธ์ 4
เพื่อความสนุกสนาน ลองกำหนดค่า +/- 1 ให้กับตัวดำเนินการควอบิตเดี่ยว X และ Y แต่ละตัว แล้วดูว่าคุณจะได้ผลลัพธ์นี้หรือไม่ (คำเตือนสปอยเลอร์: เป็นไปไม่ได้!)
การใช้ qiskit.primitives.StatevectorSampler
และ qiskit.primitives.StatevectorEstimator
ที่ Qiskit มอบให้จะไม่พาคุณไปได้ไกลมากนัก พลังของการประมวลผลควอนตัมไม่สามารถจำลองบนคอมพิวเตอร์แบบคลาสสิกได้ และคุณต้องใช้ฮาร์ดแวร์ควอนตัมจริงเพื่อปรับขนาดวงจรควอนตัมที่ใหญ่ขึ้น อย่างไรก็ตาม การใช้งานวงจรควอนตัมบนฮาร์ดแวร์จำเป็นต้องเขียนใหม่ไปยังเกตพื้นฐานและการเชื่อมต่อของฮาร์ดแวร์ควอนตัม เครื่องมือที่ทำสิ่งนี้คือทรานสไพเลอร์ และ Qiskit มีทรานสไพเลอร์พาสสำหรับการสังเคราะห์ การเพิ่มประสิทธิภาพ การทำแผนที่ และการกำหนดเวลา อย่างไรก็ตาม ยังมีคอมไพลเลอร์เริ่มต้นซึ่งทำงานได้ดีในตัวอย่างส่วนใหญ่ โค้ดต่อไปนี้จะแมปวงจรตัวอย่างกับ basis_gates = ['cz', 'sx', 'rz']
และสายโซ่เชิงเส้นของ qubits 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 มอบเลเยอร์นามธรรมที่ช่วยให้ผู้ใช้สามารถรันวงจรควอนตัมบนฮาร์ดแวร์จากผู้จำหน่ายรายใดก็ได้ที่มีอินเทอร์เฟซที่เข้ากันได้ วิธีที่ดีที่สุดในการใช้ Qiskit คือสภาพแวดล้อมรันไทม์ที่ให้การใช้งาน sampler
และ estimator
ที่เหมาะสมที่สุดสำหรับแพลตฟอร์มฮาร์ดแวร์ที่กำหนด รันไทม์นี้อาจเกี่ยวข้องกับการใช้การประมวลผลทั้งก่อนและหลัง เช่น การส่งผ่านทรานสไพเลอร์ที่ได้รับการปรับปรุงพร้อมการลดข้อผิดพลาด การลดข้อผิดพลาด และสุดท้ายคือการแก้ไขข้อผิดพลาดในตัว รันไทม์ใช้อินเทอร์เฟซ qiskit.primitives.BaseSamplerV2
และ qiskit.primitives.BaseEstimatorV2
ตัวอย่างเช่น บางแพ็คเกจที่จัดเตรียมการใช้งานของการใช้งานพื้นฐานแบบรันไทม์คือ:
Qiskit ยังมีอินเทอร์เฟซเชิงนามธรรมระดับล่างสำหรับการอธิบายแบ็กเอนด์ควอนตัม อินเทอร์เฟซนี้อยู่ใน qiskit.providers
กำหนดคลาส BackendV2
แบบนามธรรมที่ผู้ให้บริการสามารถนำมาใช้เพื่อแสดงฮาร์ดแวร์หรือเครื่องจำลองของตนให้กับ Qiskit คลาสแบ็กเอนด์มีอินเทอร์เฟซทั่วไปสำหรับการรันวงจรบนแบ็กเอนด์ อย่างไรก็ตาม ในอินเทอร์เฟซนี้ ผู้ให้บริการแต่ละรายอาจดำเนินการประเภทต่างๆ ก่อนและหลังการประมวลผล และการส่งคืนผลลัพธ์ที่ผู้ขายกำหนด ตัวอย่างของแพ็คเกจผู้ให้บริการที่เผยแพร่ซึ่งเชื่อมต่อกับฮาร์ดแวร์จริง ได้แก่:
คุณสามารถดูเอกสารประกอบของแพ็คเกจเหล่านี้เพื่อดูคำแนะนำเพิ่มเติมเกี่ยวกับวิธีการเข้าถึงและใช้งานระบบเหล่านี้
หากคุณต้องการสนับสนุน Qiskit โปรดดูหลักเกณฑ์การสนับสนุนของเรา ในการเข้าร่วม คุณจะต้องปฏิบัติตามหลักจรรยาบรรณของเรา
เราใช้ปัญหา GitHub เพื่อติดตามคำขอและจุดบกพร่อง โปรดเข้าร่วมชุมชน Qiskit Slack เพื่อพูดคุย แสดงความคิดเห็น และถามคำถาม สำหรับคำถามที่เกี่ยวข้องกับการรันหรือการใช้ Qiskit นั้น Stack Overflow มี qiskit
สำหรับคำถามเกี่ยวกับการประมวลผลควอนตัมด้วย Qiskit ให้ใช้แท็ก qiskit
ใน Quantum Computing Stack Exchange (โปรดอ่านหลักเกณฑ์เกี่ยวกับวิธีการถามในฟอรัมนั้นก่อน)
Qiskit เป็นผลงานของบุคคลจำนวนมากที่มีส่วนร่วมในโครงการในระดับต่างๆ หากคุณใช้ Qiskit โปรดอ้างอิงตามไฟล์ BibTeX ที่ให้มา
บันทึกการเปลี่ยนแปลงสำหรับรุ่นใดรุ่นหนึ่งจะถูกสร้างขึ้นแบบไดนามิกและจะถูกเขียนไปยังหน้ารุ่นบน Github สำหรับแต่ละรุ่น ตัวอย่างเช่น คุณสามารถค้นหาหน้าสำหรับรุ่น 0.46.0
ได้ที่นี่:
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
บันทึกการเปลี่ยนแปลงสำหรับรุ่นปัจจุบันสามารถพบได้ในแท็บรุ่น: บันทึกการเปลี่ยนแปลงจะให้ภาพรวมโดยย่อของการเปลี่ยนแปลงที่สำคัญสำหรับรุ่นที่กำหนด
นอกจากนี้ ในฐานะที่เป็นส่วนหนึ่งของแต่ละรุ่น จะมีการเขียนบันทึกประจำรุ่นโดยละเอียดเพื่อบันทึกรายละเอียดสิ่งที่เปลี่ยนแปลงไปโดยเป็นส่วนหนึ่งของการเผยแพร่ ซึ่งรวมถึงเอกสารประกอบเกี่ยวกับการเปลี่ยนแปลงที่อาจเกิดขึ้นในการอัปเกรดและคุณสมบัติใหม่ ดูบันทึกประจำรุ่นทั้งหมดที่นี่
เรารับทราบการสนับสนุนบางส่วนสำหรับการพัฒนา Qiskit จาก DOE Office of Science National Quantum Information Science Research Centers, Co-design Center for Quantum Advantage (C2QA) ภายใต้สัญญาหมายเลข DE-SC0012704
ใบอนุญาต Apache 2.0