Lewati ke konten utama

IBM Circuit function

Catatan
  • Qiskit Functions adalah fitur eksperimental yang hanya tersedia untuk pengguna IBM Quantum® Premium Plan, Flex Plan, dan On-Prem (via IBM Quantum Platform API) Plan. Fitur ini masih dalam status preview release dan dapat berubah sewaktu-waktu.

Ikhtisar​

IBM® Circuit function menerima abstract PUBs sebagai input, dan mengembalikan nilai ekspektasi yang telah dimitigasi sebagai output. Circuit function ini mencakup pipeline otomatis dan tersesuaikan untuk membantu para peneliti fokus pada penemuan algoritma dan aplikasi.

Deskripsi​

Setelah kamu mengirimkan PUB, sirkuit abstrak dan observable-mu akan ditranspilasi secara otomatis, dieksekusi pada hardware, dan diproses pasca-eksekusi untuk mengembalikan nilai ekspektasi yang telah dimitigasi. Untuk melakukannya, ini menggabungkan alat-alat berikut:

IBM Circuit function

Mulai​

Autentikasi menggunakan API key-mu dan pilih Qiskit Function sebagai berikut. (Snippet ini mengasumsikan kamu sudah menyimpan akunmu ke lingkungan lokalmu.)

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

function = catalog.load("ibm/circuit-function")

Contoh​

Untuk memulai, coba contoh dasar ini:

from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService

# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]

job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)

Periksa status workload Qiskit Function-mu atau ambil hasil sebagai berikut:

print(job.status())
result = job.result()
QUEUED

Hasilnya memiliki format yang sama dengan hasil Estimator:

print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB

The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))

And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492

Input​

Lihat tabel berikut untuk semua parameter input yang diterima IBM Circuit function. Bagian Options berikutnya menjelaskan lebih detail tentang options yang tersedia.

NamaTipeDeskripsiWajibDefaultContoh
backend_namestrNama backend untuk melakukan query.YaN/Aibm_fez
pubsIterable[EstimatorPubLike]Iterable dari objek PUB-like (primitive unified bloc) abstrak, seperti tuple (circuit, observables) atau (circuit, observables, parameter_values). Lihat Ikhtisar PUBs untuk informasi lebih lanjut. Sirkuit bisa abstrak (non-ISA).YaN/A(circuit, observables, parameter_values)
optionsdictOpsi input. Lihat bagian Options untuk detail lebih lanjut.TidakLihat bagian Options untuk detail.{"optimization_level": 3}
instancestrNama resource cloud dari instance yang akan digunakan dalam format tersebut.TidakSatu dipilih secara acak jika akunmu punya akses ke beberapa instance.CRN

Options​

Struktur​

Mirip dengan Qiskit Runtime primitives, opsi untuk IBM Circuit function bisa ditentukan sebagai nested dictionary. Opsi yang umum digunakan, seperti optimization_level dan mitigation_level, berada di level pertama. Opsi lain yang lebih canggih dikelompokkan ke dalam kategori berbeda, seperti resilience.

Default​

Jika kamu tidak menentukan nilai untuk sebuah opsi, nilai default yang ditentukan oleh layanan akan digunakan.

Mitigation level​

IBM Circuit function juga mendukung mitigation_level. Mitigation level menentukan seberapa banyak suppression dan mitigasi error yang diterapkan pada job. Level yang lebih tinggi menghasilkan hasil yang lebih akurat, dengan pengorbanan waktu pemrosesan yang lebih lama. Tingkat pengurangan error bergantung pada metode yang diterapkan. Mitigation level mengabstraksi pilihan detail metode mitigasi dan suppression error agar pengguna bisa mempertimbangkan trade-off biaya/akurasi yang sesuai untuk aplikasinya. Tabel berikut menunjukkan metode yang bersesuaian untuk setiap level.

catatan

Meski namanya mirip, mitigation_level menerapkan teknik yang berbeda dari yang digunakan oleh resilience_level Estimator.

Mirip dengan resilience_level di Qiskit Runtime Estimator, mitigation_level menentukan sekumpulan opsi tersesuaikan sebagai dasar. Opsi apapun yang kamu tentukan secara manual selain mitigation level akan diterapkan di atas kumpulan opsi dasar yang didefinisikan oleh mitigation level. Oleh karena itu, pada prinsipnya, kamu bisa mengatur mitigation level ke 1, tetapi kemudian mematikan measurement mitigation, meskipun ini tidak disarankan.

Mitigation LevelTeknik
1 [Default]Dynamical decoupling + measurement twirling + TREX
2Level 1 + gate twirling + ZNE via gate folding
3Level 1 + gate twirling + ZNE via PEA

Contoh berikut mendemonstrasikan pengaturan mitigation level:

options = {"mitigation_level": 2}

job = function.run(backend_name=backend.name, pubs=pubs, options=options)

Semua opsi yang tersedia​

Selain mitigation_level, IBM Circuit function juga menyediakan sejumlah opsi canggih yang memungkinkan kamu menyesuaikan trade-off biaya/akurasi. Tabel berikut menunjukkan semua opsi yang tersedia:

