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 qubit, perubahan ini dideskripsikan oleh matriks kompleks berdimensi bernama yang adjoint-nya sama dengan inversnya, yaitu .
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.
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")
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β
- Lihat contoh dekomposisi Circuit dalam tutorial Algoritma Grover.
- Untuk informasi lebih lanjut tentang Transpiler Qiskit, kunjungi bagian Transpile.