ข้ามไปยังเนื้อหาหลัก

การใช้งาน Qiskit

ในบทเรียนก่อนหน้า เราได้ดูคลาส Statevector และ Operator ใน Qiskit เป็นครั้งแรก และใช้พวกมันจำลองการดำเนินการและการวัดบน Qubit เดี่ยว ในส่วนนี้ เราจะใช้คลาสเหล่านี้เพื่อสำรวจพฤติกรรมของหลาย Qubit

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit
from qiskit import __version__

print(__version__)
2.1.1

เราจะเริ่มด้วยการนำเข้าคลาส Statevector และ Operator รวมถึงฟังก์ชัน square root จาก NumPy ต่อจากนี้ โดยทั่วไปเราจะจัดการนำเข้าทั้งหมดที่จำเป็นก่อนในแต่ละบทเรียน

from qiskit.quantum_info import Statevector, Operator
from numpy import sqrt

Tensor products

คลาส Statevector มีเมธอด tensor ซึ่งคืนค่า tensor product ของ Statevector นั้นกับอีกอันหนึ่งที่ระบุเป็น argument argument ถูกตีความเป็น tensor factor ทางขวา

ตัวอย่างเช่น ด้านล่างเราสร้างเวกเตอร์สถานะสองอันที่แทน 0\vert 0\rangle และ 1,\vert 1\rangle, และใช้เมธอด tensor เพื่อสร้างเวกเตอร์ใหม่ ψ=01\vert \psi\rangle = \vert 0\rangle \otimes \vert 1\rangle สังเกตว่าเราใช้เมธอด from_label เพื่อกำหนดสถานะ 0\vert 0\rangle และ 1\vert 1\rangle แทนที่จะกำหนดเอง

zero = Statevector.from_label("0")
one = Statevector.from_label("1")
psi = zero.tensor(one)
display(psi.draw("latex"))

01 |01\rangle

label ที่อนุญาตอื่นๆ รวมถึง "+" และ "-" สำหรับสถานะ plus และ minus รวมถึง "r" และ "l" (ย่อมาจาก "right" และ "left") สำหรับสถานะ

+i=120+i21andi=120i21.\vert {+i} \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{i}{\sqrt{2}} \vert 1 \rangle \qquad\text{and}\qquad \vert {-i} \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle - \frac{i}{\sqrt{2}} \vert 1 \rangle.

ที่นี่ "+", "-" หรือ "right" และ "left" มาจากบริบทของสปินเชิงกลควอนตัม ซึ่งองค์ประกอบของสปินอาจชี้ไปทางซ้ายหรือขวาในการทดลอง ไม่ได้หมายถึง Qubit ขวาสุดหรือซ้ายสุดในระบบที่มีหลาย Qubit นี่คือตัวอย่างของ tensor product ของ +\vert {+} \rangle และ i\vert {-i} \rangle

plus = Statevector.from_label("+")
minus_i = Statevector.from_label("l")
phi = plus.tensor(minus_i)
display(phi.draw("latex"))

1200i201+1210i211\frac{1}{2} |00\rangle- \frac{i}{2} |01\rangle+\frac{1}{2} |10\rangle- \frac{i}{2} |11\rangle

ทางเลือกหนึ่งคือใช้การดำเนินการ ^ สำหรับ tensor product ซึ่งให้ผลลัพธ์เหมือนกัน

display((plus ^ minus_i).draw("latex"))

1200i201+1210i211\frac{1}{2} |00\rangle- \frac{i}{2} |01\rangle+\frac{1}{2} |10\rangle- \frac{i}{2} |11\rangle

คลาส Operator ก็มีเมธอด tensor เช่นกัน (รวมถึงเมธอด from_label) ดังที่เห็นในตัวอย่างต่อไปนี้

H = Operator.from_label("H")
Id = Operator.from_label("I")
X = Operator.from_label("X")
display(H.tensor(Id).draw("latex"))
display(H.tensor(Id).tensor(X).draw("latex"))
[220220022022220220022022] \begin{bmatrix} \frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} & 0 & - \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & - \frac{\sqrt{2}}{2} \\ \end{bmatrix} [02200022002200022000000220002200220002200220002200220002200000022000220022000220] \begin{bmatrix} 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 \\ \end{bmatrix}

