ExcitationPreserving
class qiskit.circuit.library.ExcitationPreserving(num_qubits=None, mode='iswap', entanglement='full', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='ExcitationPreserving', flatten=None)
ベース: TwoLocal
発見的励起保存波動関数アサッツ。
ExcitationPreserving 回路は、 、 、 の各状態の比率を保持する。 この目的のために、この回路は次のような形の2量子ビット相互作用を用いる
モード 'fsim' の場合は を、モード 'iswap' の場合は を使用する。
UCC-ansatzesのような他の波動関数も励起を保存することに注意。 しかし、これらの回路はすぐに複雑になってしまう。
この試行波動関数は、 の回転と2量子ビットのエンタングルメントからなる層で構成されています。 このエンタングルメントは、 の回転を用いて生成され、必要に応じてモードに対して位相制御 'fsim'ゲートが適用される。
非エンタングルメント量子ビットのスキップなど、ここで適用される引数やオプションの詳細 RealAmplitudes については、こちらを参照してください。
ExcitationPreserving ansatzの回転は次のように書ける
例
>>> ansatz = ExcitationPreserving(3, reps=1, insert_barriers=True, entanglement='linear')
>>> print(ansatz.decompose()) # show the circuit
┌──────────┐ ░ ┌────────────┐┌────────────┐ ░ ┌──────────┐
q_0: ┤ RZ(θ[0]) ├─░─┤0 ├┤0 ├─────────────────────────────░─┤ RZ(θ[5]) ├
├──────────┤ ░ │ RXX(θ[3]) ││ RYY(θ[3]) │┌────────────┐┌────────────┐ ░ ├──────────┤
q_1: ┤ RZ(θ[1]) ├─░─┤1 ├┤1 ├┤0 ├┤0 ├─░─┤ RZ(θ[6]) ├
├──────────┤ ░ └────────────┘└────────────┘│ RXX(θ[4]) ││ RYY(θ[4]) │ ░ ├──────────┤
q_2: ┤ RZ(θ[2]) ├─░─────────────────────────────┤1 ├┤1 ├─░─┤ RZ(θ[7]) ├
└──────────┘ ░ └────────────┘└────────────┘ ░ └──────────┘>>> ansatz = ExcitationPreserving(2, reps=1, flatten=True)
>>> qc = QuantumCircuit(2) # create a circuit and append the RY variational form
>>> qc.cry(0.2, 0, 1) # do some previous operation
>>> qc.compose(ansatz, inplace=True) # add the excitation-preserving
>>> qc.draw()
┌──────────┐┌────────────┐┌────────────┐┌──────────┐
q_0: ─────■─────┤ RZ(θ[0]) ├┤0 ├┤0 ├┤ RZ(θ[3]) ├
┌────┴────┐├──────────┤│ RXX(θ[2]) ││ RYY(θ[2]) │├──────────┤
q_1: ┤ RY(0.2) ├┤ RZ(θ[1]) ├┤1 ├┤1 ├┤ RZ(θ[4]) ├
└─────────┘└──────────┘└────────────┘└────────────┘└──────────┘>>> ansatz = ExcitationPreserving(3, reps=1, mode='fsim', entanglement=[[0,2]],
... insert_barriers=True, flatten=True)
>>> print(ansatz.decompose())
┌──────────┐ ░ ┌────────────┐┌────────────┐ ░ ┌──────────┐
q_0: ┤ RZ(θ[0]) ├─░─┤0 ├┤0 ├─■──────░─┤ RZ(θ[5]) ├
├──────────┤ ░ │ ││ │ │ ░ ├──────────┤
q_1: ┤ RZ(θ[1]) ├─░─┤ RXX(θ[3]) ├┤ RYY(θ[3]) ├─┼──────░─┤ RZ(θ[6]) ├
├──────────┤ ░ │ ││ │ │θ[4] ░ ├──────────┤
q_2: ┤ RZ(θ[2]) ├─░─┤1 ├┤1 ├─■──────░─┤ RZ(θ[7]) ├
└──────────┘ ░ └────────────┘└────────────┘ ░ └──────────┘この excitation_preserving() 関数は機能的に等価な回路を構築するが、より高速である。
クラス qiskit.circuit.library.n_local.excitation_preserving.ExcitationPreserving は Qiskit 2.1 で非推奨となりました。 Qiskit 3.0 で削除されます。 代わりに関数 qiskit.circuit.library.excitation_preserving。
**パラメーター
- num_qubits (int | None) – ExcitationPreserving 回路の量子ビット数。
- mode (str) – iswap'または'fsim'を選択する。
- reps (int) – 回転層の後にエンタングルメント層が続く構造が繰り返される頻度を指定する。
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – エンタングルメント構造を指定する。 文字列('full'、'linear'または'sca')、互いにエンタングルされた量子ビットのインデックスを指定する整数対のリスト、またはエンタングルメントレイヤーのインデックスを指定してそのようなリストを返す callable である。 詳細は
TwoLocalを参照のこと。 - initial_state (QuantumCircuit | None) – 回路に付加する QuantumCircuit オブジェクト。
- skip_unentangled_qubits (bool) – Trueの場合、単一量子ビットゲートは別の量子ビットとエンタングルされた量子ビットにのみ適用される。 Falseの場合、シングル量子ビット・ゲートがアンサッツの各量子ビットに適用される。 デフォルト値は false です。
- skip_final_rotation_layer (bool) – Trueの場合、アナザッツの最後に回転レイヤーが追加される。 False の場合、回転レイヤーは追加されない。 デフォルトは true です。
- parameter_prefix (str) – パラメータ化されたゲートは、パラメータを定義する必要がある。
ParameterVector. - insert_barriers (bool) – Trueの場合、各レイヤーの間にバリアが挿入される。 False の場合、バリアは挿入されない。
- flatten (bool | None) – これを
Trueに設定すると、ゲートオブジェクトの複数のレイヤーの中に入れ子にする代わりに、フラットな回路を出力する。 現在デフォルトでは、出力回路の内容は、よりきれいに視覚化するためにネストされたオブジェクトにラップされる。 しかし、この回路を視覚化以外に使用する場合は、パラメータ・バインディングの大きなパフォーマンス・オーバーヘッドを避けるために、このフラグをTrueに設定することを強くお勧めします。 - name (str) – 回路名。
レイズ
ValueError - 選択したモードがサポートされていない場合。
属性
parameter_bounds
パラメータ境界を返す。
戻り値
パラメータの境界。
name
タイプ: str
人間が読める回路名。
例
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit