Lumaktaw sa pangunahing nilalaman

Mabilisang pagsisimula sa Sampler

Ang pangunahing gawain ng Sampler ay ang pag-sample ng output register mula sa pagpapatupad ng isa o higit pang mga quantum circuit. Ang Mga dynamic na circuit at mga parametrized na circuit ay tinatanggap bilang input (kung nagsumite ng mga parametrized na circuit, ang mga halaga ng parameter ay dapat ding ibigay). Sinusuportahan din ng Sampler ang built-in na dynamical decoupling at twirling para sa error suppression.

Inilalarawan ng mga hakbang sa paksang ito kung paano i-set up ang Sampler, i-explore ang mga opsyon na maaari mong gamitin para i-configure ito, at i-invoke ito sa isang programa.

Mga bersyon ng package

Ang code sa pahinang ito ay binuo gamit ang mga sumusunod na kinakailangan. Inirerekumenda naming gamitin ang mga bersyong ito o mas bago.

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime

Mga hakbang para gamitin ang Sampler primitive

1. I-initialize ang account

Dahil ang Qiskit Runtime ay isang managed na serbisyo, kailangan mo munang i-initialize ang iyong account. Maaari kang pumili ng QPU na gusto mong gamitin para kalkulahin ang expectation value.

Sundin ang mga hakbang sa paksa ng I-set up ang iyong IBM Cloud account kung wala ka pang naka-set up na account.

Mga fractional gate

Para gamitin ang bagong sinusuportahang mga fractional gate, itakda ang use_fractional_gates=True kapag humihiling ng backend mula sa isang QiskitRuntimeService instance. Halimbawa:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Ito ay isang experimental na feature at maaaring magbago sa hinaharap.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

2. Lumikha ng circuit

Kailangan mo ng kahit isang circuit bilang input sa Sampler primitive.

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

Ang circuit at observable ay kailangang i-transform para gumamit lamang ng mga tagubilin na sinusuportahan ng QPU (tinatawag na instruction set architecture (ISA) circuit). Gamitin ang transpiler para gawin ito.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. I-initialize ang Qiskit Runtime Sampler

Kapag ini-initialize mo ang Sampler, gamitin ang parameter na mode para tukuyin ang mode na gusto mong patakbuhin nito. Ang mga posibleng halaga ay mga object na batch, session, o backend para sa batch, session, at job execution mode, ayon sa pagkakasunod. Para sa karagdagang impormasyon, tingnan ang Panimula sa mga execution mode ng Qiskit Runtime. Tandaan na ang mga gumagamit ng Open Plan ay hindi makakapagsumite ng mga session job.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. I-invoke ang Sampler at makuha ang mga resulta

Susunod, i-invoke ang method na run() para makabuo ng output. Ang circuit at mga opsyonal na set ng halaga ng parameter ay inilalagay bilang mga tuple ng primitive unified bloc (PUB).

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d82863mgbeec73alf9sg
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1100110011001011111111111010000010001010100100011000001011001101000110011000110100100100101010111001110100100000000011111100000', '0101001001010000100111000110110001001101010110110000110111101110001100000001000001111111101110000000010011111100100110001101000', '0111111110011011000011110111010111101100110010001010010001100000000100000000001010101010111010110000001100100001010110000101000', '0000110011001100110011101100000111011001110100001100001100110111010100101010001010000011000111001010101111110110100110001010000', '0011110011100001100110111001000011011111011110111100000110001000111011101101000110011011101011001110110000010010001100100011001', '1010001000010101011100101010101001101000100010011011100110010111010001110111110010100010111010011010110011001101100110010000010', '0001110010001011001100010000000001001101001110101100110011101111100100100110110010101000011010101000101011101011010100000101010', '1110100100001100110010000010011010111000001010110010111111011010010100110011100101110011101111100001010011100110011000101001001', '1101011100110101011001010100011001110100001011110101101110111011011001100110001011000010001100100011000000110101011100111111000', '1101000110000000101010000000110000011000000000010110011001001000001110101110010111011010101100011000100100110000000000000011001']

Mga susunod na hakbang

Mga rekomendasyon