Skip to main content
IBM Quantum Platform

Estimator クイックスタート

Estimatorプリミティブは、量子回路によって生成された状態に関して、1つまたは複数の観測量の期待値を計算します。 パラメータ値がプリミティブへの入力としても指定されている限り、回路をパラメータ化することができます。

このプリミティブには、動的デカップリング、パウリ・トゥワーリング、ゲート・フォールディングZNE、PEA、PECなど、いくつかの組み込みのエラー軽減および抑制手法が備わっています。 また、コストと精度のバランスを簡単に調整できるオプション resilience_level もサポートしています。

このトピックの手順では、Estimator のセットアップ方法、設定に使用できるオプションの確認方法、およびプログラム内での呼び出し方法について説明します。

  • このページのコードは、以下の要件に基づいて開発されました。 これらのバージョン以降のご利用をお勧めします。

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

「Estimator」プリミティブの使用手順

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プリミティブへの入力として、少なくとも1つの回路と1つの観測変数が必要です。

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 Service の実行モードの概要」 を参照してください なお、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: d9mq9tnurbec73e67aj0
>>> 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: 29.745702323497138
  > Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}

次のステップ

推奨事項
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。