Sintesis operasi unitary
Versi pakej
Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan menggunakan versi ini atau yang lebih baharu.
qiskit[all]~=2.3.0
Operasi unitary menerangkan perubahan yang memelihara norma kepada sistem kuantum. Untuk Qubit, perubahan ini diterangkan oleh matriks kompleks berdimensi yang adjointnya sama dengan songsangnya, iaitu .
Mensintesis operasi unitary tertentu kepada set Gate kuantum adalah tugas asas yang digunakan, contohnya, dalam reka bentuk dan penggunaan algoritma kuantum atau dalam mengkompilasi litar kuantum.
Walaupun sintesis yang cekap adalah mungkin untuk kelas unitary tertentu β seperti yang terdiri daripada Gate Clifford atau mempunyai struktur hasil darab tensor β kebanyakan unitary tidak termasuk dalam kategori ini. Bagi matriks unitary umum, sintesis adalah tugas yang rumit dengan kos pengiraan yang meningkat secara eksponen dengan bilangan Qubit. Oleh itu, jika anda mengetahui penguraian cekap untuk unitary yang ingin anda laksanakan, ia kemungkinan besar lebih baik daripada sintesis umum.
Jika tiada penguraian tersedia, Qiskit SDK menyediakan anda dengan alat untuk mencarinya. Namun, perhatikan bahawa ini umumnya menghasilkan litar yang dalam yang mungkin tidak sesuai untuk dijalankan pada komputer kuantum berbising.
# 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 semula untuk pengoptimuman litarβ
Kadangkala bermanfaat untuk mensintesis semula siri panjang Gate satu dan dua Qubit, jika panjangnya boleh dikurangkan. Contohnya, litar 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, selepas disintesis semula dengan kod berikut, ia hanya memerlukan satu Gate CX. (Di sini kami menggunakan kaedah QuantumCircuit.decompose() untuk memvisualisasikan dengan lebih baik Gate yang digunakan untuk mensintesis semula unitary.)
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 Qiskit secara automatik melakukan sintesis semula ini untuk tahap pengoptimuman yang cukup tinggi.
Langkah seterusnyaβ
- Lihat contoh penguraian litar dalam tutorial Algoritma Grover.
- Untuk maklumat lanjut tentang Transpiler Qiskit, lawati bahagian Transpil.