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?

Pelajari model hingar bagi sesuatu gate

Tutorial ini menunjukkan pembelajaran model hingar bagi gate uniter dengan protokol pembelajaran piawai yang boleh diakses melalui fungsi protokol peringkat tinggi prepare_vanilla_program() dan process_vanilla_result().

  1. Takrifkan gate

  2. Sediakan simulasi setempat

  3. Sediakan atur cara kuantum

  4. Jalankan atur cara kuantum

  5. Baca keputusan

Menjalankan pada perkakasan sebenar

Litar di bawah disimulasikan secara setempat, jadi panduan ini tidak memerlukan bukti kelayakan IBM Quantum®. Untuk menjalankannya pada peranti sebenar sebagai alternatif:

  • Langkah 1: gantikan FakeMarrakesh dengan backend sebenar.

  • Langkah 2: serahkan backend tersebut sebagai mod executor, dan buang pilihan simulator.

1. Takrifkan gate​

Gate ini ialah BoxOp yang memegang satu lapisan twirled yang terdiri daripada enam gate CZ yang tidak bersilang.

from qiskit.circuit import QuantumCircuit
from qiskit_ibm_runtime.fake_provider import FakeMarrakesh
from samplomatic import InjectNoise, Tag, Twirl

backend = FakeMarrakesh()

cz_pairs = [(91, 92), (93, 94), (95, 99), (98, 111), (112, 113), (114, 115)]

circuit = QuantumCircuit(backend.num_qubits)
with circuit.box([Twirl(), Tag("cz_gate"), InjectNoise("cz_gate")]):
for pair in cz_pairs:
circuit.cz(*pair)
Menjalankan pada perkakasan sebenar
from qiskit_ibm_runtime import QiskitRuntimeService

backend = QiskitRuntimeService().backend("ibm_marrakesh")

2. Sediakan simulasi setempat​

Indeks Pauli di dalam setiap peta adalah setempat kepada gate, mengikut tertib qubit fizikal menaik:

cz_qubits = sorted({qubit for pair in cz_pairs for qubit in pair})
local = {qubit: index for index, qubit in enumerate(cz_qubits)}
local
{91: 0,
92: 1,
93: 2,
94: 3,
95: 4,
98: 5,
99: 6,
111: 7,
112: 8,
113: 9,
114: 10,
115: 11}

Takrifkan hingar dengan sebutan ZZ berkorelasi dan sebutan XX yang lebih lemah pada setiap pasangan CZ, serta sebutan Z qubit tunggal di mana-mana; pengukuran mendapat sebutan bit-flip bagi setiap qubit.

from qiskit.quantum_info import PauliLindbladMap

num_qubits = len(cz_qubits)

cz_noise = PauliLindbladMap.from_sparse_list(
[("ZZ", [local[a], local[b]], 8e-4) for a, b in cz_pairs]
+ [("XX", [local[a], local[b]], 4e-4) for a, b in cz_pairs]
+ [("Z", [index], 3e-4) for index in range(num_qubits)],
num_qubits=num_qubits,
)

readout_noise = PauliLindbladMap.from_sparse_list(
[("X", [index], 5e-3) for index in range(num_qubits)], num_qubits=num_qubits
)

Bina kotak untuk dipelajari oleh pengukuran.

measurement = QuantumCircuit(backend.num_qubits, num_qubits)
with measurement.box([Twirl(), Tag("readout"), InjectNoise("readout")]):
for clbit, qubit in enumerate(cz_qubits):
measurement.measure(qubit, clbit)

Setiap entri layer_noise_model memasangkan salah satu kotak tersebut dengan peta yang akan dikenakan padanya. Gunakan kaedah simulasi penstabil, dan tetapkan seed_simulator untuk menjadikan data simulasi boleh dihasilkan semula.

from qiskit_aer import AerSimulator
from qiskit_ibm_runtime import Executor

executor = Executor(
mode=AerSimulator(method="stabilizer"),
options={
"simulator": {
"layer_noise_model": [
(circuit[0], cz_noise),
(measurement[0], readout_noise),
],
"seed_simulator": 1234,
}
},
)
Menjalankan pada perkakasan sebenar
executor = Executor(mode=backend)

3. Sediakan program kuantum​

Gunakan prepare_vanilla_program() untuk membina program kuantum yang mengandungi eksperimen pembelajaran.

from qiskit_noise_learning.protocols import prepare_vanilla_program

program = prepare_vanilla_program(
backend,
[circuit[0], measurement[0]],
fragment_depths=[2, 16, 64, 128],
num_randomizations=50,
shots_per_randomization=20,
)

print(f"Number of template circuits: {len(program.items)}")
Number of template circuits: 5

4. Jalankan program kuantum​

Hantar program kuantum. Langkah ini sama sama ada pelaksana diarahkan ke simulator atau ke peranti sebenar.

result = executor.run(program).result()

5. Baca keputusan​

Proses keputusan dengan process_vanilla_result().

from qiskit_noise_learning.protocols import process_vanilla_result

noise_maps, gate_names, fit = process_vanilla_result(result)

Plotkan pereputan fidelity bagi setiap pasangan qubit: data dan penyuaian eksponen.

fit.plot_qubit_pair_decays(
pairs=cz_pairs,
observable_type="means",
exponential_fit=True,
)