Exemples d'échantillons
Le code présenté sur cette page a été développé en tenant compte des exigences suivantes. Nous vous recommandons d'utiliser ces versions ou des versions plus récentes.
qiskit[all]~=2.5.1 qiskit-ibm-runtime~=0.47.0
Générer des distributions de quasi-probabilités complètes, à risque atténué, échantillonnées à partir des sorties de circuits quantiques. Tirez parti des fonctionnalités de Sampler pour les algorithmes de recherche et de classification tels que Grover et QVSM.
Lancer une seule expérience
Utilisez Sampler pour renvoyer les résultats de mesure sous forme de chaînes de bits ou de nombres d'impulsions pour un circuit donné.
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, SamplerV2 as 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: ['1111010010110011001010101100010100001010110000100110111000000000100011100000001101110110001010000100000000010000000011000110101', '1001001111111001011011011011001010100101010000001101000010101101010000011100000000100100010000001000010000001010001001010101111', '0100001101111001110000000001000101101010001000010110111100011000100000010101101110001000010001111110001000100010011110000001100', '1000101001100101010000100001000101101010000011001110101111100010111011010110001010101010011011000001100000000010100100010100111', '1100011110101010000000011000100000100001110101011011100011011000111111110010000101000000000101011100001000100101000000000100001', '0000001100000000101100000000110100101011110100101101100110000000100110001110100000010010100000011101011001000000001011000100101', '1000001100110111001110100011101000111111101100110011100000000000000100001000100101100110000000100101000101001001110000001110000', '1100001000101000101100010011010101001010110010101000110111010100000100000011110000110011010110011010110010000000000000000000101', '0111010011101111010010000011010010001000000000010100000001001010001111100000100101000101000111110010101010100000101000100101011', '0100001000101010110010100111110100101001011111000011111010100110011000100001100000111101100101000000010010010000011110001011000']
Exécuter plusieurs expériences dans un seul travail
Utilisez Sampler pour renvoyer les résultats de mesure sous forme de chaînes de bits ou de nombres de circuits dans une seule tâche.
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, SamplerV2 as 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: ['0101000101101010001010110001000101011010001000011001101011100011010001000000011001010110011001100000010001000001000100001111011', '0001010011100000101110011011110001110001000101000101011100101101010001000110101000001000101010000001000001000101101100000101000', '0100100110010110000000101011101100011000000101111110111111010001010000000010000010101110100101100111000101100010100111000010100', '1001011100111110000100011111110001011001100100001010000101010000111010000001100111110001101101001010110100000001010000010110000', '0001101101111010100001110101000011100001100001011101110100000110100001001101011110111011001011000101010110000010000111000001100']
> First five results for pub 1: ['1111011001010000011101010001110000011000100000000001101010100000001100001001011010000100110100110111000001011000010010000000110', '0100111011011010011111101001110101101000100000000011111101011000100010000001110110010011000111010000100010101001011001001101110', '0110001000111101001000101000101000010010100010010000011011110001111010000000011010100000110000010000111101000010001001000100100', '1110110111110000010111101000111000100011110110011001100011000101000111110001001010000110100000011001100011101100000000000101010', '1000010011110101101101111100011000100101001011110010000101011100010111101100111001101111111111010100011010110100011000100100001']
> First five results for pub 2: ['0100010111001111010001100100111010110000001000110000111010111001000011101110000110110010010000001000100100000010101000000001100', '0000110110001001100000001000101000001101010100011010111000101011011110000101011010000110000000000100000001010110010010000000001', '0001000111100100110100101100011011000010100001000100100000010001101110000000010101100111100100111101010111111001100101100010010', '0011110010110101011001111100000101000010001111000101100000001100110011111000000100010010101110111001011100000000001010000001001', '1110000001000100001010011100110100011110101010100100111111000110010111000001001100111000101001001100011011010010111000101000011']
Exécuter des circuits paramétrés
Effectuez plusieurs expériences au sein d'un même travail, en exploitant les valeurs des paramètres pour améliorer la réutilisabilité des circuits.
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, SamplerV2 as 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: ['1001010001111101000000100001100110000001110001011100011001110011101111001110110100110101011001100100011001110001110011011100011', '1000101001000011110100010010001111101110000001111100001010100000100000100110101111110011000000111001010100110001011011101001111', '0110111100011101011000100011000011000010110110000100101100010101111001101011111110011111100000100011111001101101001111011110101', '0110111011101011011111000100000011110011010000010000100110000011101000111100011100100110111000110100111000101011111100010100111', '0000001110100110101011011110110011111100011111001011010101111100000010111110010100001110001001110000001011110011001001000001111']
Utiliser les traitements par lots et les options avancées
Découvrez le mode d'exécution par lots et les options avancées pour optimiser les performances des circuits sur les QPU.
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, SamplerV2 as Sampler
from qiskit_ibm_runtime import QiskitRuntimeService
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: ['1001001101100100001000001111101111001011010010010110110001110000000101010010001101001111000010110010101011001110110111001000100', '0100000111100101000010001110100001000011000011010000100001011000001001010111110100010000111101011100000100001110010110110001010', '1100011001000001101101000000000111001011110101110100001001000001001001100000101010010000000000110011000000011010011011100001111', '0011111111110001010010101111110111000010100001010000011101100010011011110001001000001100101000010100101010100010001001010001010', '1001111101110101010101110110011101111010011101000101110100011011110100000100100100110001001110101000000100101001001111000001010']
# 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: ['1111111110000001000111010010010101010010111001110111001000100000010011101110101101001010001010000000000100011000010001000010000', '1110011100110100100100111001000101010011110001010110100100001110010010011100000000000100000010001001010100011110010000001011100', '1111101001010011110011011010000111000010001101100101000100000110000011001110001101100100100100100010011100001000000000100111010', '1100010101000011101000110100000101001000110110010100000000001000010110100110000111010101010010001101010010100000100111010110000', '1010100100100110011100010010100000101101101101000111000010101110010111010100001111000001100010100011110000000011101000101001100']
Etapes suivantes
- Spécifiez les options d'exécution avancées.
- Entraînez-vous avec les primitives en suivant la leçon sur la fonction « Cost » dans « IBM Quantum Learning ».
- Découvrez comment effectuer une transpilation en local dans la section « Transpilation ».
- Consultez le guide sur la comparaison des paramètres du transcompilateur.
- Comprendre les limites des tâches lors de l'envoi d'une tâche vers une unité de traitement de calcul (QPU) d' IBM®.