TwoLocal
class qiskit.circuit.library.TwoLocal(num_qubits=None, rotation_blocks=None, entanglement_blocks=None, entanglement='full', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='TwoLocal', flatten=None)
베이스: NLocal
두 개의 로컬 회로.
2로컬 회로는 회전 레이어와 얽힘 레이어가 번갈아 가며 구성되는 파라미터화된 회로입니다. 회전 레이어는 모든 큐비트에 적용되는 단일 큐비트 게이트입니다. 얽힘 계층은 2큐비트 게이트를 사용하여 entanglement 을 사용하여 설정한 전략에 따라 큐비트를 얽습니다. 회전 및 얽힘 게이트는 모두 문자열로 지정할 수 있습니다(예 'ry' 또는 'cx'), 게이트형(예 RYGate 또는 CXGate) 또는 QuantumCircuit (예: 1쿼비트 회로 또는 2쿼비트 회로)로 설정합니다.
기본 얽힘 전략 세트가 제공됩니다:
'full'얽힘이란 각 큐비트가 다른 모든 큐비트와 얽혀 있는 상태를 말합니다.'linear'얽힘은 큐비트 큐비트와 얽힘 , 모두 , 여기서 은 총 큐비트 수입니다.'reverse_linear'얽힘은 큐비트 큐비트와 얽힘 , 모두 , 여기서 은 총 큐비트 수입니다.entanglement_blocks = 'cx'이 옵션은'full'과 동일한 유니티를 제공하지만 얽히는 게이트가 더 적다는 점에 유의하세요.'pairwise'얽힘은 모든 짝수 값 에 대해 큐비트 가 큐비트 와 얽혀있는 한 레이어와 모든 홀수 값 에 대해 큐비트 가 큐비트 와 얽혀있는 두 번째 레이어입니다.'circular'얽힘은 선형 얽힘이지만 선형 부분 앞에 첫 번째와 마지막 큐비트에 대한 추가 얽힘이 있습니다.'sca'(시프트-원형-교대) 얽힘은 Sim et al. 에서 제안한 회로 14의 일반화되고 수정된 버전입니다. 이는 첫 번째 큐비트와 마지막 큐비트를 연결하는 '긴' 얽힘이 각 블록마다 하나씩 이동하는 원형 얽힘으로 구성됩니다. 또한 제어 큐비트와 타겟 큐비트의 역할은 매 블록마다 교체됩니다(따라서 번갈아 가며).
다음과 같은 인덱스 쌍의 목록인 인탱글러 맵을 사용하여 인탱글을 추가로 지정할 수 있습니다
>>> entangler_map = [(0, 1), (1, 2), (2, 0)]블록마다 다른 인탱글을 사용해야 하는 경우 인탱글러 맵 목록을 제공하세요. 이 기능을 사용하는 방법은 아래 예시를 참조하세요.
>>> entanglement = [entangler_map_layer_1, entangler_map_layer_2, ... ]insert_barriers 속성을 사용하여 서로 다른 레이어 사이에 장벽을 삽입하여 시각화를 개선할 수 있습니다.
파라미터화된 각 게이트에 대해 ParameterVector 을 사용하여 새 파라미터를 생성합니다. 이러한 매개 변수의 이름은 parameter_prefix 을 사용하여 선택할 수 있습니다.
예제
>>> two = TwoLocal(3, 'ry', 'cx', 'linear', reps=2, insert_barriers=True)
>>> print(two.decompose()) # decompose the layers into standard gates
┌──────────┐ ░ ░ ┌──────────┐ ░ ░ ┌──────────┐
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]) ├
└──────────┘ ░ └───┘ ░ └──────────┘ ░ └───┘ ░ └──────────┘>>> two = TwoLocal(3, ['ry','rz'], 'cz', 'full', reps=1, insert_barriers=True, flatten=True)
>>> qc = QuantumCircuit(3)
>>> qc &= two
>>> print(qc.draw())
┌──────────┐┌──────────┐ ░ ░ ┌──────────┐ ┌──────────┐
q_0: ┤ Ry(θ[0]) ├┤ Rz(θ[3]) ├─░──■──■─────░─┤ Ry(θ[6]) ├─┤ Rz(θ[9]) ├
├──────────┤├──────────┤ ░ │ │ ░ ├──────────┤┌┴──────────┤
q_1: ┤ Ry(θ[1]) ├┤ Rz(θ[4]) ├─░──■──┼──■──░─┤ Ry(θ[7]) ├┤ Rz(θ[10]) ├
├──────────┤├──────────┤ ░ │ │ ░ ├──────────┤├───────────┤
q_2: ┤ Ry(θ[2]) ├┤ Rz(θ[5]) ├─░─────■──■──░─┤ Ry(θ[8]) ├┤ Rz(θ[11]) ├
└──────────┘└──────────┘ ░ ░ └──────────┘└───────────┘>>> entangler_map = [[0, 1], [1, 2], [2, 0]] # circular entanglement for 3 qubits
>>> two = TwoLocal(3, 'x', 'crx', entangler_map, reps=1, flatten=True)
>>> print(two) # note: no barriers inserted this time!
┌───┐ ┌──────────┐┌───┐
q_0: |0>┤ X ├─────■───────────────────────┤ Rx(θ[2]) ├┤ X ├
├───┤┌────┴─────┐ ┌───┐└─────┬────┘└───┘
q_1: |0>┤ X ├┤ Rx(θ[0]) ├─────■──────┤ X ├──────┼──────────
├───┤└──────────┘┌────┴─────┐└───┘ │ ┌───┐
q_2: |0>┤ X ├────────────┤ Rx(θ[1]) ├───────────■─────┤ X ├
└───┘ └──────────┘ └───┘>>> entangler_map = [[0, 3], [0, 2]] # entangle the first and last two-way
>>> two = TwoLocal(4, [], 'cry', entangler_map, reps=1, flatten=True)
>>> circuit = two.compose(two)
>>> print(circuit.draw()) # note, that the parameters are the same!
q_0: ─────■───────────■───────────■───────────■──────
│ │ │ │
q_1: ─────┼───────────┼───────────┼───────────┼──────
│ ┌────┴─────┐ │ ┌────┴─────┐
q_2: ─────┼──────┤ Ry(θ[1]) ├─────┼──────┤ Ry(θ[1]) ├
┌────┴─────┐└──────────┘┌────┴─────┐└──────────┘
q_3: ┤ Ry(θ[0]) ├────────────┤ Ry(θ[0]) ├────────────
└──────────┘ └──────────┘>>> layer_1 = [(0, 1), (0, 2)]
>>> layer_2 = [(1, 2)]
>>> two = TwoLocal(3, 'x', 'cx', [layer_1, layer_2], reps=2, insert_barriers=True,
... flatten=True)
>>> print(two)
┌───┐ ░ ░ ┌───┐ ░ ░ ┌───┐
q_0: ┤ X ├─░───■────■───░─┤ X ├─░───────░─┤ X ├
├───┤ ░ ┌─┴─┐ │ ░ ├───┤ ░ ░ ├───┤
q_1: ┤ X ├─░─┤ X ├──┼───░─┤ X ├─░───■───░─┤ X ├
├───┤ ░ └───┘┌─┴─┐ ░ ├───┤ ░ ┌─┴─┐ ░ ├───┤
q_2: ┤ X ├─░──────┤ X ├─░─┤ X ├─░─┤ X ├─░─┤ X ├
└───┘ ░ └───┘ ░ └───┘ ░ └───┘ ░ └───┘qiskit.circuit.library.n_local.two_local.TwoLocal 클래스는 키스킷 2.1 에서 더 이상 사용되지 않습니다. 키스킷 3.0 에서 제거됩니다. 대신 qiskit.circuit.library.n_local 함수를 사용하세요.
매개변수
- num_qubits (int | None) – 두 로컬 회로의 큐비트 수입니다.
- rotation_blocks (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – 회전층에 사용되는 게이트. 게이트 이름을 통해 지정할 수 있습니다 (예:
'ry') 또는 게이트 유형 자체 (예:RYGate). 게이트가 하나만 제공되는 경우, 각 큐비트에 동일한 게이트가 적용됩니다. 게이트 목록이 제공되면, 모든 게이트가 제공된 순서대로 각 큐비트에 적용됩니다. 자세한 내용은 ‘예제’ 섹션을 참조하십시오. - entanglement_blocks (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – 얽힘 계층에 사용되는 게이트들.
rotation_blocks.과 동일한 형식으로 지정할 수 있습니다. - entanglement (str |list[list[int]] | Callable[[int], list[int]]) – 얽힘 구조를 지정합니다. 문자열(
'full','linear','reverse_linear','circular'또는'sca'), 서로 얽힌 큐비트의 인덱스를 지정하는 정수 쌍의 목록 또는 얽힘 계층의 인덱스와 함께 제공된 이러한 목록을 반환하는 콜러블일 수 있습니다. 기본값은'full'얽힘입니다.entanglement_blocks = 'cx'이면'full'얽힘은'reverse_linear'과 동일한 단위를 제공하지만 후자의 옵션은 얽힘 게이트가 더 적다는 점에 유의하세요. 자세한 내용은 예제 섹션을 참조하세요. - reps (int) – 회전 레이어와 얽힘 레이어로 구성된 블록이 반복되는 빈도를 지정합니다.
- skip_unentangled_qubits (bool) –
True인 경우 단일 큐비트 게이트는 다른 큐비트와 얽혀 있는 큐비트에만 적용됩니다.False이면 단일 큐비트 게이트가 앤사츠의 각 큐비트에 적용됩니다. 기본값은False입니다. - skip_final_rotation_layer (bool) –
False인 경우 안사츠의 끝에 회전 레이어가 추가됩니다.True, 회전 레이어가 추가되지 않습니다. - parameter_prefix (str) – 파라미터화된 게이트는 파라미터를 정의해야 하는데, 여기에는 인스턴스화된
Parameter. 각 매개변수의 이름은 이 지정된 접두사에 해당 인덱스가 더해집니다. - insert_barriers (bool) –
True인 경우 각 레이어 사이에 장벽이 삽입됩니다.False인 경우 장벽이 삽입되지 않습니다. 기본값은False입니다. QuantumCircuitinitial_state (QuantumCircuit | None) – 회로 앞에 추가할 객체.- name (str) – 생성된 회로에 사용할 이름.
- flatten (bool | None) – 여러 개의 게이트 오브젝트 레이어 안에 중첩하는 대신 평면 회로를 출력하려면
True로 설정합니다. 현재 기본적으로 출력 회로의 내용은 보다 깔끔한 시각화를 위해 중첩된 객체로 래핑됩니다. 그러나 시각화 이외의 다른 용도로 이 회로를 사용하는 경우 매개변수 바인딩으로 인한 성능 오버헤드가 크지 않도록 이 플래그를True로 설정하는 것이 좋습니다.
속성
name
유형: str
사람이 읽을 수 있는 회로의 이름입니다.
예제
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit