ข้ามไปยังเนื้อหาหลัก
โครงการนี้อยู่ในช่วงเบต้า พบข้อผิดพลาด? สร้าง GitHub Issue มีคำถามหรือไอเดีย? ถามใน Discussions — ยินดีรับฟังความคิดเห็น!
คุณภาพการแปลในหน้านี้เป็นอย่างไร?

สังเคราะห์การดำเนินการยูนิทารี

เวอร์ชันของแพ็กเกจ

โค้ดในหน้านี้ถูกพัฒนาโดยใช้ข้อกำหนดดังต่อไปนี้ แนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า

qiskit[all]~=2.5.2

การดำเนินการยูนิทารีอธิบายการเปลี่ยนแปลงของระบบควอนตัมที่รักษานอร์มไว้ สำหรับ nn Qubit การเปลี่ยนแปลงนี้ถูกอธิบายด้วยเมทริกซ์เชิงซ้อนขนาด 2n×2n2^n \times 2^n มิติ UU ที่มี adjoint เท่ากับ inverse คือ U†U=1U^\dagger U = \mathbb{1}

การสังเคราะห์การดำเนินการยูนิทารีเฉพาะให้เป็นชุดของ Gate ควอนตัมเป็นงานพื้นฐานที่ใช้ เช่น ในการออกแบบและประยุกต์ใช้อัลกอริทึมควอนตัม หรือในการคอมไพล์ Circuit ควอนตัม

แม้ว่าการสังเคราะห์ที่มีประสิทธิภาพจะเป็นไปได้สำหรับยูนิทารีบางประเภท เช่น ยูนิทารีที่ประกอบด้วย Clifford gate หรือที่มีโครงสร้างผลคูณเทนเซอร์ แต่ยูนิทารีส่วนใหญ่ไม่อยู่ในหมวดหมู่เหล่านี้ สำหรับเมทริกซ์ยูนิทารีทั่วไป การสังเคราะห์เป็นงานที่ซับซ้อนและมีต้นทุนการคำนวณที่เพิ่มขึ้นแบบเอกซ์โพเนนเชียลตามจำนวน Qubit ดังนั้น ถ้าคุณรู้การสลายตัวที่มีประสิทธิภาพสำหรับยูนิทารีที่ต้องการนำไปใช้ มันมักจะดีกว่าการสังเคราะห์แบบทั่วไป

หมายเหตุ

ถ้าไม่มีการสลายตัวที่ใช้ได้ Qiskit SDK มีเครื่องมือที่ช่วยให้คุณหาได้ อย่างไรก็ตาม โปรดทราบว่าโดยทั่วไปจะสร้าง Circuit ที่ลึกมากซึ่งอาจไม่เหมาะสำหรับรันบนคอมพิวเตอร์ควอนตัมที่มีสัญญาณรบกวน

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"numpy": "numpy", "qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
import numpy as np
from qiskit import QuantumCircuit

U = 0.5 * np.array(
[[1, 1, 1, 1], [-1, 1, -1, 1], [-1, -1, 1, 1], [-1, 1, 1, -1]]
)

circuit = QuantumCircuit(2)
circuit.unitary(U, circuit.qubits)
<qiskit.circuit.instructionset.InstructionSet at 0x7fe21013b1f0>

การสังเคราะห์ใหม่เพื่อเพิ่มประสิทธิภาพ Circuit​

บางครั้งการสังเคราะห์ใหม่ให้กับชุด Gate หนึ่ง Qubit และสอง Qubit ที่ยาว ก็เป็นประโยชน์ หากช่วยลดความยาวลงได้ ตัวอย่างเช่น Circuit ต่อไปนี้ใช้ Gate สอง Qubit สาม Gate

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit

qreg_q = QuantumRegister(2, "q")
creg_c = ClassicalRegister(4, "c")
circuit = QuantumCircuit(qreg_q, creg_c)

circuit.h(qreg_q[0])
circuit.cx(qreg_q[0], qreg_q[1])
circuit.sx(qreg_q[1])
circuit.cz(qreg_q[0], qreg_q[1])
circuit.x(qreg_q[1])
circuit.x(qreg_q[0])
circuit.cx(qreg_q[0], qreg_q[1])
circuit.h(qreg_q[0])
circuit.draw("mpl")

Output of the previous code cell

อย่างไรก็ตาม หลังจากการสังเคราะห์ใหม่ด้วยโค้ดต่อไปนี้ Circuit ต้องการแค่ Gate CX เดียวเท่านั้น (ที่นี่เราใช้เมธอด QuantumCircuit.decompose() เพื่อแสดงภาพ Gate ที่ใช้ในการสังเคราะห์ยูนิทารีใหม่ได้ชัดเจนขึ้น)

from qiskit.quantum_info import Operator

# compute unitary matrix of circuit
U = Operator(circuit)

# re-synthesize
better_circuit = QuantumCircuit(2)
better_circuit.unitary(U, range(2))
better_circuit.decompose().draw()
global phase: 15π/8
┌───────────────┐ ┌────────────────┐
q_0: ┤ U(π/2,π/2,-π) ├───■──┤ U(π/2,-π,-π/2) ├
├───────────────┴┐┌─┴─┐├───────────────┬┘
q_1: ┤ U(3π/4,π/2,-π) ├┤ X ├┤ U(π/2,π/4,-π) ├─
└────────────────┘└───┘└───────────────┘

ฟังก์ชัน transpile ของ Qiskit ทำการสังเคราะห์ใหม่นี้โดยอัตโนมัติสำหรับระดับการเพิ่มประสิทธิภาพที่สูงเพียงพอ

ขั้นตอนถัดไป​

คำแนะนำ
  • ดูตัวอย่างการสลาย Circuit ใน tutorial Grover's Algorithm
  • สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Qiskit Transpiler เยี่ยมชม ส่วน Transpile