TwoQubitPeepholeOptimization
class qiskit.transpiler.passes.TwoQubitPeepholeOptimization(*args, **kwargs)
ベース: TransformationPass
2量子ビットのユニタリー・ピーホール最適化の統一化
このトランスパイラー・パスは、2量子ビットのユニタリー・ピーホール最適化を実行するように設計されています。 このパスでは、回路内のすべての2量子ビットブロックを特定し、そのブロックのユニタリー演算を計算した上で、そのユニタリー演算を合成します。 合成された2量子ビットのユニタリー演算が、元のサブ回路よりも「優れている」場合、そのサブ回路が元のサブ回路の代わりに使用される。 どちらが優れているかを判断するために用いられるヒューリスティックは、まず回路内の2量子ビットゲートの数を調べ、2量子ビットゲートの数が少ない合成案を優先します。2量子ビットゲートの数が同じ場合は、回路の推定フィデリティを調べ、推定フィデリティが高いサブ回路を選択します。最後に、必要に応じて、総ゲート数が最も少ないサブ回路を選択します。
ターゲットが過剰完全である場合、このパスでは、指定された量子ビットでサポートされているすべてのゲートに対して、サポートされているすべての分解関数を試行します。 上記のヒューリスティックを用いて、期待されるパフォーマンスが最も高い分解が選択され、そのブロックと置き換えられる。
このパスは物理回路上で実行されるように設計されており、特定の量子ビットに対する操作の詳細は、ターゲットのハードウェア量子ビットによるものと想定されています。 ただし、このパスの出力ではハードウェア演算が使用されない場合があります。具体的には、ターゲットがサポートする演算の範囲外で単一量子ビットゲートが生成されることがあり、これは通常、ターゲット TwoQubitControlledUDecomposer がサポートするパラメータ化ゲートが合成に使用された場合にのみ発生します。 したがって、このパスを物理最適化ステージ( 最適化ステージなど)で実行する場合、ステージを終了する前に、これらの誤った単一量子ビットゲートがハードウェアでサポートされている演算に置き換えられるよう、および Optimize1qGatesDecomposition /またはといった BasisTranslator パスと組み合わせて実行する必要があります。
このパスはマルチスレッド対応となっており、分析を並列で実行し、ローカルシステムで利用可能なすべてのコアを使用します。 Qiskitのスレッド処理の挙動をより広範に制御する方法の詳細については、設定ガイドを参照してください。これにより、このパスも制御されます
このパスは、パスマネージャーで と UnitarySynthesis を順次実行 ConsolidateBlocks する場合と機能が似ています。 しかし、このパスでは、合成を並列に実行することで、実行時のパフォーマンスが向上します。 また、最適化を単一のステップで行うことで、ヒューリスティクスの精度も向上しており、特に過剰完全なターゲットや異種混合のターゲットの場合、より高品質な出力が得られる可能性があります。 ただし、これらのヒューリスティックおよびこのパス全体は、物理回路に対してのみ有効である。 さらに、passとは異なり UnitarySynthesis 、これはユニタリー・シンセシス・プラグインを使用しません。 これはパフォーマンスとのトレードオフであり、そのインターフェースを通じて提供されていたプラグイン機能は犠牲にされています。 内部的には、現在、2量子ビットのユニタリー演算を合成するために、 と TwoQubitControlledUDecomposer のみが TwoQubitBasisDecomposer 使用されています。 UnitarySynthesisプラグイン可能なインターフェースや、さまざまな合成アルゴリズムを使用する機能が必要な場合は、このパスを使用すべきではありません。その代わりに、 UnitarySynthesis とを ConsolidateBlocks 組み合わせて、のプラグイン機能を活用してください。
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import TwoQubitPeepholeOptimization
from qiskit.providers.fake_provider import GenericBackendV2
# Build an unoptimized 2 qubit circuit
unoptimized = QuantumCircuit(2)
for i in range(10):
if i % 2:
unoptimized.cx(0, 1)
else:
unoptimized.cx(1, 0)
# Generate a target with random error rates
backend = GenericBackendV2(2, ["u", "cx"], coupling_map=[[0, 1], [1, 0]])
# Instantiate pass
peephole_pass = TwoQubitPeepholeOptimization(backend.target)
# Run pass and visualize output
optimized = peephole_pass(unoptimized)
optimized.draw("mpl")
パスを初期化する
パラメーター
- target – パスを実行する対象
- approximation_degree – 回路の近似に使用されるヒューリスティックダイヤル( 1.0=no 近似、 0.0=maximal 近似)。 近似を行うと、元のユニタリーから多少逸脱することを代償として、合成されるユニタリーで使用されるゲートの数を減らすことができる。
target``Noneその場合、で指定されたゲートのフィデリティに基づいて近似が行われる。
属性
is_analysis_pass
そのパスが解析パスであるかどうかを確認してください。
パスが AnalysisPass, である場合、そのパスはDAGを解析し、その解析結果をプロパティセットに書き込むことができることを意味します。 この種のパスでは、DAG に対する変更は許可されません。
is_transformation_pass
そのパスがトランスフォーメーション・パスであるかどうかを確認してください。
パスが TransformationPass, である場合、そのパスはDAGを操作できますが、プロパティセットを変更することはできません(ただし、読み取りは可能です)。
方法
execute
execute(passmanager_ir, state, callback=None)
入力された Qiskit IR に対して最適化タスクを実行します。
パラメーター
- passmanager_ir (DAGCircuit) – 最適化対象のQiskit IR。
- state (DAGCircuit) – パスマネージャー自身によるワークフローの実行に関連する状態。
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。
戻り値
Qiskit IRの最適化とワークフローの現状。
戻りの型
name
run
run(dag)
DAGCircuit に対してパスを実行します。 これは、passの開発者によって実装されています。
パラメーター
dag (DAGCircuit) – パスが実行される日。
昇給
NotImplementedError – これが1パス分実装されないままの場合。
戻りの型
update_status
update_status(state, run_state)
ワークフローのステータスを更新します。
パラメーター
- state (PassManagerState) – 更新対象のマネージャーの状態を渡します。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新しました。
戻りの型