Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions — kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

Perpustakaan Circuit

Versi pakej

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

qiskit[all]~=2.5.2

Qiskit SDK menyertakan perpustakaan Circuit popular untuk digunakan sebagai blok binaan dalam program anda sendiri. Menggunakan Circuit yang telah ditakrifkan menjimatkan masa penyelidikan, penulisan kod, dan penyahpepijatan. Perpustakaan ini merangkumi Circuit popular dalam pengkomputeran kuantum, Circuit yang sukar untuk disimulasikan secara klasikal, dan Circuit yang berguna untuk penanda aras perkakasan kuantum.

Halaman ini menyenaraikan kategori Circuit berbeza yang disediakan oleh perpustakaan. Untuk senarai lengkap Circuit, lihat dokumentasi API perpustakaan Circuit.

Gate piawai​

Perpustakaan Circuit juga merangkumi gate kuantum piawai. Sesetengahnya adalah gate yang lebih asas (seperti UGate), dan yang lain adalah gate berbilang qubit yang biasanya perlu dibina daripada gate qubit tunggal dan dua qubit. Untuk menambah gate yang diimport ke Circuit anda, gunakan kaedah append; argumen pertama adalah gate, dan argumen seterusnya ialah senarai qubit yang akan dikenakan gate tersebut.

Sebagai contoh, sel kod berikut mencipta Circuit dengan gate Hadamard dan gate X berbilang kawalan.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit import QuantumCircuit
from qiskit.circuit.library import HGate, MCXGate

mcx_gate = MCXGate(3)
hadamard_gate = HGate()

qc = QuantumCircuit(4)
qc.append(hadamard_gate, [0])
qc.append(mcx_gate, [0, 1, 2, 3])
qc.draw("mpl")

Output of the previous code cell

Lihat gate piawai dalam dokumentasi API perpustakaan Circuit.

Circuit N-tempatan​

Circuit ini menyilih lapisan gate putaran qubit tunggal dengan lapisan gate pembelitan berbilang qubit.

Keluarga Circuit ini popular dalam algoritma kuantum variasi kerana ia boleh menghasilkan pelbagai keadaan kuantum. Algoritma variasi melaraskan parameter gate untuk mencari keadaan yang mempunyai sifat tertentu (seperti keadaan yang mewakili penyelesaian baik kepada masalah pengoptimuman). Untuk tujuan ini, banyak Circuit dalam perpustakaan adalah berparameter, bermakna anda boleh mentakrifkannya tanpa nilai tetap.

Sel kod berikut mengimport Circuit n_local, di mana gate pembelitan adalah gate dua qubit. Circuit ini menyilihkan blok gate qubit tunggal berparameter, diikuti oleh blok pembelitan gate dua qubit. Kod berikut mencipta Circuit tiga qubit, dengan gate RX qubit tunggal dan gate CZ dua qubit.

from qiskit.circuit.library import n_local

two_local = n_local(3, "rx", "cz")
two_local.draw("mpl")

Output of the previous code cell

Anda boleh mendapatkan objek seperti senarai parameter Circuit daripada atribut parameters.

two_local.parameters
ParameterView([ParameterVectorElement(θ[0]), ParameterVectorElement(θ[1]), ParameterVectorElement(θ[2]), ParameterVectorElement(θ[3]), ParameterVectorElement(θ[4]), ParameterVectorElement(θ[5]), ParameterVectorElement(θ[6]), ParameterVectorElement(θ[7]), ParameterVectorElement(θ[8]), ParameterVectorElement(θ[9]), ParameterVectorElement(θ[10]), ParameterVectorElement(θ[11])])

Anda juga boleh menggunakan ini untuk menetapkan parameter ini kepada nilai sebenar menggunakan kamus dalam bentuk { Parameter: number }. Untuk menunjukkan, sel kod berikut menetapkan setiap parameter dalam circuit kepada 0.

bound_circuit = two_local.assign_parameters(
{p: 0 for p in two_local.parameters}
)
bound_circuit.decompose().draw("mpl")

Output of the previous code cell

Untuk maklumat lanjut, lihat gate N-tempatan dalam dokumentasi API perpustakaan Circuit atau ikuti Kursus reka bentuk algoritma variasi dalam IBM Quantum Learning.

Circuit pengekodan data​

Circuit berparameter ini mengekod data ke atas keadaan kuantum untuk diproses oleh algoritma pembelajaran mesin kuantum. Beberapa Circuit yang disokong oleh Qiskit ialah:

  • Pengekodan amplitud, yang mengekod setiap nombor ke dalam amplitud keadaan basis. Ini boleh menyimpan 2n2^n nombor dalam satu keadaan, tetapi boleh mahal untuk dilaksanakan.
  • Pengekodan basis, yang mengekod integer kk dengan menyediakan keadaan basis yang sepadan ∣k⟩|k\rangle.
  • Pengekodan sudut, yang menetapkan setiap nombor dalam data sebagai sudut putaran dalam Circuit berparameter.

Pendekatan terbaik bergantung pada spesifik aplikasi anda. Walau bagaimanapun, pada komputer kuantum semasa, kita sering menggunakan Circuit pengekodan sudut seperti zz_feature_map.

from qiskit.circuit.library import zz_feature_map

features = [0.2, 0.4, 0.8]
feature_map = zz_feature_map(feature_dimension=len(features))

