Lewati ke konten utama

Mensintesis operasi unitary

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami merekomendasikan penggunaan versi ini atau yang lebih baru.

qiskit[all]~=2.3.0

Operasi unitary menggambarkan perubahan yang menjaga norma pada sebuah sistem kuantum. Untuk nn qubit, perubahan ini dideskripsikan oleh matriks kompleks berdimensi 2nΓ—2n2^n \times 2^n bernama UU yang adjoint-nya sama dengan inversnya, yaitu U†U=1U^\dagger U = \mathbb{1}.

Mensintesis operasi unitary tertentu menjadi sekumpulan gate kuantum adalah tugas mendasar yang digunakan, misalnya, dalam desain dan penerapan algoritma kuantum atau dalam kompilasi Circuit kuantum.

Meski sintesis yang efisien memungkinkan untuk kelas unitary tertentu β€” seperti yang terdiri dari gate Clifford atau memiliki struktur tensor product β€” sebagian besar unitary tidak termasuk dalam kategori ini. Untuk matriks unitary umum, sintesis adalah tugas yang kompleks dengan biaya komputasi yang meningkat secara eksponensial seiring bertambahnya jumlah qubit. Oleh karena itu, jika kamu mengetahui dekomposisi yang efisien untuk unitary yang ingin diimplementasikan, kemungkinan besar itu akan lebih baik daripada sintesis umum.

catatan

Jika tidak ada dekomposisi yang tersedia, Qiskit SDK menyediakan alat untuk menemukannya. Namun, perlu diperhatikan bahwa ini umumnya menghasilkan Circuit yang dalam dan mungkin tidak cocok untuk dijalankan pada komputer kuantum yang berisik.

# Added by doQumentation β€” required packages for this notebook
!pip install -q numpy qiskit
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 0x7fedb83e7a90>

Sintesis ulang untuk optimasi Circuit​

Terkadang menguntungkan untuk mensintesis ulang rangkaian panjang gate satu- dan dua-qubit, jika panjangnya bisa dikurangi. Misalnya, Circuit berikut menggunakan tiga gate dua-qubit.

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

Namun, setelah disintesis ulang dengan kode berikut, Circuit hanya membutuhkan satu gate CX. (Di sini kita menggunakan metode QuantumCircuit.decompose() untuk memvisualisasikan gate yang digunakan dalam sintesis ulang unitary dengan lebih baik.)

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: 6.2071
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
q_0: ── U(Ο€/2,Ο€/2,-Ο€) β”œβ”€β”€β”€β”€β– β”€β”€β”€β”€β”€ U(Ο€/2,-Ο€,-Ο€/2) β”œβ”€
β”Œβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”β”Œβ”€β”΄β”€β”β”Œβ”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”
q_1: ─ U(1.7229,Ο€/2,-Ο€) β”œβ”€ X β”œβ”€ U(Ο€/2,0.15207,-Ο€) β”œ
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Fungsi transpile dari Qiskit secara otomatis melakukan sintesis ulang ini pada level optimasi yang cukup tinggi.

Langkah selanjutnya​

Rekomendasi
Source: IBM Quantum docs β€” updated 27 Apr 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of 11 Mar 2026