EfficientSU2
class qiskit.circuit.library.EfficientSU2(num_qubits=None, su2_gates=None, entanglement='reverse_linear', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='EfficientSU2', flatten=None)
ベース: TwoLocal
ハードウェア的に効率的なSU(2) 2ローカル回路。
EfficientSU2 回路は、SU(2)と エンタングルメントによってスパンされた単一量子ビット演算のレイヤーで構成されている。 これは、変分量子アルゴリズムや機械学習の分類回路のための試行波動関数を準備するために使用できる発見的なパターンである。
SU(2)は次数2の特殊ユニタリー群を表し、その要素はパウリ回転ゲートのような行列式1の ユニタリー行列である。
3量子ビットの場合、Pauli と su2_gates を単一量子ビットゲートとして用いると、ハードウェア的に効率的なSU(2)回路は次のように表される:
┌──────────┐┌──────────┐ ░ ░ ░ ┌───────────┐┌───────────┐
┤ RY(θ[0]) ├┤ RZ(θ[3]) ├─░────────■───░─ ... ─░─┤ RY(θ[12]) ├┤ RZ(θ[15]) ├
├──────────┤├──────────┤ ░ ┌─┴─┐ ░ ░ ├───────────┤├───────────┤
┤ RY(θ[1]) ├┤ RZ(θ[4]) ├─░───■──┤ X ├─░─ ... ─░─┤ RY(θ[13]) ├┤ RZ(θ[16]) ├
├──────────┤├──────────┤ ░ ┌─┴─┐└───┘ ░ ░ ├───────────┤├───────────┤
┤ RY(θ[2]) ├┤ RZ(θ[5]) ├─░─┤ X ├──────░─ ... ─░─┤ RY(θ[14]) ├┤ RZ(θ[17]) ├
└──────────┘└──────────┘ ░ └───┘ ░ ░ └───────────┘└───────────┘非エンタングルメント量子ビットのスキップなど、ここで適用される引数やオプションの詳細 RealAmplitudes については、こちらを参照してください。
例
>>> circuit = EfficientSU2(3, reps=1)
>>> print(circuit.decompose())
┌──────────┐┌──────────┐ ┌──────────┐┌──────────┐
q_0: ┤ RY(θ[0]) ├┤ RZ(θ[3]) ├──■────■──┤ RY(θ[6]) ├┤ RZ(θ[9]) ├─────────────
├──────────┤├──────────┤┌─┴─┐ │ └──────────┘├──────────┤┌───────────┐
q_1: ┤ RY(θ[1]) ├┤ RZ(θ[4]) ├┤ X ├──┼───────■──────┤ RY(θ[7]) ├┤ RZ(θ[10]) ├
├──────────┤├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├──────────┤├───────────┤
q_2: ┤ RY(θ[2]) ├┤ RZ(θ[5]) ├─────┤ X ├───┤ X ├────┤ RY(θ[8]) ├┤ RZ(θ[11]) ├
└──────────┘└──────────┘ └───┘ └───┘ └──────────┘└───────────┘>>> ansatz = EfficientSU2(4, su2_gates=['rx', 'y'], entanglement='circular', reps=1,
... flatten=True)
>>> qc = QuantumCircuit(4) # create a circuit and append the RY variational form
>>> qc.compose(ansatz, inplace=True)
>>> qc.draw()
┌──────────┐┌───┐┌───┐ ┌──────────┐ ┌───┐
q_0: ┤ RX(θ[0]) ├┤ Y ├┤ X ├──■──┤ RX(θ[4]) ├───┤ Y ├─────────────────────
├──────────┤├───┤└─┬─┘┌─┴─┐└──────────┘┌──┴───┴───┐ ┌───┐
q_1: ┤ RX(θ[1]) ├┤ Y ├──┼──┤ X ├─────■──────┤ RX(θ[5]) ├───┤ Y ├─────────
├──────────┤├───┤ │ └───┘ ┌─┴─┐ └──────────┘┌──┴───┴───┐┌───┐
q_2: ┤ RX(θ[2]) ├┤ Y ├──┼──────────┤ X ├─────────■──────┤ RX(θ[6]) ├┤ Y ├
├──────────┤├───┤ │ └───┘ ┌─┴─┐ ├──────────┤├───┤
q_3: ┤ RX(θ[3]) ├┤ Y ├──■──────────────────────┤ X ├────┤ RX(θ[7]) ├┤ Y ├
└──────────┘└───┘ └───┘ └──────────┘└───┘この efficient_su2() 関数は機能的に等価な回路を構築するが、より高速である。
クラス qiskit.circuit.library.n_local.efficient_su2.EfficientSU2 は Qiskit 2.1 で非推奨となりました。 Qiskit 3.0 で削除されます。 代わりに関数 qiskit.circuit.library.efficient_su2。
パラメーター
- num_qubits (int | None) – EfficientSU2 回路の量子ビット数。
- reps (int) – 回転層の後にエンタングルメント層が続く構造が繰り返される頻度を指定する。
- su2_gates (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – 単一量子ビットゲート層に適用するSU(2)単一量子ビットゲート。 ゲートが1つしか用意されていない場合、各量子ビットには同じゲートが適用される。 ゲートのリストが指定された場合、すべてのゲートが指定された順序で各量子ビットに適用されます。
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – エンタングルメント構造を指定する。 文字列('full'、'linear'、'reverse_linear'、'pairwise'、'circular'、'sca')、互いにエンタングルされた量子ビットのインデックスを指定する整数対のリスト、またはエンタングルメントレイヤーのインデックスを指定してそのようなリストを返す callable である。 デフォルトは 'reverse_linear' entanglementである。 verse_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