Lumaktaw sa pangunahing nilalaman
Ang proyektong ito ay nasa beta. Nakakita ng bug? Mag-bukas ng GitHub issue. May tanong o ideya? Magtanong sa Discussions — gusto naming marinig ang iyong feedback!
Gaano kaganda ang kalidad ng pagsasalin sa pahinang ito?

Alamin ang noise model ng isang gate

Ipinapakita ng tutorial na ito ang pag-aaral ng noise model para sa isang unitary gate gamit ang standard na learning protocol na naaabot sa pamamagitan ng mga high-level protocol function na prepare_vanilla_program() at process_vanilla_result().

  1. I-define ang gate

  2. I-set up ang lokal na simulation

  3. Ihanda ang quantum program

  4. Patakbuhin ang quantum program

  5. Basahin ang mga resulta

Pagpapatakbo sa totoong hardware

Ang mga circuit sa ibaba ay sinisimulate nang lokal, kaya hindi kailangan ng walkthrough na ito ng mga IBM Quantum® credential. Para patakbuhin ito sa totoong device:

  • Hakbang 1: palitan ang FakeMarrakesh ng totoong backend.

  • Hakbang 2: ipasa ang backend na iyon bilang mode ng executor, at alisin ang mga simulator option.

1. I-define ang gate​

Ang gate ay isang BoxOp na may hawak na twirled layer ng anim na disjoint na CZ gate.

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)
Pagpapatakbo sa totoong hardware
from qiskit_ibm_runtime import QiskitRuntimeService

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

2. I-set up ang lokal na simulation​

Ang mga Pauli index sa loob ng bawat map ay lokal sa gate, sa pataas na pagkakasunod-sunod ng pisikal na qubit:

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}

Tukuyin ang noise gamit ang correlated na ZZ term at mas mahinang XX term sa bawat CZ pair, kasama ang isang single-qubit na Z term sa lahat ng dako; ang measurement ay may bit-flip term bawat 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
)

Gumawa ng box para matutunan ng measurement.

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)

Ang bawat entry ng layer_noise_model ay nagpapares ng isa sa mga box na iyon sa map na ia-apply dito. Gamitin ang stabilizer simulation method, at itakda ang seed_simulator para maging reproducible ang simulated na data.

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,
}
},
)
Pagpapatakbo sa totoong hardware
executor = Executor(mode=backend)

3. Ihanda ang quantum program​

Gamitin ang prepare_vanilla_program() para buuin ang quantum program na naglalaman ng mga learning experiment.

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. Patakbuhin ang quantum program​

Isumite ang quantum program. Pareho ang hakbang na ito kahit ang executor ay nakaturo sa simulator o sa totoong device.

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

5. Basahin ang mga resulta​

Iproseso ang resulta gamit ang process_vanilla_result().

from qiskit_noise_learning.protocols import process_vanilla_result

noise_maps, gate_names, fit = process_vanilla_result(result)

I-plot ang fidelity decay ng bawat qubit pair: parehong ang data at ang exponential fit.

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