Skip to main content
IBM Quantum Platform

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')

GitHub

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" 얽힘은 큐비트 iii+1i + 1 가 얽힌 상태입니다

    모두 i{0,1,...,n2}i \in \{0, 1, ... , n - 2\}, 여기서 nn 은 총 큐비트 수입니다.


  • "reverse_linear" 얽힘은 큐비트 iii+1i + 1 가 얽힌 상태입니다

    모두 i{n2,n3,...,1,0}i \in \{n-2, n-3, ... , 1, 0\}, 여기서 nn 은 총 큐비트 수입니다. entanglement_blocks=="cx" 이 옵션은 "full" 과 동일한 유니티를 제공하지만 얽히는 게이트가 더 적다는 점에 유의하세요.


  • "pairwise" 얽힘은 큐비트 ii 가 큐비트와 얽혀 있는 하나의 층이다

    i+1i + 1 의 모든 짝수 값에 대해 ii, 그리고 모든 홀수 값에 대해 ii 을 쿼비트 i+1i + 1 와 얽힌 두 번째 레이어 ii.


  • "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-로컬 회로.

리턴 유형

QuantumCircuit

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.