Langkau ke kandungan utama

Bina Circuit

Versi pakej

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

qiskit[all]~=2.3.0

Halaman ini mengkaji dengan lebih mendalam kelas QuantumCircuit dalam SDK Qiskit, termasuk beberapa kaedah yang lebih lanjut yang boleh anda gunakan untuk mencipta Circuit kuantum.

Apakah Circuit kuantum?​

Circuit kuantum mudah ialah koleksi Qubit dan senarai arahan yang bertindak ke atas Qubit tersebut. Untuk menunjukkan, sel berikut mencipta Circuit baharu dengan dua Qubit baharu, kemudian memaparkan atribut qubits Circuit, yang merupakan senarai Qubit dalam susunan dari bit paling tidak bererti q0q_0 hingga bit paling bererti qnq_n.

# Added by doQumentation β€” required packages for this notebook
!pip install -q qiskit
from qiskit import QuantumCircuit

qc = QuantumCircuit(2)
qc.qubits
[<Qubit register=(2, "q"), index=0>, <Qubit register=(2, "q"), index=1>]

Berbilang objek QuantumRegister dan ClassicalRegister boleh digabungkan untuk mencipta sebuah Circuit. Setiap QuantumRegister dan ClassicalRegister juga boleh dinamakan.

from qiskit.circuit import QuantumRegister, ClassicalRegister

qr1 = QuantumRegister(2, "qreg1") # Create a QuantumRegister with 2 qubits
qr2 = QuantumRegister(1, "qreg2") # Create a QuantumRegister with 1 qubit
cr1 = ClassicalRegister(3, "creg1") # Create a ClassicalRegister with 3 cbits

combined_circ = QuantumCircuit(
qr1, qr2, cr1
) # Create a quantum circuit with 2 QuantumRegisters and 1 ClassicalRegister
combined_circ.qubits
[<Qubit register=(2, "qreg1"), index=0>,
<Qubit register=(2, "qreg1"), index=1>,
<Qubit register=(1, "qreg2"), index=0>]

Anda boleh mencari indeks dan daftar Qubit dengan menggunakan kaedah find_bit Circuit dan atributnya.

desired_qubit = qr2[0]  # Qubit 0 of register 'qreg2'

print("Index:", combined_circ.find_bit(desired_qubit).index)
print("Register:", combined_circ.find_bit(desired_qubit).registers)
Index: 2
Register: [(QuantumRegister(1, 'qreg2'), 0)]

Menambah arahan kepada Circuit menambahkan arahan tersebut ke atribut data Circuit. Output sel berikut menunjukkan data ialah senarai objek CircuitInstruction, setiap satunya mempunyai atribut operation, dan atribut qubits.

qc.x(0)  # Add X-gate to qubit 0
qc.data
[CircuitInstruction(operation=Instruction(name='x', num_qubits=1, num_clbits=0, params=[]), qubits=(<Qubit register=(2, "q"), index=0>,), clbits=())]

Cara termudah untuk melihat maklumat ini ialah melalui kaedah draw, yang mengembalikan visualisasi Circuit. Lihat Visualisasikan Circuit untuk cara berbeza memaparkan Circuit kuantum.

qc.draw("mpl")

Output of the previous code cell

Objek arahan Circuit boleh mengandungi Circuit "definisi" yang menggambarkan arahan dari segi arahan yang lebih asas. Contohnya, X-gate ditakrifkan sebagai kes tertentu U3-gate, sebuah Gate Qubit tunggal yang lebih umum.

# Draw definition circuit of 0th instruction in `qc`
qc.data[0].operation.definition.draw("mpl")

Output of the previous code cell

Arahan dan Circuit adalah serupa kerana kedua-duanya menerangkan operasi pada bit dan Qubit, tetapi mempunyai tujuan yang berbeza:

  • Arahan dianggap tetap, dan kaedahnya biasanya mengembalikan arahan baharu (tanpa mengubah objek asal).
  • Circuit direka untuk dibina merentasi banyak baris kod, dan kaedah QuantumCircuit sering mengubah objek yang sedia ada.

