Lewati ke konten utama

Fractional gates

Versi paket

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

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Halaman ini memperkenalkan dua jenis Gate yang baru didukung pada armada QPU IBM Quantum®. Gate fraksional ini didukung pada Heron QPU dalam bentuk:

  • RZZ(θ)R_{ZZ}(\theta) untuk 0<θ≤π/20 \lt \theta \leq \pi/2
  • RX(θ)R_X(\theta) untuk semua nilai θ\theta

Halaman ini membahas kasus penggunaan di mana penerapan fractional gates dapat meningkatkan efisiensi workflow kamu, serta cara menggunakan gate-gate ini pada QPU IBM Quantum.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime

Cara menggunakan fractional gates​

Secara internal, fractional gates ini bekerja dengan langsung menjalankan rotasi RZZ(θ)R_{ZZ}(\theta) dan RX(θ)R_X(\theta) untuk sudut yang sewenang-wenang. Penggunaan Gate RX(θ)R_X(\theta) dapat mengurangi durasi dan error untuk rotasi satu-Qubit dengan sudut sewenang-wenang hingga dua kali lipat. Eksekusi langsung dari rotasi Gate RZZ(θ)R_{ZZ}(\theta) menghindari dekomposisi menjadi beberapa objek CZGate, yang juga mengurangi durasi dan error Circuit. Ini sangat berguna untuk Circuit yang mengandung banyak rotasi satu- dan dua-Qubit, seperti saat mensimulasikan dinamika sistem kuantum atau saat menggunakan variational ansatz dengan banyak parameter.

Meski jenis gate ini ada di library gate standar yang bisa dimiliki QuantumCircuit, gate tersebut hanya bisa digunakan pada QPU IBM Quantum tertentu, dan harus dimuat dengan flag use_fractional_gates yang disetel ke True (ditampilkan di bawah). Flag ini akan memastikan bahwa fractional gates dimasukkan ke dalam Target Backend untuk Transpiler.

service = QiskitRuntimeService()
backend = service.backend('ibm_torino', use_fractional_gates=True)

Contoh kode ini mendemonstrasikan cara menggunakan fractional gates dalam konteks workflow yang mensimulasikan dinamika rantai Ising menggunakan fractional gates. Durasi Circuit kemudian dibandingkan dengan Backend yang tidak menggunakan fractional gates.

Catatan tentang tingkat error yang dilaporkan

Nilai error yang dilaporkan dalam Target sebuah Backend dengan fractional gates yang diaktifkan hanyalah salinan dari padanan gate non-fraksional (yang mungkin tidak sama). Ini karena pelaporan tingkat error pada fractional gates belum didukung.

Namun, karena waktu gate antara gate fraksional dan non-fraksional adalah sama, wajar untuk mengasumsikan bahwa tingkat error mereka sebanding — terutama ketika sumber error dominan dalam sebuah Circuit disebabkan oleh relaksasi.

from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.visualization.timeline import draw as draw_timeline, IQXSimple

from qiskit_ibm_runtime import QiskitRuntimeService

num_qubits = 5
num_time_steps = 3
rx_angle = 0.1
rzz_angle = 0.1

ising_circuit = QuantumCircuit(num_qubits)
for i in range(num_time_steps):
# rx layer
for q in range(num_qubits):
ising_circuit.rx(rx_angle, q)
for q in range(1, num_qubits - 1, 2):
ising_circuit.rzz(rzz_angle, q, q + 1)
# 2nd rzz layer
for q in range(0, num_qubits - 1, 2):
ising_circuit.rzz(rzz_angle, q, q + 1)
ising_circuit.barrier()
ising_circuit.draw("mpl")

Output of the previous code cell

Tentukan dua objek Backend: satu dengan fractional gates yang diaktifkan, dan satu lagi dengan fractional gates yang dinonaktifkan, lalu transpilasi keduanya.

service = QiskitRuntimeService()
backend_fractional = service.backend("ibm_torino", use_fractional_gates=True)
backend_conventional = service.backend(
"ibm_torino", use_fractional_gates=False
)

pm_fractional = generate_preset_pass_manager(
optimization_level=3, backend=backend_fractional, scheduling_method="alap"
)
pm_conventional = generate_preset_pass_manager(
optimization_level=3,
backend=backend_conventional,
scheduling_method="alap",
)

ising_circuit_fractional = pm_fractional.run(ising_circuit)
ising_circuit_conventional = pm_conventional.run(ising_circuit)

Tampilkan timeline Circuit menggunakan dua jenis gate.

# Draw timeline of circuit with conventional gates
draw_timeline(
ising_circuit_conventional,
idle_wires=False,
target=backend_conventional.target,
time_range=(0, 500),
style=IQXSimple(),
)

Output of the previous code cell

