Skip to main content
IBM Quantum Platform

추정기 빠른 시작

Estimator 기본 함수는 양자 회로에 의해 준비된 상태에 대해 하나 이상의 관측 가능 변수의 기대값을 계산합니다. 매개변수 값이 기본 요소의 입력으로 함께 제공되는 한, 회로에 매개변수를 적용할 수 있습니다.

이 프리미티브에는 동적 디커플링, 파울리 트위링, 게이트 폴딩 ZNE, PEA, PEC 등 여러 가지 내장된 오류 완화 및 억제 기법이 포함되어 있습니다. 또한 비용과 정확도 간의 균형을 손쉽게 조정할 수 있는 resilience_level 옵션을 지원합니다.

이 주제의 단계에서는 Estimator를 설정하는 방법, 구성에 사용할 수 있는 옵션을 살펴보는 방법, 그리고 프로그램에서 Estimator를 호출하는 방법을 설명합니다.

  • 이 페이지의 코드는 다음 요구 사항을 바탕으로 개발되었습니다. 이 버전 이상을 사용하시기를 권장합니다.

    qiskit[all]~=2.5.2
    qiskit-ibm-runtime~=0.47.0
    

에스티메이터 프리미티브 사용 방법

1. 계정 초기화

먼저 계정을 초기화해야 합니다. 그런 다음 기대값을 계산하는 데 사용할 QPU를 선택할 수 있습니다.

아직 계정이 없다면 ‘ IBM Cloud 계정 설정’의 단계에 따라 진행해 주세요.

분할 게이트

새로 지원되는 분할 게이트 를 사용하려면, QiskitRuntimeService 인스턴스에서 백엔드를 요청할 때 를 use_fractional_gates=True 설정하십시오. 예를 들어,

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

이 기능은 실험적인 기능이며, 향후 변경될 수 있습니다.

from qiskit_ibm_runtime import QiskitRuntimeService

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

print(backend.name)

Output:

ibm_fez

2. 회로와 관측 가능한 변수를 생성합니다

Estimator 기본 요소에 입력으로 최소한 하나의 회로와 하나의 관측값이 필요합니다.

from qiskit.circuit.library import qaoa_ansatz
from qiskit.quantum_info import SparsePauliOp

entanglement = [tuple(edge) for edge in backend.coupling_map.get_edges()]
observable = SparsePauliOp.from_sparse_list(
    [("ZZ", [i, j], 0.5) for i, j in entanglement],
    num_qubits=backend.num_qubits,
)
circuit = qaoa_ansatz(observable, reps=2)
# The circuit is parametrized, so we will define the parameter values for execution
param_values = [0.1, 0.2, 0.3, 0.4]

회로와 관측량은 QPU에서 지원하는 명령어만 사용하도록 변환되어야 합니다(이를 명령어 집합 아키텍처(ISA) 회로라고 합니다). 이를 위해 트랜스파일러를 사용하세요.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")

Output:

>>> Circuit ops (ISA): OrderedDict([('rz', 4472), ('sx', 1884), ('cz', 1120)])

3. IBM Quantum 추정기를 초기화합니다

Estimator를 초기화할 때, 매개변수를 mode 사용하여 실행 모드를 지정하십시오. 가능한 값은 각각 배치, 세션, 작업 실행 모드에 대해 batch, session, 또는 객체입니다 backend . 자세한 내용은 ‘ IBM Quantum Compute 서비스 실행 모드 개요’를 참조하십시오. Open Plan 사용자는 세션 작업을 제출할 수 없으므로 유의하시기 바랍니다.

from qiskit_ibm_runtime import EstimatorV2 as Estimator

estimator = Estimator(mode=backend)

4. Estimator를 호출하고 결과를 확인합니다

다음으로, run() 메서드를 호출하여 입력 회로와 관측 변수에 대한 기대값을 계산합니다. 회로, 관측 가능 매개변수 및 선택적 매개변수 값 집합은 기본 통합 블록 ( PUB ) 튜플 형태로 입력됩니다.

job = estimator.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")

Output:

>>> Job ID: dab7lfurrl7c7386gjn0
>>> Job Status: QUEUED
result = job.result()
print(f">>> {result}")
print(f"  > Expectation value: {result[0].data.evs}")
print(f"  > Metadata: {result[0].metadata}")

Output:

>>> PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': False, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
  > Expectation value: 28.60306448415693
  > Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

다음 단계

권장사항
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.