Langkau ke kandungan utama

Parameter yang kerap digunakan untuk transpilasi

Versi pakej

Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.

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

Halaman ini menerangkan beberapa parameter yang lebih kerap digunakan untuk transpilasi tempatan. Parameter ini dikonfigurasi menggunakan argumen kepada generate_preset_pass_manager atau transpile.

Darjah penghampiran​

Anda boleh menggunakan darjah penghampiran untuk menentukan sejauh mana anda ingin Circuit hasil sesuai dengan Circuit yang diingini (input). Ini ialah nilai float dalam julat (0.0 - 1.0), di mana 0.0 adalah penghampiran maksimum dan 1.0 (lalai) adalah tanpa penghampiran. Nilai yang lebih kecil menukar ketepatan output dengan kemudahan pelaksanaan (iaitu, lebih sedikit get). Nilai lalai ialah 1.0.

Dalam sintesis dua qubit uniter (digunakan dalam peringkat awal semua tahap dan untuk peringkat pengoptimuman dengan tahap pengoptimuman 3), nilai ini menentukan kesetiaan sasaran output penguraian. Iaitu, berapa banyak ralat yang diperkenalkan apabila perwakilan matriks Circuit ditukar kepada get diskret. Jika darjah penghampiran adalah nilai yang lebih rendah (lebih banyak penghampiran), Circuit output dari sintesis akan lebih berbeza daripada matriks input, tetapi juga berkemungkinan mempunyai lebih sedikit get (kerana sebarang operasi dua qubit sewenang-wenangnya boleh diuraikan dengan sempurna dengan paling banyak tiga get CX) dan lebih mudah untuk dijalankan.

Apabila darjah penghampiran kurang daripada 1.0, Circuit dengan satu atau dua get CX mungkin disintesis, yang membawa kepada lebih sedikit ralat daripada perkakasan, tetapi lebih banyak daripada penghampiran. Memandangkan CX adalah get yang paling mahal dari segi ralat, mungkin bermanfaat untuk mengurangkan bilangannya dengan mengorbankan kesetiaan dalam sintesis (teknik ini digunakan untuk meningkatkan isipadu kuantum pada peranti IBM®: Validating quantum computers using randomized model circuits).

Sebagai contoh, kami menjana UnitaryGate dua qubit rawak yang akan disintesis pada peringkat awal. Menetapkan approximation_degree kurang daripada 1.0 mungkin menjana Circuit penghampiran. Kami juga mesti menentukan basis_gates untuk memberitahu kaedah sintesis gate mana yang boleh digunakannya untuk sintesis penghampiran.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import UnitaryGate
from qiskit.quantum_info import random_unitary
from qiskit.transpiler import generate_preset_pass_manager

UU = random_unitary(4, seed=12345)
rand_U = UnitaryGate(UU)

qubits = QuantumRegister(2, name="q")
qc = QuantumCircuit(qubits)
qc.append(rand_U, qubits)
pass_manager = generate_preset_pass_manager(
optimization_level=1,
approximation_degree=0.85,
basis_gates=["sx", "rz", "cx"],
)
approx_qc = pass_manager.run(qc)
print(approx_qc.count_ops()["cx"])
2

Ini menghasilkan output 2 kerana penghampiran memerlukan lebih sedikit get CX.

Benih penjana nombor rawak​

Beberapa bahagian Transpiler adalah stokastik, jadi jalankan transpilasi berulang mungkin mengembalikan keputusan yang berbeza. Untuk mendapatkan keputusan yang boleh diulang, anda boleh menetapkan benih untuk penjana nombor pseudorawak menggunakan argumen seed_transpiler. Jalankan berulang menggunakan benih yang sama akan mengembalikan keputusan yang sama.

Contoh:

pass_manager = generate_preset_pass_manager(
optimization_level=1, seed_transpiler=11, basis_gates=["sx", "rz", "cx"]
)
optimized_1 = pass_manager.run(qc)
optimized_1.draw("mpl")

Output of the previous code cell

Susun atur awal​

Sebelum transpilasi, qubit yang terkandung dalam Circuit anda adalah qubit maya yang tidak semestinya bersamaan dengan qubit fizikal pada Backend sasaran. Anda boleh menentukan pemetaan awal qubit maya kepada qubit fizikal menggunakan argumen initial_layout. Perhatikan bahawa susun atur qubit akhir mungkin berbeza daripada susun atur awal kerana Transpiler mungkin mengatur semula qubit menggunakan get swap atau cara lain.

Dalam contoh di bawah, kami membina susun atur awal untuk backend mock FakeSherbrooke dengan mencipta objek Layout. Susun atur kami memetakan qubit pertama Circuit kami kepada qubit 5 Sherbrooke, dan memetakan qubit kedua Circuit kami kepada qubit 6 Sherbrooke. Perhatikan bahawa qubit fizikal sentiasa diwakili oleh integer.

from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
from qiskit.transpiler import Layout

backend = FakeSherbrooke()

a, b = qubits
initial_layout = Layout({a: 5, b: 6})

pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)

transpiled_circ.draw("mpl", idle_wires=False)

Output of the previous code cell

Selain menentukan objek Layout, anda juga boleh menghantar senarai integer, di mana elemen ke-ii senarai mengandungi qubit fizikal yang qubit ke-ii hendak dipetakan. Contohnya:

initial_layout = [5, 6]

pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)

transpiled_circ.draw("mpl", idle_wires=False)

Output of the previous code cell

Anda boleh menggunakan fungsi plot_error_map untuk menjana gambar rajah graf peranti dengan maklumat ralat dan qubit fizikal yang berlabel. Anda juga boleh melihat gambar rajah yang serupa pada halaman Sumber Pengiraan.

from qiskit.visualization import plot_error_map

plot_error_map(backend, figsize=(30, 24))

Output of the previous code cell

Pilihan peringkat dan plugin Transpiler​

Pilihan ini mempunyai akhiran _method. Ia mempengaruhi cara Transpiler berfungsi dan digunakan untuk cuba mendapatkan output yang lebih baik, berbeza, atau tertentu daripada Transpiler.

  • init_method (str) - Plugin yang digunakan untuk peringkat permulaan.

  • layout_method (str) - Laluan pemilihan susun atur (trivial, dense, sabre). Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat susun atur.

  • optimization_method (str) - Plugin yang digunakan untuk peringkat pengoptimuman.

  • routing_method (str) - Nama laluan penghalaan (basic, lookahead, default, sabre, none). Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat penghalaan.

  • scheduling_method (str) - Nama laluan penjadualan. Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat penjadualan.

    • as_soon_as_possible: Jadualkan arahan secara tamak: sedini mungkin pada sumber qubit (alias: asap).
    • as_late_as_possible: Jadualkan arahan lewat. Iaitu, kekalkan qubit dalam keadaan asas apabila boleh (alias: alap).
  • translation_method (str) - Nama laluan terjemahan (unroller, translator, synthesis). Ini juga boleh menjadi nama plugin luaran yang digunakan untuk peringkat terjemahan.

  • unitary_synthesis_method (str) - Nama kaedah sintesis uniter yang hendak digunakan. Secara lalai, default digunakan.

nota

Untuk melihat senarai semua plugin yang dipasang bagi peringkat tertentu, jalankan list_stage_plugins("stage_name"). Contohnya, jika anda ingin melihat senarai semua plugin yang dipasang untuk peringkat penghalaan, jalankan list_stage_plugins(routing).

Langkah Seterusnya​

Source: IBM Quantum docs — updated 1 Apr 2026
English version on doQumentation — updated 7 Mei 2026
This translation based on the English version of 11 Mac 2026