เช่นเดียวกับในกรณีเวกเตอร์ การดำเนินการ ^ ก็เทียบเท่ากัน

display((H ^ Id ^ X).draw("latex"))
[02200022002200022000000220002200220002200220002200220002200000022000220022000220] \begin{bmatrix} 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 \\ \end{bmatrix}

สถานะรวมสามารถ evolve โดยใช้การดำเนินการรวมตามที่คาดหวัง — เช่นเดียวกับที่เราเห็นสำหรับระบบเดี่ยวในบทเรียนก่อนหน้า ตัวอย่างเช่น โค้ดต่อไปนี้คำนวณสถานะ (HI)ϕ(H\otimes I)\vert\phi\rangle สำหรับ ϕ=+i\vert\phi\rangle = \vert + \rangle \otimes \vert {-i}\rangle (ซึ่งนิยามไว้แล้วด้านบน)

display(phi.evolve(H ^ Id).draw("latex"))

22002i201\frac{\sqrt{2}}{2} |00\rangle- \frac{\sqrt{2} i}{2} |01\rangle

นี่คือโค้ดที่กำหนดการดำเนินการ CXCX และคำนวณ CXψCX \vert\psi\rangle สำหรับ ψ=+0\vert\psi\rangle = \vert + \rangle \otimes \vert 0 \rangle เพื่อความชัดเจน นี่คือการดำเนินการ CXCX ที่ Qubit ทางซ้ายเป็น control และ Qubit ทางขวาเป็น target ผลลัพธ์คือ Bell state ϕ+\vert\phi^{+}\rangle

CX = Operator([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]])
psi = plus.tensor(zero)
display(psi.evolve(CX).draw("latex"))

2200+2211\frac{\sqrt{2}}{2} |00\rangle+\frac{\sqrt{2}}{2} |11\rangle

การวัดบางส่วน

ในบทเรียนก่อนหน้า เราใช้เมธอด measure เพื่อจำลองการวัดเวกเตอร์สถานะควอนตัม เมธอดนี้คืนค่าสองรายการ: ผลการวัดที่จำลอง และ Statevector ใหม่จากการวัดนั้น

โดยปกติ measure วัด Qubit ทั้งหมดในเวกเตอร์สถานะ เราสามารถระบุรายการของจำนวนเต็มเป็น argument เพื่อวัดเฉพาะ Qubit ที่มี index นั้น เพื่อแสดงให้เห็น โค้ดด้านล่างสร้างสถานะ

w=001+010+1003\vert w\rangle = \frac{\vert 001\rangle + \vert 010\rangle + \vert 100\rangle}{\sqrt{3}}

และวัด Qubit หมายเลข 0 ซึ่งเป็น Qubit ขวาสุด (Qiskit นับ Qubit เริ่มจาก 0 จากขวาไปซ้าย เราจะกลับมาที่ข้อตกลงการนับนี้ในบทเรียนถัดไป)

w = Statevector([0, 1, 1, 0, 1, 0, 0, 0] / sqrt(3))
display(w.draw("latex"))

result, state = w.measure([0])
print(f"Measured: {result}\nState after measurement:")
display(state.draw("latex"))

result, state = w.measure([0, 1])
print(f"Measured: {result}\nState after measurement:")
display(state.draw("latex"))

33001+33010+33100\frac{\sqrt{3}}{3} |001\rangle+\frac{\sqrt{3}}{3} |010\rangle+\frac{\sqrt{3}}{3} |100\rangle

Measured: 0
State after measurement:

22010+22100\frac{\sqrt{2}}{2} |010\rangle+\frac{\sqrt{2}}{2} |100\rangle

Measured: 00
State after measurement:

100 |100\rangle

Source: IBM Quantum docs — updated 15 ม.ค. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of approx. 26 มี.ค. 2569