はじめに
Qiskit には、量子アルゴリズムを実装するときに便利な「Primitives」という仕組みがあります。
Primitives の役割は、量子回路を実行して得られるデータを、アルゴリズムがそのまま使える形にまとめて返すことです。
低レベルの状況を気にせずに計算に集中できるので、アルゴリズムを組むときの負担が大きく減ります。
ここでは、その中心となる Estimator と Sampler を、できるだけ分かりやすく整理していきます。
2025年11月29日時点での情報です。
Primitives(Estimator / Sampler)とは
Primitives は、量子回路を実行し、その結果から次の二つの情報を取り出して返す役割を持っています。
1. Estimator
量子状態に対する「観測量の期待値」を計算します。
たとえば VQE では、ハミルトニアンの期待値がそのままコスト関数になるため、Estimator はアルゴリズムの中心的な存在です。
- 期待値
$\langle \psi | H | \psi \rangle$ を計算 - VQE では「評価関数を返す係」のような役割
- パラメータの更新と期待値評価を繰り返すと、最小エネルギーに近づいていく
2. Sampler
量子回路を実行したときに得られる「ビット列の出現確率分布」を返します。
QAOA や量子サンプリングのアルゴリズムでは、この確率分布が重要になります。
- 測定結果の確率分布 $P(x)$ を返す
- 「どのビット列がどれくらい出やすいか」を調べたいときに使う
- 最適なビット列を探索するアルゴリズムと相性が良い
Estimator が「期待値の計算担当」だとすると、Sampler は「サイコロをたくさん振って確率を調べる担当」というイメージです。
Estimator が担う処理
Estimator は、量子状態がある観測量に対してどんな値を持つのかを評価します。
特に VQE のような「エネルギー最小化」を目的とするアルゴリズムでは、この計算が核心を担っています。
- パラメータ付きの量子回路を実行
- ハミルトニアンの期待値を計算
- その値をもとにパラメータを調整
- 小さくなる方向に動かしていく
「パラメータを変えるたびに回路を実行して期待値を測る」というサイクルの中で、Estimator は毎回登場します。
Estimator の進化(V1 → V2)
Estimator は Qiskit のアップデートに伴って大きく改善されました。
V1(旧仕様)
- 1 回の呼び出しで扱えるのは 1 回路 × 1 オブザーバブル
- 複数の期待値を評価したい場合は複数回呼び出す必要があり、VQE のような用途では非効率
- 仕様と実装が同じクラスに入り混じっており、構造が分かりにくかった
V2(現在標準)
- 複数回路・複数オブザーバブルをまとめて評価できる「バッチ API」に再設計
- EstimatorV2 が「インターフェース」、実体はバックエンドごとに別クラスとして分離
- 勾配計算を含む VQE の処理が大きく高速化
今から使うなら基本的に V2 を選べば問題ありません。
実装の違い:Aer と Runtime
EstimatorV2 という「仕様」を、実際に計算する側のバックエンドが実装する形になっています。
代表的な実装は次の二つです。
Aer(ローカルシミュレーター)
- クラス名:
qiskit_aer.primitives.EstimatorV2 - 実行場所:PC や Google Colab などのローカル環境
- デフォルト
shots=None→ 理想的な状態ベクトル計算(ノイズなし) -
shots=1024などを指定すれば統計ノイズを再現可能
ローカルで高速に検証したいときに便利で、VQE の試作段階ではほぼ必ず登場します。
Runtime(クラウド実行・実機)
- クラス名:
qiskit_ibm_runtime.EstimatorV2 - 実行場所:IBM Quantum の実機またはサーバーサイドシミュレーター
- 実機ノイズ・測定ノイズが必ず含まれる
- エラー軽減技術が自動適用され、安定した期待値を返すように調整されている
実機の挙動を確かめたいとき、あるいはノイズ込みで動かしたいときに役立ちます。
まとめ
Primitives は、量子アルゴリズムに必要な情報を簡潔に取り出すための仕組みで、Estimator と Sampler はその中心的な役割を担います。Estimator は「期待値の計算」、Sampler は「測定確率の取得」に特化していて、どちらもアルゴリズム設計の負担を大きく減らしてくれます。
ローカルで素早く試したいときは Aer、実機での動きを確認したい場合は Runtime を選ぶことで、自分の目的に合った開発が進めやすくなります。