Beispiele für Sampler
Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt. Wir empfehlen, diese Versionen oder neuere zu verwenden.
qiskit[all]~=2.5.2 qiskit-ibm-runtime~=0.47.0
Erzeugung vollständiger, fehlermindernder Quasi-Wahrscheinlichkeitsverteilungen, die aus den Ausgabewerten von Quantenschaltungen entnommen wurden. Nutzen Sie die Funktionen von Sampler für Such- und Klassifizierungsalgorithmen wie Grover und QVSM.
Ein einzelnes Experiment durchführen
Verwenden Sie „Sampler“, um die Messergebnisse als Bitfolgen oder Zählwerte eines einzelnen Schaltkreises auszugeben.
import numpy as np
from qiskit.circuit.library import iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import random_hermitian
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
n_qubits = 127
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=n_qubits
)
mat = np.real(random_hermitian(n_qubits, seed=1234))
circuit = iqp(mat)
circuit.measure_all()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
sampler = Sampler(backend)
job = sampler.run([isa_circuit])
result = job.result()
# Get results for the first (and only) PUB
pub_result = result[0]
print(f" > First ten results: {pub_result.data.meas.get_bitstrings()[:10]}")Output:
> First ten results: ['0111010010000101000101110000000101010000100111110000110011101100001100101111100100010110000110101001100010100001111010000110000', '0010001000101011111011110111001100101010110111001101100111100000011010010000100000011101010011101010000100101001101100000110001', '0010100110101011001001010111010110111011000101110001001011111010011010001000010010010001110010000001100000100110010000110010001', '1111000001010000010111000010100111001110101000100101000001110110001110010100010100010110001000001000100001101100100001101010100', '1100111010001011001011001010111100011100110010110011110010100001011101100110111000010000011110101010110101100001011000000000000', '0010111110001001110000001110001110010001111110100111100001001011000010000111000010011000100100000001001100001110000001100000110', '0110010101111101101111001101011100111000101110101101010100101010010000010000011000000100101110001010010110101001110001010000110', '0000001111111000001101101010111011010001111101101001111110100101100001110010000111011000000010101000100000000001101110000000001', '1011001100100101111000001000100100001011001001100001001010111011001000001010100111010001001110010101110000100001000100101111001', '1111100010100111000011010101000110011011110111011000000010101000100011000001000100000101000110001000000001001011101101110011000']
Führen Sie mehrere Experimente in einem einzigen Auftrag durch
Verwenden Sie „Sampler“, um die Messergebnisse als Bitfolgen oder Zählwerte mehrerer Schaltkreise in einem einzigen Auftrag auszugeben.
import numpy as np
from qiskit.circuit.library import iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import random_hermitian
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
n_qubits = 127
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=n_qubits
)
rng = np.random.default_rng()
mats = [np.real(random_hermitian(n_qubits, seed=rng)) for _ in range(3)]
circuits = [iqp(mat) for mat in mats]
for circuit in circuits:
circuit.measure_all()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuits = pm.run(circuits)
sampler = Sampler(mode=backend)
job = sampler.run(isa_circuits)
result = job.result()
for idx, pub_result in enumerate(result):
print(
f" > First five results for pub {idx}: "
f"{pub_result.data.meas.get_bitstrings()[:5]}"
)Output:
> First five results for pub 0: ['0000111110010100100011101001111111000010000000100001011110000101000111100110000000000110010000001001000001100000101101000000011', '1000001101000100111010110001100100100011111100001000011010100001001011001110000100100011100010010101000100001110001110000101000', '1010001100001101011000000110100001101000010101000000110010100001100010010000001000011100100101011001000001110101100000100010001', '0010010011001100001001111111001100001011010010010111011010111000010010100011011101101100110000101001001101000000001010000001000', '0000101100100011000111100010110010111000000101010101010101011010010010011011000110011010011001011110010101000111000111000100000']
> First five results for pub 1: ['1011011001010100010010111001111100011000110010000110000000100101101111100000010000011000100011101000101101001100000000011011000', '1110000000100001100111000010110011101110110010001011100001000000000100110011010010100010000100001111001101001000001000000011000', '0100000010010100010011000011111011010011010111110111110011101100110011111010111101011000110000001111110001110111001110000000001', '1110011011010111110110111000010111101010000110001101001000100000001010001001010000001000001110000000000110001101001010000010000', '1110010111110110100100100010100110101000001000100011100101001001110011001001011101000000000000110101010000100111010100010011000']
> First five results for pub 2: ['0011110001000000010000101101010100011011101101001111001000011011101010011010011000010001000001010101100100010000011100010000000', '1010110011100101001111110000110111110011101101100011000100001111001001101011000010100001000000100011110001101001001000101100001', '1111000011001100000101010110100010110001000000000111100111100011011101101001100110001010010000000101001000011100100001000011100', '0100101011111000010100001001001110001100001001100111011100010010000001000010100101101000001001101000110011010000001010101000000', '1101011000010000010011001111111011110111011101000011010001000000100010000110001010000101110000111101000110100000100011110110000']
Parametrisierte Schaltkreise ausführen
Führen Sie mehrere Experimente in einem einzigen Job durch und nutzen Sie dabei Parameterwerte, um die Wiederverwendbarkeit der Schaltkreise zu erhöhen.
import numpy as np
from qiskit.circuit.library import real_amplitudes
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
n_qubits = 127
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=n_qubits
)
# Step 1: Map classical inputs to a quantum problem
circuit = real_amplitudes(num_qubits=n_qubits, reps=2)
circuit.measure_all()
# Define three sets of parameters for the circuit
rng = np.random.default_rng(1234)
parameter_values = [
rng.uniform(-np.pi, np.pi, size=circuit.num_parameters) for _ in range(3)
]
# Step 2: Optimize problem for quantum execution.
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
# Step 3: Execute using IBM Quantum primitives.
sampler = Sampler(backend)
job = sampler.run([(isa_circuit, parameter_values)])
result = job.result()
# Get results for the first (and only) PUB
pub_result = result[0]
# Get counts from the classical register "meas".
print(
f" >> First five results for the meas output register: "
f"{pub_result.data.meas.get_bitstrings()[:5]}"
)Output:
>> First five results for the meas output register: ['0110001001111000110000000111110011100111100001110100111011011011001111100011011010110011111000000110111000110000001110100110111', '1110001011100111100000001110010100010110001011110100111111110111100001100010010000011111100010000100000111100010011000000010111', '0111100101110001001011010111111110111010001001100011000111001101101010001011101101000010110010000011010101001011101110010100101', '0110110010001000010010000110000010000100111111101011111000010111010101000110001010100110100010110000000010101011000011111110110', '0001010111110100001010000011010010101110000101100011001000111111000010101111110100000011010000101111110110111110011010001001101']
Stapelverarbeitung und erweiterte Optionen verwenden
Entdecken Sie den B atch-Ausführungsmodus und die erweiterten Optionen zur Optimierung der Schaltungsleistung auf QPUs.
import numpy as np
from qiskit.circuit.library import iqp
from qiskit.quantum_info import random_hermitian
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import Batch, QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
n_qubits = 127
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=n_qubits
)
rng = np.random.default_rng(1234)
mat = np.real(random_hermitian(n_qubits, seed=rng))
circuit = iqp(mat)
circuit.measure_all()
mat = np.real(random_hermitian(n_qubits, seed=rng))
another_circuit = iqp(mat)
another_circuit.measure_all()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
another_isa_circuit = pm.run(another_circuit)
# The context manager automatically closes the batch.
with Batch(backend=backend) as batch:
sampler = Sampler(mode=batch)
job = sampler.run([isa_circuit])
another_job = sampler.run([another_isa_circuit])
result = job.result()
another_result = another_job.result()
# first job
print(
f" > The first five measurement results of job 1: "
f"{result[0].data.meas.get_bitstrings()[:5]}"
)Output:
> The first five measurement results of job 1: ['0110100010111000010001000100100011111000100001010001000110010101011000100101000111010000110001010000001001101110101101000100000', '1001100000101110011000000101010000001100110110000101100011010001000000001001001000000011110000001110000000001001000000010000010', '0110000001010111011110011100010101101010011100000100001000110100010110100101111111000000010010001110100000000000000001100001100', '0000010011100000010111010111010100100100010000110110111111010111001010111101100010000100101011000000000010101110000011010001000', '0110000101011001001001111101011001111001100101000111010000001100111001000111111100000010001001110110010100110011000000000110110']
# second job
print(
" > The first five measurement results of job 2:",
another_result[0].data.meas.get_bitstrings()[:5],
)Output:
> The first five measurement results of job 2: ['1001111000100001101101011000000001101101100101110001010110100000100111001011011110011010101001001010100100110001010000001000001', '1000111101000111011110110000000100010100011111110110001001101000001111111010001101010010111010000101101000001110100000110010001', '0101001101000011011000010101100101011110010010011000111100000000010010010010000001100000001001001000000010011110100011111100100', '0010110010110011100011001010100100011100001010001100110100000000111100111000000100011101111011011000101001000010100010101111000', '0011110001100010010111010010100110110010011000010000100100100000111011000011001001110100000110001010101000011000110001001101100']
Nächste Schritte
- Erlegen Sie erweiterte Laufzeitoptionen fest.
- Üben Sie den Umgang mit Primitiven, indem Sie die Lektion zur Cost-Funktion unter IBM Quantum Learning durcharbeiten.
- Im Abschnitt „Transpile“ erfahren Sie, wie Sie lokal transpilieren können.
- Lesen Sie die Anleitung zum Vergleichen von Transpiler-Einstellungen.
- Beachten Sie die Auftragsbeschränkungen, wenn Sie einen Auftrag an eine QPU von IBM® senden.