SabreLayout
class qiskit.transpiler.passes.SabreLayout(*args, **kwargs)
ベース: TransformationPass
入力回路の反復的な双方向ルーティングによってレイアウトを選択する。
ランダムな初期Layoutから開始し、アルゴリズムが回路の完全なルーティングを行い(routing_passメソッドを使用)、最終的なLayoutを生成する。 このfinal_layoutは、逆回路を配線するためのinitial_layoutとして使用される。 アルゴリズムは、完全なルーティングコストを削減する初期レイ アウトを見つけるまで、何回も反復する。
この方法は、量子回路の可逆性を利用し、初期レイアウトの選択に大域的な回路情報を含めようとするものである。
デフォルトでは、このパスではレイアウトとルーティングの両方が実行され、回路が変換されます。具体的には、まずレイアウトが入力DAGに適用され(つまり、出力回路には、カップリングマップ上の未使用クビットに対応する補助クビットが割り当てられ、マッピングされた物理クビットに合わせてクビットの順序が再配置されます)、その後、ルーティングが適用されます(接続性の制限を考慮してオブジェクトが SwapGate 挿入されます)。 これは、オブジェクト AnalysisPass であり、単に初期レイアウトを検索してプロパティセットに設定するだけの、他のほとんどのレイアウト処理とは異なります。 これは、デフォルトでは、このパスがランダムな初期レイアウトを選択するために異なるランダムシードを用いた並列シード試行を実行し、その後、必要なスワップゲートの数が最小となる配線済み出力を選択するためです。
引数 routing_pass 、このパスを一般的なレイアウトパスとして動作させることができます。 これを指定すると、指定されたルーティングパスを使用して初期レイアウトのみを選択し、複数のシードトライアルを実行しません。
パスは、ランダムな初期レイアウトでスタートするだけでなく、追加のトライアルに使用するスタートレイアウトのリストを取り込むこともできる。 このパスが実行されたときに、 sabre_starting_layouts がプロパティセットに存在する場合、それが追加の試行に使用される。 フルランダムスタートレイアウトの layout_trials 、それに加えて sabre_starting_layouts 。 スワップゲートの量が最も少ない出力(ランダム試行またはプロパティセットの開始点からのもの)が使用される。 このプロパティ・セット・フィールドの値は、使用する開始レイアウトを表す Layout オブジェクトのリストでなければなりません。 仮想量子ビットが Layout のオブジェクトから仮想量子ビットが欠落している場合、ランダムな量子ビットが選択されます。
プロパティセットフィールドの読み取り
sabre_starting_layouts (list[Layout])
オプションで Layout オブジェクトのリスト。 これは、 layout_trials 引数で指定された完全なランダム試行に加えて行われる。
プロパティセット値が書き込まれました
layout (Layout)
アンシラ割り当てを含む、仮想量子ビットと物理量子ビットの選択された初期マッピング。
final_layout (Layout)
回路の最後に入力量子ビットにどのようにスワップが適用されたかの順列。
参照資料:
[1] ヘンリー・ゾウ、マシュー・トレイニッシュ、ケビン・ハートマン、アレクサンダー・イヴリイ、ジェイク・リッシュマン。 “LightSABRE: 軽量で強化されたSABREアルゴリズム" arXiv:2409.08368[ 2] Li, Gushu, Yufei Ding, and Yuan Xie. "NISQ時代の量子デバイスの量子ビットマッピング問題に挑む" ASPLOS 2019. arXiv:1809.02573
SabreLayout イニシャライザー。
param coupling_map
カップリング・マップを表す有向グラフ。
type coupling_map
UnionCouplingMap[、ターゲット]
param routing_pass
反復処理中に使用するルーティングパス。 指定された場合、このパスは AnalysisPass として動作し、プロパティセットの layout フィールドにのみ入力され、入力された dag は変更されずに返されます。 この引数は、 swap_trials および layout_trials の引数とは互いに排他的であり、どちらかの引数と同時に指定するとエラーが発生する。
type routing_pass
BasePass
param seed
最初の試行レイアウトをランダムに設定するためのシード。
タイプシード
int
param max_iterations
前方-後方反復の回数。
type max_iterations
int
param swap_trials
の試行回数。 SabreSwap を実行する。 これは、 trials の引数と等価である。 SabreSwap. これが指定されていない場合(また routing_pass が設定されていない場合)、デフォルトでローカルシステムの物理CPU数が使用される。 試行回数によって出力が変わる可能性があるため、環境間の再現性を高めるためには、この数値を明示的に設定するのがベストである。 このオプションは、 routing_pass 引数と互いに排他的であり、両方を使用するとエラーが発生する。
タイプswap_trials
int
param layout_trials
レイアウトを実行するためのランダムなシードトライアルの数。 1 の場合、スワップゲートが最も少ない出力になる試行が選択される。 これが指定されていない場合(および routing_pass が設定されていない場合)、ローカル物理CPU数がデフォルト値として使用される。 このオプションは、 routing_pass 引数と互いに排他的であり、両方を使用するとエラーが発生する。 この値で指定されたランダム試行回数に加え、 coupling_map の値に応じて、さらに3回または4回の試行が一般的なレイアウトで実行される。
タイプlayout_trials
int
param skip_routing
これが True に設定され、 routing_pass が使用されない場合、ルーティングは出力回路に適用されない。 レイアウトのみがプロパティセットに設定されます。 このオプションを使用すると、 SabreLayout 内部でルーティングステージが実行されますが、その結果は使用されないため、これは複数のレイアウトトライアルでカスタムルーティングを実行するためのトレードオフです。
タイプskip_routing
ブール値
レイズ TranspilerError
routing_pass と swap_trials の両方、または
** routing_pass と layout_trials の両方が指定された場合**
属性
coupling_map
is_analysis_pass
パスが分析パスかどうかをチェックする。
パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。
is_transformation_pass
パスが変形パスかどうかをチェックする。
パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。
方法
execute
execute(passmanager_ir, state, callback=None)
入力Qiskit IRに対して最適化タスクを実行する。
パラメーター
- passmanager_ir (Any) – Qiskit IRを最適化する。
- state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
- callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。
戻り値
Qiskit IRとワークフローの状態を最適化。
戻りの型
タプル [ Any, PassManagerState ]
name
run
run(dag)
ダグに SabreLayout。
パラメーター
dag (DAGCircuit) – DAGのレイアウトを探す。
戻り値
スワップマッピングが実行された場合の出力ダグ
(そうでなければ、入力ダグは変更されずに返される)。
戻りの型
レイズ
TranspilerError - ダグがターゲットより広い場合。
update_status
update_status(state, run_state)
ワークフローのステータスを更新する。
パラメーター
- state (PassManagerState) – 更新するマネージャーの状態を渡す。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新。
戻りの型