OpsiSub-opsiSub-sub-opsiDeskripsiPilihanDefault
default_precisionPresisi default yang digunakan untuk PUB apapun atau panggilan run()
yang tidak menentukan presisi sendiri.
Setiap input PUB bisa menentukan presisinya sendiri. Jika metode run() diberi presisi, maka nilai tersebut digunakan untuk semua PUB dalam panggilan run() yang tidak menentukan presisinya sendiri.
float > 00.015625
max_execution_timeWaktu eksekusi maksimum dalam detik, yang didasarkan
pada penggunaan QPU (bukan wall clock time). Penggunaan QPU adalah
jumlah waktu QPU didedikasikan untuk memproses job-mu. Jika sebuah job melampaui batas waktu ini, job tersebut akan dibatalkan secara paksa.
Bilangan bulat dalam detik dalam rentang [1, 10800]
mitigation_levelSeberapa banyak suppression dan mitigasi error yang diterapkan. Lihat bagian Mitigation level untuk informasi lebih lanjut tentang metode yang digunakan di setiap level.1 / 2 / 31
optimization_levelSeberapa banyak optimasi yang dilakukan pada sirkuit. Level yang lebih tinggi menghasilkan sirkuit yang lebih dioptimalkan, dengan pengorbanan waktu transpilasi yang lebih lama.1 / 2 / 32
dynamical_decouplingenableApakah akan mengaktifkan dynamical decoupling. Lihat Teknik suppression dan mitigasi error untuk penjelasan metodenya.True/FalseTrue
sequence_typeUrutan dynamical decoupling yang digunakan.
* XX: gunakan urutan tau/2 - (+X) - tau - (+X) - tau/2
* XpXm: gunakan urutan tau/2 - (+X) - tau - (-X) - tau/2
* XY4: gunakan urutan
tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2
'XX'/'XpXm'/'XY4''XX'
twirlingenable_gatesApakah akan menerapkan gate twirling Clifford 2-qubit.True/FalseFalse
enable_measureApakah akan mengaktifkan twirling pada measurement.True/FalseTrue
resiliencemeasure_mitigationApakah akan mengaktifkan metode mitigasi error measurement TREX. Lihat Teknik suppression dan mitigasi error untuk penjelasan metodenya.True/FalseTrue
zne_mitigationApakah akan mengaktifkan metode mitigasi error Zero Noise Extrapolation. Lihat Teknik suppression dan mitigasi error untuk penjelasan metodenya.True/FalseFalse
zneamplifierTeknik yang digunakan untuk memperkuat noise. Salah satu dari:
- gate_folding (default) menggunakan gate folding 2-qubit untuk memperkuat noise. Jika faktor noise mengharuskan memperkuat hanya sebagian gate, maka gate-gate tersebut dipilih secara acak.

- gate_folding_front menggunakan gate folding 2-qubit untuk memperkuat noise. Jika faktor noise mengharuskan memperkuat hanya sebagian gate, maka gate-gate tersebut dipilih dari bagian depan DAG circuit yang terurut secara topologis.

- gate_folding_back menggunakan gate folding 2-qubit untuk memperkuat noise. Jika faktor noise mengharuskan memperkuat hanya sebagian gate, maka gate-gate tersebut dipilih dari bagian belakang DAG circuit yang terurut secara topologis.

- pea menggunakan teknik yang disebut Probabilistic error amplification (PEA) untuk memperkuat noise. Lihat Teknik suppression dan mitigasi error untuk penjelasan metodenya.
gate_folding / gate_folding_front / gate_folding_back / peagate_folding
noise_factorsFaktor noise yang digunakan untuk amplifikasi noise.list of floats; each float >= 1(1, 1.5, 2) for PEA, and (1, 3, 5) otherwise.
extrapolatorFaktor noise untuk mengevaluasi model ekstrapolasi fit. Opsi ini tidak mempengaruhi eksekusi atau fitting model dengan cara apapun; ini hanya menentukan titik di mana objek extrapolator dievaluasi untuk dikembalikan dalam field data yang disebut evs_extrapolated dan stds_extrapolated.one or more of exponential,linear, double_exponential,polynomial_degree_(1 <= k <= 7)(exponential, linear)
pec_mitigationApakah akan mengaktifkan metode mitigasi error Probabilistic Error Cancellation. Lihat Teknik suppression dan mitigasi error untuk penjelasan metodenya.True/FalseFalse
pecmax_overheadOverhead sampling sirkuit maksimum yang diizinkan, atau None untuk tanpa batas.None/ integer >1100

Dalam contoh berikut, mengatur mitigation level ke 1 awalnya mematikan mitigasi ZNE, tetapi mengatur zne_mitigation ke True menimpa pengaturan relevan dari mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

Output​

Output dari Circuit function adalah PrimitiveResult, yang berisi dua field:

  • Satu atau lebih objek PubResult. Ini bisa diindeks langsung dari PrimitiveResult.

  • Metadata tingkat job.

Setiap PubResult berisi field data dan metadata.

  • Field data berisi setidaknya sebuah array nilai ekspektasi (PubResult.data.evs) dan sebuah array standard error (PubResult.data.stds). Field ini juga bisa berisi lebih banyak data, tergantung pada opsi yang digunakan.

  • Field metadata berisi metadata tingkat PUB (PubResult.metadata).

Snippet kode berikut mendeskripsikan format PrimitiveResult (dan PubResult terkait).

print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

Mengambil pesan error​

Jika status workload-mu adalah ERROR, gunakan job.result() untuk mengambil pesan error guna membantu debugging sebagai berikut:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

Dapatkan dukungan​

Hubungi IBM Quantum support, dan sertakan informasi berikut:

  • Qiskit Function Job ID (qiskit-ibm-catalog), job.job_id
  • Deskripsi detail tentang masalahnya
  • Pesan atau kode error yang relevan
  • Langkah-langkah untuk mereproduksi masalah

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