Apakah kedalaman Circuit?​

Kedalaman (depth()) Circuit kuantum ialah ukuran bilangan "lapisan" Gate kuantum, yang dilaksanakan secara selari, yang diperlukan untuk melengkapkan pengiraan yang ditakrifkan oleh Circuit tersebut. Oleh kerana Gate kuantum mengambil masa untuk dilaksanakan, kedalaman Circuit lebih kurang sepadan dengan jumlah masa yang diambil oleh komputer kuantum untuk melaksanakan Circuit tersebut. Oleh itu, kedalaman Circuit merupakan salah satu kuantiti penting yang digunakan untuk mengukur sama ada Circuit kuantum boleh dijalankan pada peranti.

Selebihnya halaman ini menggambarkan cara memanipulasi Circuit kuantum.

Bina Circuit​

Kaedah seperti QuantumCircuit.h dan QuantumCircuit.cx menambah arahan tertentu kepada Circuit. Untuk menambah arahan kepada Circuit secara lebih umum, gunakan kaedah append. Ini mengambil arahan dan senarai Qubit untuk menerapkan arahan tersebut. Lihat dokumentasi API Pustaka Circuit untuk senarai arahan yang disokong.

from qiskit.circuit.library import HGate

qc = QuantumCircuit(1)
qc.append(
HGate(), # New HGate instruction
[0], # Apply to qubit 0
)
qc.draw("mpl")

Output of the previous code cell

Untuk menggabungkan dua Circuit, gunakan kaedah compose. Ini menerima QuantumCircuit lain dan senarai pemetaan Qubit yang pilihan.

nota

Kaedah compose mengembalikan Circuit baharu dan tidak mengubah mana-mana Circuit yang ia bertindak ke atasnya. Untuk mengubah Circuit yang anda panggil kaedah compose, gunakan argumen inplace=True.

qc_a = QuantumCircuit(4)
qc_a.x(0)

qc_b = QuantumCircuit(2, name="qc_b")
qc_b.y(0)
qc_b.z(1)

# compose qubits (0, 1) of qc_a to qubits (1, 3) of qc_b respectively
combined = qc_a.compose(qc_b, qubits=[1, 3])
combined.draw("mpl")

Output of the previous code cell

Anda mungkin juga ingin mengkompil Circuit ke dalam arahan untuk memastikan Circuit anda teratur. Anda boleh menukar Circuit kepada arahan dengan menggunakan kaedah to_instruction, kemudian menambahkan ini kepada Circuit lain seperti mana-mana arahan lain. Circuit yang dilukis dalam sel berikut secara fungsional setara dengan Circuit yang dilukis dalam sel sebelumnya.

inst = qc_b.to_instruction()
qc_a.append(inst, [1, 3])
qc_a.draw("mpl")

Output of the previous code cell

Jika Circuit anda bersifat uniter, anda boleh menukarnya kepada Gate dengan menggunakan kaedah to_gate. Objek Gate adalah jenis arahan tertentu yang mempunyai beberapa ciri tambahan, seperti kaedah control, yang menambah kawalan kuantum.

gate = qc_b.to_gate().control()
qc_a.append(gate, [0, 1, 3])
qc_a.draw("mpl")

Output of the previous code cell

Untuk melihat apa yang berlaku, anda boleh menggunakan kaedah decompose untuk mengembangkan setiap arahan ke dalam definisinya.

nota

Kaedah decompose mengembalikan Circuit baharu dan tidak mengubah Circuit yang ia bertindak ke atasnya.

qc_a.decompose().draw("mpl")

Output of the previous code cell

Ukur Qubit​

