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 큐비트에서 폴리 및 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 클래스는 키스킷 2.1 에서 더 이상 사용되지 않습니다. 키스킷 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) 단일 큐비트 게이트. 게이트가 하나만 제공되는 경우, 각 큐비트에 동일한 게이트가 적용됩니다. 게이트 목록이 제공되면, 모든 게이트가 제공된 순서대로 각 큐비트에 적용됩니다.
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – 얽힘 구조를 지정합니다. 서로 얽힌 큐비트의 인덱스를 지정하는 문자열('full', 'linear', 'reverse_linear', 'pairwise', 'circular', 'sca'), 정수 쌍의 목록 또는 얽힘 계층의 인덱스와 함께 제공된 이러한 목록을 반환하는 콜러블이 될 수 있습니다. 기본값은 '리버스_리니어' 얽힘입니다. '역_선형' 얽힘은 '전체'와 동일한 단위를 제공하지만 얽힘 게이트가 더 적다는 점에 유의하세요. 의 예시 섹션을 참조하세요
TwoLocal의 예제 섹션을 참조하세요. - initial_state (QuantumCircuit | None) – 회로 앞에 추가할
QuantumCircuit객체. - skip_unentangled_qubits (bool) – True이면 단일 큐비트 게이트는 다른 큐비트와 얽혀 있는 큐비트에만 적용됩니다. False인 경우, 단일 큐비트 게이트가 Ansatz의 각 큐비트에 적용됩니다. 기본값은 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