RealAmplitudes
class qiskit.circuit.library.RealAmplitudes(num_qubits=None, entanglement='reverse_linear', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='RealAmplitudes', flatten=None)
ベース: TwoLocal
実振幅2ローカル回路。
RealAmplitudes 回路は、化学のアプリケーションではアンサッツとして、機械学習では分類回路として使用されるヒューリスティックな試行波動関数である。 この回路は、 の回転と のもつれを交互に重ねたものである。 エンタングルメントパターンは、ユーザー定義、または定義済みのセットから選択することができる。 準備された量子状態は実数の振幅しか持たず、複素数部分は常に0であるため、 RealAmplitudes と呼ばれる。
例えば、 'reverse_linear' のエンタングルメントを持つ3量子ビットで2回繰り返しの RealAmplitudes 回路は次のようになる
┌──────────┐ ░ ░ ┌──────────┐ ░ ░ ┌──────────┐
┤ Ry(θ[0]) ├─░────────■───░─┤ Ry(θ[3]) ├─░────────■───░─┤ Ry(θ[6]) ├
├──────────┤ ░ ┌─┴─┐ ░ ├──────────┤ ░ ┌─┴─┐ ░ ├──────────┤
┤ Ry(θ[1]) ├─░───■──┤ X ├─░─┤ Ry(θ[4]) ├─░───■──┤ X ├─░─┤ Ry(θ[7]) ├
├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤
┤ Ry(θ[2]) ├─░─┤ X ├──────░─┤ Ry(θ[5]) ├─░─┤ X ├──────░─┤ Ry(θ[8]) ├
└──────────┘ ░ └───┘ ░ └──────────┘ ░ └───┘ ░ └──────────┘エンタングルメントは、 entanglement キーワードを使用して、文字列またはインデックス・ペアのリストとして設定することができる。 のドキュメントを参照のこと。 TwoLocal および NLocal 。 さらに設定可能なオプションには、繰り返し回数、エンタングルされていない量子ビットのローテーション・ゲートのスキップ、最終ローテーション層の省略、ローテーション層とエンタングルメント層の間のバリアの挿入などがある。
ある量子ビットが他の量子ビットとエンタングルされていない場合、これらの量子ビットに回転ゲートを適用しないことは理にかなっている。なぜなら、 の一連の回転は、回転角度の和を持つ単一の の回転に減らすことができるからである。
例
>>> ansatz = RealAmplitudes(3, reps=2) # create the circuit on 3 qubits
>>> print(ansatz.decompose())
┌──────────┐ ┌──────────┐ ┌──────────┐
q_0: ┤ Ry(θ[0]) ├──────────■──────┤ Ry(θ[3]) ├──────────■──────┤ Ry(θ[6]) ├
├──────────┤ ┌─┴─┐ ├──────────┤ ┌─┴─┐ ├──────────┤
q_1: ┤ Ry(θ[1]) ├──■─────┤ X ├────┤ Ry(θ[4]) ├──■─────┤ X ├────┤ Ry(θ[7]) ├
├──────────┤┌─┴─┐┌──┴───┴───┐└──────────┘┌─┴─┐┌──┴───┴───┐└──────────┘
q_2: ┤ Ry(θ[2]) ├┤ X ├┤ Ry(θ[5]) ├────────────┤ X ├┤ Ry(θ[8]) ├────────────
└──────────┘└───┘└──────────┘ └───┘└──────────┘>>> ansatz = RealAmplitudes(3, entanglement='full', reps=2, flatten=True)
>>> print(ansatz)
┌──────────┐ ┌──────────┐ ┌──────────┐
q_0: ┤ RY(θ[0]) ├──■────■──┤ RY(θ[3]) ├──────────────■────■──┤ RY(θ[6]) ├────────────
├──────────┤┌─┴─┐ │ └──────────┘┌──────────┐┌─┴─┐ │ └──────────┘┌──────────┐
q_1: ┤ RY(θ[1]) ├┤ X ├──┼───────■──────┤ RY(θ[4]) ├┤ X ├──┼───────■──────┤ RY(θ[7]) ├
├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├──────────┤
q_2: ┤ RY(θ[2]) ├─────┤ X ├───┤ X ├────┤ RY(θ[5]) ├─────┤ X ├───┤ X ├────┤ RY(θ[8]) ├
└──────────┘ └───┘ └───┘ └──────────┘ └───┘ └───┘ └──────────┘>>> ansatz = RealAmplitudes(3, entanglement='linear', reps=2, insert_barriers=True,
... flatten=True)
>>> qc = QuantumCircuit(3) # create a circuit and append the RY variational form
>>> qc.compose(ansatz, inplace=True)
>>> qc.draw()
┌──────────┐ ░ ░ ┌──────────┐ ░ ░ ┌──────────┐
q_0: ┤ RY(θ[0]) ├─░───■────────░─┤ RY(θ[3]) ├─░───■────────░─┤ RY(θ[6]) ├
├──────────┤ ░ ┌─┴─┐ ░ ├──────────┤ ░ ┌─┴─┐ ░ ├──────────┤
q_1: ┤ RY(θ[1]) ├─░─┤ X ├──■───░─┤ RY(θ[4]) ├─░─┤ X ├──■───░─┤ RY(θ[7]) ├
├──────────┤ ░ └───┘┌─┴─┐ ░ ├──────────┤ ░ └───┘┌─┴─┐ ░ ├──────────┤
q_2: ┤ RY(θ[2]) ├─░──────┤ X ├─░─┤ RY(θ[5]) ├─░──────┤ X ├─░─┤ RY(θ[8]) ├
└──────────┘ ░ └───┘ ░ └──────────┘ ░ └───┘ ░ └──────────┘>>> ansatz = RealAmplitudes(4, reps=1, entanglement='circular', insert_barriers=True,
... flatten=True)
>>> print(ansatz)
┌──────────┐ ░ ┌───┐ ░ ┌──────────┐
q_0: ┤ RY(θ[0]) ├─░─┤ X ├──■─────────────░─┤ RY(θ[4]) ├
├──────────┤ ░ └─┬─┘┌─┴─┐ ░ ├──────────┤
q_1: ┤ RY(θ[1]) ├─░───┼──┤ X ├──■────────░─┤ RY(θ[5]) ├
├──────────┤ ░ │ └───┘┌─┴─┐ ░ ├──────────┤
q_2: ┤ RY(θ[2]) ├─░───┼───────┤ X ├──■───░─┤ RY(θ[6]) ├
├──────────┤ ░ │ └───┘┌─┴─┐ ░ ├──────────┤
q_3: ┤ RY(θ[3]) ├─░───■────────────┤ X ├─░─┤ RY(θ[7]) ├
└──────────┘ ░ └───┘ ░ └──────────┘>>> ansatz = RealAmplitudes(4, reps=2, entanglement=[[0,3], [0,2]],
... skip_unentangled_qubits=True, flatten=True)
>>> print(ansatz)
┌──────────┐ ┌──────────┐ ┌──────────┐
q_0: ┤ RY(θ[0]) ├──■───────■──────┤ RY(θ[3]) ├──■───────■──────┤ RY(θ[6]) ├
└──────────┘ │ │ └──────────┘ │ │ └──────────┘
q_1: ──────────────┼───────┼────────────────────┼───────┼──────────────────
┌──────────┐ │ ┌─┴─┐ ┌──────────┐ │ ┌─┴─┐ ┌──────────┐
q_2: ┤ RY(θ[1]) ├──┼─────┤ X ├────┤ RY(θ[4]) ├──┼─────┤ X ├────┤ RY(θ[7]) ├
├──────────┤┌─┴─┐┌──┴───┴───┐└──────────┘┌─┴─┐┌──┴───┴───┐└──────────┘
q_3: ┤ RY(θ[2]) ├┤ X ├┤ RY(θ[5]) ├────────────┤ X ├┤ RY(θ[8]) ├────────────
└──────────┘└───┘└──────────┘ └───┘└──────────┘この real_amplitudes() 関数は機能的に等価な回路を構築するが、より高速である。
クラス qiskit.circuit.library.n_local.real_amplitudes.RealAmplitudes は Qiskit 2.1 で非推奨となりました。 Qiskit 3.0 で削除されます。 代わりに関数 qiskit.circuit.library.real_amplitudes。
パラメーター
- num_qubits (int | None) – RealAmplitudes 回路の量子ビット数。
- reps (int) – 回転層の後にエンタングルメント層が続く構造が繰り返される頻度を指定する。
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – エンタングルメント構造を指定します。 文字列(「full」、「linear」、「reverse_linear」、「circular」、または「sca」)、互いにエンタングルメント状態にある量子ビットのインデックスを指定する整数ペアのリスト、あるいはエンタングルメント層のインデックスが与えられた際にそのようなリストを返すコールバック関数です。 デフォルトで「reverse_linear」のエンタングルメントを設定します。 なお、「reverse_linear」エンタングルメントは、「full」と同じユニタリー演算を提供しますが、エンタングルメントゲートの数が少なくて済みます。 詳細については、
TwoLocalの「例」セクションをご覧ください。 - initial_state (QuantumCircuit | None) – 回路に付加する QuantumCircuit オブジェクト。
- skip_unentangled_qubits (bool) – Trueの場合、単一量子ビットゲートは別の量子ビットとエンタングルされた量子ビットにのみ適用される。 Falseの場合、シングル量子ビット・ゲートがアンサッツの各量子ビットに適用される。 デフォルト値は false です。
- skip_final_rotation_layer (bool) – False の場合、アンサッツの最後に回転レイヤーが追加される。 Trueの場合、回転レイヤーは追加されない。
- parameter_prefix (str) – パラメータ化されたゲートは、パラメータを定義する必要がある。
ParameterVector. - insert_barriers (bool) – Trueの場合、各レイヤーの間にバリアが挿入される。 False の場合、バリアは挿入されない。
- flatten (bool | None) – これを
Trueに設定すると、ゲートオブジェクトの複数のレイヤーの中に入れ子にする代わりに、フラットな回路を出力する。 現在デフォルトでは、出力回路の内容は、よりきれいに視覚化するためにネストされたオブジェクトにラップされる。 しかし、この回路を視覚化以外に使用する場合は、パラメータ・バインディングの大きなパフォーマンス・オーバーヘッドを避けるために、このフラグをTrueに設定することを強くお勧めします。 - name (str) – 回路名。
属性
parameter_bounds
パラメータ境界を返す。
戻り値
パラメータの境界。
name
タイプ: str
人間が読める回路名。
例
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit