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?

Awtomatikong paghahanap ng mga cut

Hakbang 1: Map​

Gumawa ng circuit at observables​

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

_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_addon_cutting": "qiskit-addon-cutting"}
_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")
import numpy as np
from qiskit.circuit.random import random_circuit
from qiskit.quantum_info import SparsePauliOp

circuit = random_circuit(7, 6, max_operands=2, seed=1242)
observable = SparsePauliOp(["ZIIIIII", "IIIZIII", "IIIIIIZ"])

circuit.draw("mpl", scale=0.8)

Quantum circuit diagram

Hakbang 2: Optimize​

Hanapin ang mga cut location, na may maximum na 4 qubit bawat subcircuit. Ang circuit na ito ay maaaring hatiin sa dalawa sa pamamagitan ng paggawa ng isang wire cut at pagputol ng isang CRZGate​

from qiskit_addon_cutting.automated_cut_finding import (
find_cuts,
OptimizationParameters,
DeviceConstraints,
)

# Specify settings for the cut-finding optimizer
optimization_settings = OptimizationParameters(seed=111)

# Specify the size of the QPUs available
device_constraints = DeviceConstraints(qubits_per_subcircuit=4)

cut_circuit, metadata = find_cuts(circuit, optimization_settings, device_constraints)
print(
f'Found solution using {len(metadata["cuts"])} cuts with a sampling '
f'overhead of {metadata["sampling_overhead"]}.\n'
f'Lowest cost solution found: {metadata["minimum_reached"]}.'
)
for cut in metadata["cuts"]:
print(f"{cut[0]} at circuit instruction index {cut[1]}")
cut_circuit.draw("mpl", scale=0.8, fold=-1)
Found solution using 2 cuts with a sampling overhead of 127.06026169907257.
Lowest cost solution found: True.
Wire Cut at circuit instruction index 19
Gate Cut at circuit instruction index 28

Quantum circuit diagram

Magdagdag ng mga ancilla para sa mga wire cut at palawakin ang mga observable upang isama ang mga ancilla qubit​

from qiskit_addon_cutting import cut_wires, expand_observables

qc_w_ancilla = cut_wires(cut_circuit)
observables_expanded = expand_observables(observable.paulis, circuit, qc_w_ancilla)
qc_w_ancilla.draw("mpl", scale=0.8, fold=-1)

Quantum circuit diagram

Hatiin ang circuit at observables sa mga subcircuit at subobservables. Kalkulahin ang sampling overhead na nakukuha sa pagputol ng mga gate at wire na ito.​

from qiskit_addon_cutting import partition_problem

partitioned_problem = partition_problem(
circuit=qc_w_ancilla, observables=observables_expanded
)
subcircuits = partitioned_problem.subcircuits
subobservables = partitioned_problem.subobservables
print(
f"Sampling overhead: {np.prod([basis.overhead for basis in partitioned_problem.bases])}"
)
Sampling overhead: 127.06026169907257
subobservables
{0: PauliList(['IIII', 'IZII', 'IIIZ']),
1: PauliList(['ZIII', 'IIII', 'IIII'])}
subcircuits[0].draw("mpl", style="iqp", scale=0.8)

Quantum circuit diagram

subcircuits[1].draw("mpl", style="iqp", scale=0.8)

Quantum circuit diagram

Bumuo ng mga eksperimento na patatakbuhin sa backend.​

from qiskit_addon_cutting import generate_cutting_experiments

subexperiments, coefficients = generate_cutting_experiments(
circuits=subcircuits, observables=subobservables, num_samples=1_000
)
print(
f"{len(subexperiments[0]) + len(subexperiments[1])} total subexperiments to run on backend."
)
96 total subexperiments to run on backend.

Ang Hakbang 3 at 4 ng isang Qiskit pattern ay maaaring isagawa tulad sa mga nakaraang tutorial.