Nローカル
class qiskit.circuit.library.NLocal(num_qubits=None, rotation_blocks=None, entanglement_blocks=None, entanglement=None, reps=1, insert_barriers=False, parameter_prefix='θ', overwrite_block_parameters=True, skip_final_rotation_layer=False, skip_unentangled_qubits=False, initial_state=None, name='nlocal', flatten=None)
ベース: BlueprintCircuit
nローカル回路クラス。
nローカル回路の構造は、回転層とエンタングルメント層が交互に配置されている。 どちらのレイヤーでも、パラメータ化された回路ブロックが、定義された方法で回路に作用する。 回転レイヤーでは、ブロックは互いに重ねられて適用され、エンタングルメントレイヤーでは、 entanglement 戦略に従って適用される。 回路ブロックは任意のサイズ(回路内の量子ビット数に等しい小さいサイズ)を持つことができる。 各レイヤーは reps 回繰り返され、デフォルトでは最後の回転レイヤーが追加される。
例えば、2量子ビットの回転ブロックと、 'linear' エンタングルメントを使った4量子ビットのエンタングルメント・ブロックは、次のような回路になる。
┌──────┐ ░ ┌──────┐ ░ ┌──────┐
┤0 ├─░─┤0 ├──────────────── ... ─░─┤0 ├
│ Rot │ ░ │ │┌──────┐ ░ │ Rot │
┤1 ├─░─┤1 ├┤0 ├──────── ... ─░─┤1 ├
├──────┤ ░ │ Ent ││ │┌──────┐ ░ ├──────┤
┤0 ├─░─┤2 ├┤1 ├┤0 ├ ... ─░─┤0 ├
│ Rot │ ░ │ ││ Ent ││ │ ░ │ Rot │
┤1 ├─░─┤3 ├┤2 ├┤1 ├ ... ─░─┤1 ├
├──────┤ ░ └──────┘│ ││ Ent │ ░ ├──────┤
┤0 ├─░─────────┤3 ├┤2 ├ ... ─░─┤0 ├
│ Rot │ ░ └──────┘│ │ ░ │ Rot │
┤1 ├─░─────────────────┤3 ├ ... ─░─┤1 ├
└──────┘ ░ └──────┘ ░ └──────┘
| |
+---------------------------------+
repeated reps times指定があれば、各ブロックの間にバリアを挿入することができる。 初期状態オブジェクトが提供された場合、それはNLocalの前に追加される。
この n_local() 関数は機能的に等価な回路を構築するが、より高速である。
クラス qiskit.circuit.library.n_local.n_local.NLocal は Qiskit 2.1 で非推奨となりました。 Qiskit 3.0 で削除されます。 これはNLocalのサブクラスにも当てはまる。 代わりにモジュール qiskit.circuit.library.n_local の対応する関数を使用する。
パラメーター
- num_qubits (int | None) – 回路の量子ビット数。
- rotation_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – 回転レイヤーに使用されるブロック。 複数渡された場合、(新しいサブレイヤーのように)次々と適用される。
- entanglement_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – エンタングルメント層に使用されるブロック。 複数渡された場合、それらは次々に適用される。 サブレイヤーに異なるエンタングルメントを使用するには、以下を参照のこと。
get_entangler_map(). - entanglement (list[int] | list[list[int]] | None) – 入力ブロックがどの量子ビットに作用するかを指定するインデックス。
Noneの場合、エンタングルメント・ブロックは回路の先頭に適用される。 - reps (int) – 回転ブロックともつれブロックを繰り返す頻度を指定する。
- insert_barriers (bool) –
Trueの場合、各層の間にバリアが挿入される。Falseの場合、バリアは挿入されない。 - parameter_prefix (str) – デフォルトのパラメータが生成される場合に使用する接頭辞。
- overwrite_block_parameters (bool |list[list[Parameter]]) – 追加したブロックのパラメータを上書きする場合。
Falseの場合、ブロック内のパラメータは変更されない。 - skip_final_rotation_layer (bool) – 回路に最終回転層を追加するかどうか。
- skip_unentangled_qubits (bool) –
Trueの場合、回転ゲートはエンタングルされた量子ビットにのみ作用する。Falseの場合、回転ゲートはすべての量子ビットに作用する。 - initial_state (QuantumCircuit | None) – A
QuantumCircuitオブジェクトで、NLocal 回路の前に付加される初期状態を記述するのに使われる。 - name (str) – 回路の名前。
- flatten (bool | None) – これを
Trueに設定すると、ゲートオブジェクトの複数のレイヤーの中に入れ子にする代わりに、フラットな回路を出力する。 現在デフォルトでは、出力回路の内容は、よりきれいに視覚化するためにネストされたオブジェクトにラップされる。 しかし、この回路を視覚化以外に使用する場合は、パラメータ・バインディングの大きなパフォーマンス・オーバーヘッドを避けるために、このフラグをTrueに設定することを強くお勧めします。
レイズ
- ValueError -
repsパラメータが 0 以下の場合。 - TypeError -
repsパラメータが int 値でない場合。
属性
entanglement
entanglement_blocks
エンタングルメント層のブロック。
戻り値
エンタングルメント層のブロック。
flatten
回路がネストされたゲート/命令でラップされているか、フラット化されているかを返します。
initial_state
n個のローカル回路の前に追加される初期状態を返す。
戻り値
初期状態。
insert_barriers
バリアが層の間に挿入されているかどうか。
戻り値
Trueバリアが層間に挿入されていれば、 False 。
num_layers
nローカル回路のレイヤー数を返す。
戻り値
回路の層数。
num_parameters_settable
明確な値を設定できるパラメーターの総数。
これは、パラメータがバインドされたり、同じパラメータと交換されたりしても変化しないため、 num_parameters 。 Parameter とは異なる。
戻り値
回路で元々使用可能なパラメータの数。
この量は、まだ回路を作る必要はない。
num_qubits
この回路の量子ビット数を返します。
戻り値
量子ビットの数。
ordered_parameters
基礎となる回路で使用されるパラメータ。
これにはフロート値や重複も含まれる。
例
>>> # prepare circuit ...
>>> print(nlocal)
┌───────┐┌──────────┐┌──────────┐┌──────────┐
q_0: ┤ Ry(1) ├┤ Ry(θ[1]) ├┤ Ry(θ[1]) ├┤ Ry(θ[3]) ├
└───────┘└──────────┘└──────────┘└──────────┘
>>> nlocal.parameters
{Parameter(θ[1]), Parameter(θ[3])}
>>> nlocal.ordered_parameters
[1, Parameter(θ[1]), Parameter(θ[1]), Parameter(θ[3])]戻り値
回路で使用されるパラメータオブジェクト。
parameter_bounds
回路の未束縛パラメータのパラメータ境界。
戻り値
境界を示すペアのリスト。 Noneは、対応する方向のパラメータが束縛されていないことを示す。 もし None 。
preferred_init_points
パラメータの初期点。 最適化の初期推測値として保存できる。
戻り値
パラメータの初期値、または何も設定されていない場合はNone。
reps
回転とエンタングルメントブロックの繰り返し回数。
戻り値
繰り返し回数。
rotation_blocks
回転レイヤーのブロック。
戻り値
回転レイヤーのブロック。
name
タイプ: str
人間が読める回路名。
例
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit方法
add_layer
add_layer(other, entanglement=None, front=False)
NLocalに別のレイヤーを追加する。
パラメーター
- other (QuantumCircuit |qiskit.circuit.Instruction) – 合成するレイヤーは、別のNLocal、インストラクションやゲート、 QuantumCircuit。
- entanglement (list[int] | str |list[list[int]] | None) – エンタングルメントまたは量子ビットのインデックス。
- front (bool) – もしTrueなら、
otherが前に、そうでなければ後ろに追加される。
戻り値
連鎖的なコンポーズが可能である。
レイズ
TypeError - 他が互換性がない場合、つまりInstructionがなく、to_instructionメソッドもない場合。
戻りの型
assign_parameters
assign_parameters(parameters, inplace=False, **kwargs)
nローカル回路にパラメータを割り当てる。
このメソッドは、辞書の代わりにリストを渡すこともできる。 リストが渡される場合、そのリストの長さは、回路の未束縛パラメータの数と同じでなければならない。 のパラメータの順番で割り当てられる。 ordered_parameters().
戻り値
指定されたパラメータを持つ NLocal 回路のコピー。
レイズ
AttributeError - パラメータがリストとして与えられ、パラメータの数と一致しない場合。
パラメーター
- parameters (Mapping[Parameter, ParameterExpression |float] | Sequence[ParameterExpression |float])
- inplace (bool)
戻りの型
QuantumCircuit | なし
get_entangler_map
get_entangler_map(rep_num, block_num, num_block_qubits)
rep_num とブロック block_num の繰り返しでエンタングラー・マップを得る。
現在のブロックのエンタングラー・マップは、 self.entanglement の値から導き出される。 i 、 j はそれぞれ繰り返し番号とブロック番号を表し、 n はブロック内の量子ビット数を表す。
もつれタイプ | エンタングラー・マップ |
|---|---|
None | [[0, ..., n - 1]] |
str (例 'full') | 指定された量子ビット n 間の接続 |
List[int] | [entanglement] |
List[List[int]] | entanglement |
List[List[List[int]]] | entanglement[i] |
List[List[List[List[int]]]] | entanglement[i][j] |
List[str] | に規定されている接続性 entanglement[i] |
List[List[str]] | に規定されている接続性 entanglement[i][j] |
Callable[int, str] | 同じ List[str] |
Callable[int, List[List[int]]] | 同じ List[List[List[int]]] |
すべてのインデックスは、それが作用する配列の長さのモジュロとして取られることに注意してください。
パラメーター
- rep_num (int) – 今、私たちが繰り返していること。
- block_num (int) – エンタングルメント層内のブロック番号。
- num_block_qubits (int) – ブロック内の量子ビット数。
戻り値
現在の反復における現在のブロックのエンタングラー・マップ。
レイズ
ValueError - entanglement の値が対応するエンタングラー・マップにキャストできなかった場合。
戻りの型