أمثلة على Sampler
إصدارات الحزم
تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث.
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
ولِّد توزيعات شبه احتمالية كاملة ومُخفَّفة الأخطاء، مأخوذة بالمعاينة من مخرجات الدوائر الكمية. استفِد من قدرات Sampler لخوارزميات البحث والتصنيف مثل Grover وQVSM.
تشغيل تجربة واحدة
استخدم Sampler لإرجاع نتيجة القياس على هيئة سلاسل بتات أو تعدادات لدائرة واحدة.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime
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]}")
> First ten results: ['0111010010000101000101110000000101010000100111110000110011101100001100101111100100010110000110101001100010100001111010000110000', '0010001000101011111011110111001100101010110111001101100111100000011010010000100000011101010011101010000100101001101100000110001', '0010100110101011001001010111010110111011000101110001001011111010011010001000010010010001110010000001100000100110010000110010001', '1111000001010000010111000010100111001110101000100101000001110110001110010100010100010110001000001000100001101100100001101010100', '1100111010001011001011001010111100011100110010110011110010100001011101100110111000010000011110101010110101100001011000000000000', '0010111110001001110000001110001110010001111110100111100001001011000010000111000010011000100100000001001100001110000001100000110', '0110010101111101101111001101011100111000101110101101010100101010010000010000011000000100101110001010010110101001110001010000110', '0000001111111000001101101010111011010001111101101001111110100101100001110010000111011000000010101000100000000001101110000000001', '1011001100100101111000001000100100001011001001100001001010111011001000001010100111010001001110010101110000100001000100101111001', '1111100010100111000011010101000110011011110111011000000010101000100011000001000100000101000110001000000001001011101101110011000']
تشغيل تجارب متعددة في مهمة واحدة
استخدم Sampler لإرجاع نتيجة القياس على هيئة سلاسل بتات أو تعدادات لعدة دوائر في مهمة واحدة.
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]}"
)
> 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']
تشغيل الدوائر ذات المعاملات
شغِّل عدة تجارب في مهمة واحدة، مستفيدًا من قيم المعاملات لزيادة قابلية إعادة استخدام الدائرة.
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]}"
)
>> First five results for the meas output register: ['0110001001111000110000000111110011100111100001110100111011011011001111100011011010110011111000000110111000110000001110100110111', '1110001011100111100000001110010100010110001011110100111111110111100001100010010000011111100010000100000111100010011000000010111', '0111100101110001001011010111111110111010001001100011000111001101101010001011101101000010110010000011010101001011101110010100101', '0110110010001000010010000110000010000100111111101011111000010111010101000110001010100110100010110000000010101011000011111110110', '0001010111110100001010000011010010101110000101100011001000111111000010101111110100000011010000101111110110111110011010001001101']
استخدام الدُّفعات والخيارات المتقدمة
استكشف وضع التنفيذ بالدُّفعة والخيارات المتقدمة لتحسين أداء الدائرة على وحدات 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]}"
)
> 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],
)
> The first five measurement results of job 2: ['1001111000100001101101011000000001101101100101110001010110100000100111001011011110011010101001001010100100110001010000001000001', '1000111101000111011110110000000100010100011111110110001001101000001111111010001101010010111010000101101000001110100000110010001', '0101001101000011011000010101100101011110010010011000111100000000010010010010000001100000001001001000000010011110100011111100100', '0010110010110011100011001010100100011100001010001100110100000000111100111000000100011101111011011000101001000010100010101111000', '0011110001100010010111010010100110110010011000010000100100100000111011000011001001110100000110001010101000011000110001001101100']
الخطوات التالية
توصيات
- حدِّد خيارات الـ runtime المتقدمة.
- تدرَّب على الـ Primitives من خلال درس دالة التكلفة في IBM Quantum Learning.
- تعرَّف على كيفية الـ Transpile محليًا في قسم الـ Transpile.
- جرِّب دليل مقارنة إعدادات الـ Transpiler.
- افهم حدود المهمة عند إرسال مهمة إلى IBM® QPU.