qiskit.circuit.library.n_local
qiskit.circuit.library.n_local(num_qubits, rotation_blocks, entanglement_blocks, entanglement='full', reps=3, insert_barriers=False, parameter_prefix='θ', overwrite_block_parameters=True, skip_final_rotation_layer=False, skip_unentangled_qubits=False, name='nlocal')
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얽힘:
얽힘은 얽힘 레이어에 있는 게이트의 연결을 설명합니다. 예를 들어 2큐비트 게이트의 경우, 얽힘에는 게이트가 작동해야 하는 큐비트 쌍이 포함되어 있습니다(예: [[ctrl0, target0], [ctrl1, target1], ...]). 기본 얽힘 전략 세트가 제공되며 이름으로 선택할 수 있습니다:
-
"full"얽힘이란 각 큐비트가 다른 모든 큐비트와 얽혀 있는 상태를 말합니다. -
"linear"얽힘은 큐비트 와 가 얽힌 상태입니다모두 , 여기서 은 총 큐비트 수입니다.
-
"reverse_linear"얽힘은 큐비트 와 가 얽힌 상태입니다모두 , 여기서 은 총 큐비트 수입니다.
entanglement_blocks=="cx"이 옵션은"full"과 동일한 유니티를 제공하지만 얽히는 게이트가 더 적다는 점에 유의하세요. -
"pairwise"얽힘은 큐비트 가 큐비트와 얽혀 있는 하나의 층이다의 모든 짝수 값에 대해 , 그리고 모든 홀수 값에 대해 을 쿼비트 와 얽힌 두 번째 레이어 .
-
"circular"얽힘은 선형 얽힘이지만 여기에 추가적인 얽힘이 더해진 것이다선형 부분 앞에 첫 번째와 마지막 큐비트를 추가합니다.
-
"sca"(이동-순환-교대) 얽힘은 일반화되고 수정된 버전이다에서 제안한 회로 14의 값입니다 . 이는 첫 번째 큐비트와 마지막 큐비트를 연결하는 "긴" 얽힘이 각 블록마다 하나씩 이동하는 원형 얽힘으로 구성됩니다. 또한 제어 큐비트와 타겟 큐비트의 역할은 매 블록마다 교체됩니다(따라서 번갈아 가며).
얽힘 레이어에 여러 블록이 포함된 경우, 각 블록에 대한 얽힘 목록으로 제공해야 합니다. 예를 들어,
entanglement_blocks = ["rxx", "ryy"]
entanglement = ["full", "linear"] # full for rxx and linear for ryy또는:
structure_rxx = [[0, 1], [2, 3]]
structure_ryy = [[0, 2]]
entanglement = [structure_rxx, structure_ryy]마지막으로, 얽힘은 회로를 반복할 때마다 달라질 수 있습니다. 이를 위해 레이어 인덱스를 입력으로 받아 위의 형식으로 레이어의 얽힘을 반환하는 콜러블을 전달할 수 있도록 지원합니다. 구체적인 예는 아래 예시를 참조하세요.
예:
회전 및 얽힘 게이트는 레이어당 단일 블록으로 구성된 경우 단일 문자열을 통해 지정할 수 있습니다:
from qiskit.circuit.library import n_local
circuit = n_local(3, "ry", "cx", "linear", reps=2, insert_barriers=True)
circuit.draw("mpl")
목록을 전달하여 레이어당 여러 개의 게이트를 설정할 수 있습니다. 예를 들어 여기에서는 회전 레이어에서 폴리-Y 및 폴리-Z 회전을 사용합니다:
circuit = n_local(3, ["ry", "rz"], "cz", "full", reps=1, insert_barriers=True)
circuit.draw("mpl")
회전 또는 얽힘 레이어를 생략하려면 블록을 빈 목록으로 설정하면 됩니다:
circuit = n_local(4, [], "cry", reps=2)
circuit.draw("mpl")
얽힘은 entanglement 인수를 통해 명시적으로 설정할 수 있습니다:
entangler_map = [[0, 1], [2, 0]]
circuit = n_local(3, "x", "crx", entangler_map, reps=2)
circuit.draw("mpl")
현재 레이어 인덱스를 입력으로 받아 얽힘 구조를 반환하는 호출 가능 객체를 지정함으로써, 레이어별로 서로 다른 얽힘을 설정할 수 있습니다. 예를 들어, 다음 예제에서는 홀수 층과 짝수 층에 서로 다른 얽힘을 사용합니다:
def entanglement(layer_index):
if layer_index % 2 == 0:
return [[0, 1], [0, 2]]
return [[1, 2]]
circuit = n_local(3, "x", "cx", entanglement, reps=3, insert_barriers=True)
circuit.draw("mpl")
매개변수
- num_qubits (int) – 회로의 큐비트 수입니다.
- rotation_blocks (str |Gate |Iterable[str |Gate]) – 회전 레이어에 사용되는 블록들. 여러 개가 전달되면, 이들은 차례로 적용됩니다(새로운 하위 레이어처럼).
- entanglement_blocks (str |Gate |Iterable[str |Gate]) – 얽힘 계층에 사용되는 블록들. 여러 개가 전달되면, 이들은 차례로 적용됩니다.
- entanglement (str |Iterable[Iterable[int]] | Iterable[str |Iterable[Iterable[int]]] | Callable[[int], str |Iterable[Iterable[int]] | Iterable[str |Iterable[Iterable[int]]]]) – 입력 블록이 어떤 큐비트에 작용하는지를 지정하는 인덱스들. 이는 얽힘 전략을 설명하는 문자열(추가 정보 참조) 또는 큐비트 연결 목록으로 지정됩니다. 얽힘 블록 목록이 전달되면, 각 블록에 대해 서로 다른 얽힘을 지정하기 위해 얽힘 목록을 전달할 수 있습니다. 각 반복마다 다른 얽힘을 지정하려면, 입력으로 레이어를 받고 해당 레이어의 얽힘을 반환하는 콜러블을 전달하십시오. 기본값은 로
"full", 이는 전-대-전 얽힘 구조를 의미합니다. - reps (int) – 회전 블록과 얽힘 블록을 반복하는 빈도를 지정합니다.
- insert_barriers (bool) –
True인 경우 각 레이어 사이에 장벽이 삽입됩니다.False인 경우 장벽이 삽입되지 않습니다. - parameter_prefix (str) – 기본 매개변수가 생성되는 경우 사용되는 접두사입니다.
- overwrite_block_parameters (bool) – 추가된 블록의 매개변수를 덮어써야 하는 경우.
False인 경우 블록의 매개변수는 변경되지 않습니다. - skip_final_rotation_layer (bool) – 회로에 최종 회전 레이어를 추가할지 여부입니다.
- skip_unentangled_qubits (bool) –
True이면 회전 게이트는 얽혀 있는 큐비트에만 작동합니다.False이면 회전 게이트가 모든 큐비트에 작용합니다. - name (str | None) – 서킷의 이름입니다.
리턴
N-로컬 회로.
리턴 유형