# Draw timeline of circuit with fractional gates
draw_timeline(
ising_circuit_fractional,
idle_wires=False,
target=backend_fractional.target,
time_range=(0, 500),
style=IQXSimple(),
)

Output of the previous code cell

Batasan sudut​

Untuk Gate RZZ(θ)R_{ZZ}(\theta) dua-Qubit, hanya sudut antara 00 dan π/2\pi/2 yang dapat dieksekusi pada hardware IBM Quantum. Jika sebuah Circuit mengandung Gate RZZ(θ)R_{ZZ}(\theta) dengan sudut di luar rentang ini, maka pipeline transpilasi standar umumnya akan memperbaikinya dengan transformasi Circuit yang sesuai (melalui pass FoldRzzAngle). Namun, untuk Gate RZZ(θ)R_{ZZ}(\theta) yang mengandung satu atau lebih Parameter, Transpiler akan mengasumsikan bahwa parameter ini akan diberi sudut dalam rentang ini saat runtime. Job akan gagal jika ada nilai parameter yang ditentukan dalam PUB yang dikirimkan ke Qiskit Runtime berada di luar rentang ini.

Di mana menggunakan fractional gates​

Secara historis, basis gate yang tersedia pada QPU IBM Quantum adalah CZ, X, RZ, SX, dan ID, yang tidak dapat merepresentasikan Circuit dengan rotasi satu- dan dua-Qubit yang bukan kelipatan π/2\pi / 2 secara efisien. Misalnya, Gate RX(θ)R_X(\theta), ketika ditranspilasi, harus diuraikan menjadi serangkaian gate RZRZ dan X\sqrt{X}, yang menciptakan Circuit dengan dua gate berdurasi terbatas alih-alih satu.

Demikian pula, ketika rotasi dua-Qubit seperti Gate RZZ(θ)R_{ZZ}(\theta) ditranspilasi, dekomposisinya membutuhkan dua gate CZ dan beberapa gate satu-Qubit, yang meningkatkan kedalaman Circuit. Dekomposisi ini ditampilkan dalam kode berikut.

qc = QuantumCircuit(1)
param = Parameter("θ")
qc.rx(param, 0)
qc.draw("mpl")

Output of the previous code cell

# Decomposition of an RX(θ) gate using the IBM Quantum QPU basis
service = QiskitRuntimeService()
backend = service.backend("ibm_torino")
optimization_level = 3
pm = generate_preset_pass_manager(optimization_level, backend=backend)
transpiled_circuit = pm.run(qc)
transpiled_circuit.draw("mpl", idle_wires=False)

Output of the previous code cell

from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.transpiler import generate_preset_pass_manager

from qiskit_ibm_runtime import QiskitRuntimeService

qc = QuantumCircuit(2)
param = Parameter("θ")
qc.rzz(param, 0, 1)
qc.draw("mpl")

Output of the previous code cell

# Decomposition of an RZZ(θ) gate using the IBM Quantum QPU basis
service = QiskitRuntimeService()
backend = service.backend("ibm_torino")
optimization_level = 3
pm = generate_preset_pass_manager(optimization_level, backend=backend)
transpiled_circuit = pm.run(qc)
transpiled_circuit.draw("mpl", idle_wires=False)

Output of the previous code cell

Untuk workflow yang membutuhkan banyak rotasi RX(θ)R_X(\theta) satu-Qubit atau rotasi dua-Qubit (seperti dalam variational ansatz atau saat mensimulasikan evolusi waktu sistem kuantum), batasan ini menyebabkan kedalaman Circuit tumbuh dengan cepat. Namun, fractional gates menghilangkan persyaratan ini, karena rotasi satu- dan dua-Qubit dieksekusi secara langsung, dan menciptakan Circuit kuantum yang lebih efisien (dan dengan demikian lebih tahan error).

Kapan tidak menggunakan fractional gates​

Penting untuk dicatat bahwa fractional gates adalah fitur eksperimental dan perilaku flag use_fractional_gates mungkin berubah di masa depan. Lihat catatan rilis untuk versi baru Qiskit Runtime untuk informasi lebih lanjut. Lihat juga dokumentasi referensi API untuk QiskitRuntimeService.backend, yang mendeskripsikan use_fractional_gates.

Selain itu, Transpiler Qiskit memiliki kemampuan terbatas untuk menggunakan RZZ(θ)R_{ZZ}(\theta) dalam pass optimasinya. Ini mengharuskan kamu untuk lebih berhati-hati dalam merancang dan mengoptimalkan Circuit yang mengandung instruksi ini.

Terakhir, penggunaan fractional gates tidak didukung untuk:

Baca panduan tentang opsi primitive untuk mempelajari lebih lanjut tentang penyesuaian teknik mitigasi dan penekanan error untuk workload kuantum tertentu.

Langkah berikutnya​

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