encoded = feature_map.assign_parameters(features)
encoded.draw("mpl")

Output of the previous code cell

Lihat Circuit pengekodan data dalam dokumentasi API perpustakaan Circuit.

Circuit evolusi masa​

Circuit ini mensimulasikan keadaan kuantum yang berevolusi dalam masa. Gunakan Circuit evolusi masa untuk menyiasat kesan fizikal seperti pemindahan haba atau peralihan fasa dalam sistem. Circuit evolusi masa juga merupakan blok binaan asas fungsi gelombang kimia (seperti keadaan percubaan kluster berganding unitari) dan algoritma QAOA yang kita gunakan untuk masalah pengoptimuman.

from qiskit.circuit.library import PauliEvolutionGate
from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp

# Prepare an initial state with a Hadamard on the middle qubit
state = QuantumCircuit(3)
state.h(1)

hamiltonian = SparsePauliOp(["ZZI", "IZZ"])
evolution = PauliEvolutionGate(hamiltonian, time=1)

# Evolve state by appending the evolution gate
state.compose(evolution, inplace=True)

state.draw("mpl")

Output of the previous code cell

Baca dokumentasi API PauliEvolutionGate.

Circuit penanda aras dan teori kerumitan​

Circuit penanda aras memberikan gambaran seberapa baik perkakasan kita sebenarnya berfungsi, dan Circuit teori kerumitan membantu kita memahami seberapa sukar masalah yang ingin kita selesaikan.

Sebagai contoh, penanda aras "isipadu kuantum" mengukur ketepatan pelaksanaan Circuit kuantum rawak oleh komputer kuantum. Skor komputer kuantum meningkat dengan saiz Circuit yang boleh dijalankan dengan boleh percaya. Ini mengambil kira semua aspek komputer, termasuk bilangan qubit, fideliti arahan, kesambungan qubit, dan tumpukan perisian yang melakukan transpilasi dan pasca-pemprosesan keputusan. Baca lebih lanjut tentang isipadu kuantum dalam kertas isipadu kuantum yang asal.

Kod berikut menunjukkan contoh Circuit isipadu kuantum yang dibina dalam Qiskit yang berjalan pada empat qubit (blok unitary ialah gate dua qubit yang diacak).

from qiskit.circuit.library import quantum_volume

quantum_volume(4).draw("mpl")

Output of the previous code cell

Perpustakaan Circuit juga merangkumi Circuit yang dipercayai sukar untuk disimulasikan secara klasikal, seperti Circuit polinomial kuantum serta-merta (iqp). Circuit ini mengepit gate pepenjuru tertentu (dalam basis pengkomputeran) antara blok gate Hadamard.

Circuit lain termasuk grover_operator untuk digunakan dalam algoritma Grover, dan Circuit fourier_checking untuk masalah semakan Fourier. Lihat Circuit ini dalam Circuit kuantum tertentu dalam dokumentasi API perpustakaan Circuit.

Circuit aritmetik​

Operasi aritmetik ialah fungsi klasikal, seperti menambah integer dan operasi bit. Ini mungkin berguna dengan algoritma seperti anggaran amplitud untuk aplikasi kewangan, dan dalam algoritma seperti algoritma HHL, yang menyelesaikan sistem persamaan linear.

Sebagai contoh, mari kita cuba menambah dua nombor tiga bit menggunakan Circuit "riak-bawa" untuk melakukan penambahan di tempat (FullAdderGate). Penambah ini menambah dua nombor (kita akan memanggilnya "A" dan "B") dan menulis keputusan ke daftar yang memegang B. Dalam contoh berikut, A=2 dan B=3.

from qiskit.circuit.library import FullAdderGate
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister

adder = FullAdderGate(3) # Adder of 3-bit numbers

# Create the number A=2
reg_a = QuantumRegister(3, "a")
number_a = QuantumCircuit(reg_a)
number_a.initialize(2) # Number 2; |010>

# Create the number B=3
reg_b = QuantumRegister(3, "b")
number_b = QuantumCircuit(reg_b)
number_b.initialize(3) # Number 3; |011>

# Create a circuit to hold everything, including a classical register for
# the result
qregs = [
QuantumRegister(1, "cin"),
QuantumRegister(3, "a"),
QuantumRegister(3, "b"),
QuantumRegister(1, "cout"),
]
reg_result = ClassicalRegister(3)
circuit = QuantumCircuit(*qregs, reg_result)

# Compose number initializers with the adder. Adder stores the result to
# register B, so we'll measure those qubits.
circuit = (
circuit.compose(number_a, qubits=reg_a)
.compose(number_b, qubits=reg_b)
.compose(adder)
)
circuit.measure(reg_b, reg_result)
circuit.draw("mpl")

Output of the previous code cell

Mensimulasikan Circuit menunjukkan ia mengeluarkan 5 untuk semua 1024 tembakan (iaitu diukur dengan kebarangkalian 1.0).

from qiskit.primitives import StatevectorSampler

result = StatevectorSampler().run([circuit]).result()

print(f"Count data:\n {result[0].data.c0.get_int_counts()}")
Count data:
{5: 1024}

Lihat Aritmetik dalam dokumentasi API perpustakaan Circuit.

Langkah seterusnya​

Cadangan