Pengukuran digunakan untuk menyampel keadaan Qubit individu dan memindahkan keputusan ke daftar klasik. Perlu diingat bahawa jika anda menghantar Circuit kepada primitif Sampler, pengukuran diperlukan. Walau bagaimanapun, Circuit yang dihantar kepada primitif Estimator tidak boleh mengandungi pengukuran.

Qubit boleh diukur menggunakan tiga kaedah: measure, measure_all dan measure_active. Untuk mempelajari cara menvisualisasikan keputusan yang diukur, lihat halaman Visualisasikan keputusan.

  1. QuantumCircuit.measure : mengukur setiap Qubit dalam argumen pertama ke atas bit klasik yang diberikan sebagai argumen kedua. Kaedah ini membolehkan kawalan penuh ke atas tempat keputusan pengukuran disimpan.

  2. QuantumCircuit.measure_all : tidak mengambil argumen dan boleh digunakan untuk Circuit kuantum tanpa bit klasik yang telah ditakrifkan. Ia mencipta wayar klasik dan menyimpan keputusan pengukuran mengikut susunan. Contohnya, pengukuran Qubit qiq_i disimpan dalam cbit measimeas_i). Ia juga menambah halangan sebelum pengukuran.

  3. QuantumCircuit.measure_active : serupa dengan measure_all, tetapi hanya mengukur Qubit yang mempunyai operasi.

qc1 = QuantumCircuit(2, 2)
qc1.measure(0, 1)
qc1.draw("mpl", cregbundle=False)

Output of the previous code cell

qc2 = QuantumCircuit(2)
qc2.measure_all()
qc2.draw("mpl", cregbundle=False)

Output of the previous code cell

qc3 = QuantumCircuit(2)
qc3.x(1)
qc3.measure_active()
qc3.draw("mpl", cregbundle=False)

Output of the previous code cell

Circuit berparameter​

Banyak algoritma kuantum jangka pendek melibatkan pelaksanaan banyak variasi Circuit kuantum. Oleh kerana membina dan mengoptimumkan Circuit yang besar boleh memakan masa secara komputasi, Qiskit menyokong Circuit berparameter. Circuit ini mempunyai parameter yang tidak ditakrifkan, dan nilainya tidak perlu ditakrifkan sehingga sejurus sebelum melaksanakan Circuit. Ini membolehkan anda memindahkan pembinaan dan pengoptimuman Circuit keluar daripada gelung program utama. Sel berikut mencipta dan memaparkan Circuit berparameter.

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

angle = Parameter("angle") # undefined number

# Create and optimize circuit once
qc = QuantumCircuit(1)
qc.rx(angle, 0)
qc = generate_preset_pass_manager(
optimization_level=3, basis_gates=["u", "cx"]
).run(qc)

qc.draw("mpl")

Output of the previous code cell

Sel berikut mencipta banyak variasi Circuit ini dan memaparkan salah satu variasinya.

circuits = []
for value in range(100):
circuits.append(qc.assign_parameters({angle: value}))

circuits[0].draw("mpl")

Output of the previous code cell

Anda boleh mencari senarai parameter Circuit yang tidak ditakrifkan dalam atribut parameters-nya.

qc.parameters
ParameterView([Parameter(angle)])

Tukar nama parameter​

Secara lalai, nama parameter untuk Circuit berparameter diberikan awalan x- contohnya, x[0]. Anda boleh menukar nama selepas ia ditakrifkan, seperti yang ditunjukkan dalam contoh berikut.

from qiskit.circuit.library import z_feature_map
from qiskit.circuit import ParameterVector

# Define a parameterized circuit with default names
# For example, x[0]
circuit = z_feature_map(2)

# Set new parameter names
# They will now be prefixed by `hi` instead
# For example, hi[0]
training_params = ParameterVector("hi", 2)

# Assign parameter names to the quantum circuit
circuit = circuit.assign_parameters(parameters=training_params)
Terlupa nama kaedah? Cuba tanya Qiskit Code Assistant.

Langkah seterusnya​

Cadangan
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 Mac 2026