Skip to main content
IBM Quantum Platform

フェルミオン回路のトランスパイル

重要

このガイドで説明されている機能は、現在、 Python APIでのみ利用可能です。 同等の機能は、今後のリリースで C API でも利用可能になる予定です。

このガイドでは、を標準の FermionicCircuit へトランスパイルする方法について説明します QuantumCircuit。 続いて、 フェルミオン回路ガイドと同じ時間発展の例が紹介されています。


トランスパイレーションの段階

で説明したように qiskit_fermions.transpiler、このプロジェクトのプリセット・パス・マネージャーは、トランスパイル処理を以下の段階に分割しています:


入力

入力回路を、有向非循環グラフ(DAG)のデータ構造に変換します。


最適化

回路をフェルミオン空間に保持する。 これらのパスでは、フェルミオン構造と交換関係を利用しつつ、問題に関する知識を完全に活用できる。 FermionicTrotterization および は、ここで ゲ Evolution ートをトロッター化するパス QDriftTrotterization です。全パスについては「 最適化パス」 を参照し、積の式がどのように選択されるかについては「 フェルミオン空間におけるエボリューションゲートの合成」を参照してください。


レイアウト

フェルミオンモードレジスタを量子レジスタにマッピングする。 ジョーダン・ウィグナーのような「占有度に基づく対応付け」では、各フェルミオンモードは単一の量子ビットに対応付けられる。 この段階では、量子ビットの数とフェルミオンモードの数が異なる、より一般的なマッピングもサポートされています。


総説

選択されたフェルミオンから量子ビットへの写像を用いて、フェルミオンゲートを量子ビット演算に変換します。 FermionicGate インスタンスは、標準的な量子ゲートのシーケンスに変換される。


量子ビット

ターゲットハードウェア向けの最適化、レイアウト、配線など、Qiskitの標準的な手法を用いて、生成された量子ビット回路をトランスパイルします。


出力

内部のDAGデータ構造を、指定された出力形式に変換します。


実用的な例:ジョーダン・ワイグナーを用いたトランスパイレーション

プリセットのパスマネージャーを使用して、ジョーダン・ウィグナーのフェルミオンからクビットへのマッピングを用いてフェルミオン回路をトランスパイルします:

>>> from qiskit_fermions.circuit import FermionicCircuit
>>> from qiskit_fermions.circuit.library import Evolution
>>> from qiskit_fermions.operators import FermionOperator, cre, ann
>>> from qiskit_fermions.transpiler.presets import generate_preset_jw_pass_manager
>>>
>>> # Create the same fermionic circuit from the previous guide
>>> circuit = FermionicCircuit(4)
>>> hamiltonian = FermionOperator.from_terms([
...     ([cre(0), ann(2)], 0.5),
...     ([cre(2), ann(0)], 0.5),
...     ([cre(1), ann(3)], 0.5),
...     ([cre(3), ann(1)], 0.5),
... ])
>>> hamiltonian.groups = [0, 0, 1, 1]
>>> evolution = Evolution(4, hamiltonian, time=1.0)
>>> circuit.append(evolution, circuit.register)
>>>
>>> # Generate the Jordan-Wigner transpilation pipeline
>>> pm = generate_preset_jw_pass_manager()
>>>
>>> # Transpile the fermionic circuit to a qubit circuit
>>> qubit_circuit = pm.run(circuit)
>>>
>>> # The result is a standard QuantumCircuit
>>> print(type(qubit_circuit))
<class 'qiskit.circuit.quantumcircuit.QuantumCircuit'>
フェルミオンの時間発展のトランスパイルされた QuantumCircuit。

従来のワークフローと比較する

「 フェルミオン回路 」のガイドでは、従来のワークフローにおいて、回路を構築する前にフェルミオンから量子ビットへのエンコーディングがどのように行われるかを説明しています QuantumCircuit。 2つのアプローチを比較してみましょう:

>>> from qiskit_fermions.mappers.library import jordan_wigner
>>> from qiskit.circuit import QuantumCircuit
>>> from qiskit.circuit.library import PauliEvolutionGate
>>>
>>> # Map the fermionic Hamiltonian to a qubit operator
>>> qubit_hamiltonian = jordan_wigner(hamiltonian, 4).simplify()
>>>
>>> # Build the QuantumCircuit directly
>>> quantum_circuit = QuantumCircuit(4)
>>> pauli_evolution = PauliEvolutionGate(qubit_hamiltonian, time=1.0)
>>> quantum_circuit.append(pauli_evolution, quantum_circuit.qubits)
<qiskit.circuit.instructionset.InstructionSet object at ...>
フェルミオン時間の時間発展の直接構築された QuantumCircuit。

どちらのワークフローも等価回路を生成します。 しかし、従来のワークフローでは最適化の手順を手動で実装する必要がありますが、フェルミオン・ファースト・アプローチでは、問題に応じた最適化をトランスパイラ処理に組み込むことができます。


高度なワークフロー

プリセット・パス・マネージャーは、便利な出発点となります。 より高度なユースケースでは、次のようにすることができます:

  • 各ステージで実行されるトランスパイラーのパスをカスタマイズします。
  • フェルミオン空間におけるゲ Evolution ートを「トロッター化」する式を選択します。これは、ゲートごとに指定することも、パイプライン全体に対して指定することもできます( FermionicTrotterization 「 フェルミオン空間における進化ゲートの合成 」を参照)。
  • 合成プラグインを作成して、フェルミオンから量子ビットへのカスタムマッピングを実装します(参照 F2QSynthesisPlugin)。
  • カスタムトランスパイラ・パスを構築する。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。