RealAmplitudes
class qiskit.circuit.library.RealAmplitudes(num_qubits=None, entanglement='reverse_linear', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='RealAmplitudes', flatten=None)
베이스: TwoLocal
실제 진폭 2 로컬 회로.
RealAmplitudes 회로는 화학 애플리케이션에서 안사츠 또는 머신러닝의 분류 회로로 사용되는 휴리스틱 시험 파동 함수입니다. 회로는 회전과 얽힘의 교대 레이어로 구성됩니다. 얽힘 패턴은 사용자가 정의하거나 미리 정의된 세트에서 선택할 수 있습니다. 준비된 양자 상태는 실제 진폭만 가지며 복소수 부분은 항상 0이기 때문에 RealAmplitudes 이라고 합니다.
예를 들어 'reverse_linear' 얽힘이 있는 3 큐비트에 2번 반복되는 RealAmplitudes 회로는 다음과 같습니다
┌──────────┐ ░ ░ ┌──────────┐ ░ ░ ┌──────────┐
┤ Ry(θ[0]) ├─░────────■───░─┤ Ry(θ[3]) ├─░────────■───░─┤ Ry(θ[6]) ├
├──────────┤ ░ ┌─┴─┐ ░ ├──────────┤ ░ ┌─┴─┐ ░ ├──────────┤
┤ Ry(θ[1]) ├─░───■──┤ X ├─░─┤ Ry(θ[4]) ├─░───■──┤ X ├─░─┤ Ry(θ[7]) ├
├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤
┤ Ry(θ[2]) ├─░─┤ X ├──────░─┤ Ry(θ[5]) ├─░─┤ X ├──────░─┤ Ry(θ[8]) ├
└──────────┘ ░ └───┘ ░ └──────────┘ ░ └───┘ ░ └──────────┘얽힘은 entanglement 키워드를 문자열 또는 인덱스 쌍의 목록으로 사용하여 설정할 수 있습니다. 의 문서를 참조하세요 TwoLocal 및 NLocal 문서를 참조하세요. 추가로 설정할 수 있는 옵션으로는 반복 횟수, 얽히지 않은 큐비트에서 회전 게이트 건너뛰기, 최종 회전 레이어 생략, 회전과 얽힘 레이어 사이에 배리어 삽입 등이 있습니다.
일부 큐비트가 다른 큐비트와 얽혀 있지 않은 경우, 일련의 회전은 회전 각도를 합산하여 단일 회전으로 줄일 수 있으므로 이러한 큐비트에는 회전 게이트를 적용하지 않는 것이 좋습니다.
예제
>>> ansatz = RealAmplitudes(3, reps=2) # create the circuit on 3 qubits
>>> print(ansatz.decompose())
┌──────────┐ ┌──────────┐ ┌──────────┐
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]) ├────────────
└──────────┘└───┘└──────────┘ └───┘└──────────┘>>> ansatz = RealAmplitudes(3, entanglement='full', reps=2, flatten=True)
>>> print(ansatz)
┌──────────┐ ┌──────────┐ ┌──────────┐
q_0: ┤ RY(θ[0]) ├──■────■──┤ RY(θ[3]) ├──────────────■────■──┤ RY(θ[6]) ├────────────
├──────────┤┌─┴─┐ │ └──────────┘┌──────────┐┌─┴─┐ │ └──────────┘┌──────────┐
q_1: ┤ RY(θ[1]) ├┤ X ├──┼───────■──────┤ RY(θ[4]) ├┤ X ├──┼───────■──────┤ RY(θ[7]) ├
├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├──────────┤
q_2: ┤ RY(θ[2]) ├─────┤ X ├───┤ X ├────┤ RY(θ[5]) ├─────┤ X ├───┤ X ├────┤ RY(θ[8]) ├
└──────────┘ └───┘ └───┘ └──────────┘ └───┘ └───┘ └──────────┘>>> ansatz = RealAmplitudes(3, entanglement='linear', reps=2, insert_barriers=True,
... flatten=True)
>>> qc = QuantumCircuit(3) # create a circuit and append the RY variational form
>>> qc.compose(ansatz, inplace=True)
>>> qc.draw()
┌──────────┐ ░ ░ ┌──────────┐ ░ ░ ┌──────────┐
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]) ├
└──────────┘ ░ └───┘ ░ └──────────┘ ░ └───┘ ░ └──────────┘>>> ansatz = RealAmplitudes(4, reps=1, entanglement='circular', insert_barriers=True,
... flatten=True)
>>> print(ansatz)
┌──────────┐ ░ ┌───┐ ░ ┌──────────┐
q_0: ┤ RY(θ[0]) ├─░─┤ X ├──■─────────────░─┤ RY(θ[4]) ├
├──────────┤ ░ └─┬─┘┌─┴─┐ ░ ├──────────┤
q_1: ┤ RY(θ[1]) ├─░───┼──┤ X ├──■────────░─┤ RY(θ[5]) ├
├──────────┤ ░ │ └───┘┌─┴─┐ ░ ├──────────┤
q_2: ┤ RY(θ[2]) ├─░───┼───────┤ X ├──■───░─┤ RY(θ[6]) ├
├──────────┤ ░ │ └───┘┌─┴─┐ ░ ├──────────┤
q_3: ┤ RY(θ[3]) ├─░───■────────────┤ X ├─░─┤ RY(θ[7]) ├
└──────────┘ ░ └───┘ ░ └──────────┘>>> ansatz = RealAmplitudes(4, reps=2, entanglement=[[0,3], [0,2]],
... skip_unentangled_qubits=True, flatten=True)
>>> print(ansatz)
┌──────────┐ ┌──────────┐ ┌──────────┐
q_0: ┤ RY(θ[0]) ├──■───────■──────┤ RY(θ[3]) ├──■───────■──────┤ RY(θ[6]) ├
└──────────┘ │ │ └──────────┘ │ │ └──────────┘
q_1: ──────────────┼───────┼────────────────────┼───────┼──────────────────
┌──────────┐ │ ┌─┴─┐ ┌──────────┐ │ ┌─┴─┐ ┌──────────┐
q_2: ┤ RY(θ[1]) ├──┼─────┤ X ├────┤ RY(θ[4]) ├──┼─────┤ X ├────┤ RY(θ[7]) ├
├──────────┤┌─┴─┐┌──┴───┴───┐└──────────┘┌─┴─┐┌──┴───┴───┐└──────────┘
q_3: ┤ RY(θ[2]) ├┤ X ├┤ RY(θ[5]) ├────────────┤ X ├┤ RY(θ[8]) ├────────────
└──────────┘└───┘└──────────┘ └───┘└──────────┘함수는 real_amplitudes() 함수는 기능적으로 동등한 회로를 구성하지만 더 빠릅니다.
qiskit.circuit.library.n_local.real_amplitudes.RealAmplitudes 클래스는 키스킷 2.1 에서 더 이상 사용되지 않습니다. 키스킷 3.0 에서 제거됩니다. 대신 qiskit.circuit.library.real_amplitudes 함수를 사용하세요.
매개변수
- num_qubits (int | None) – RealAmplitudes 회로의 큐비트 수입니다.
- reps (int) – 회전 레이어와 얽힘 레이어의 구조가 얼마나 자주 반복되는지 지정합니다.
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – 얽힘 구조를 지정합니다. 문자열(‘full’, ‘linear’, ‘reverse_linear’, ‘circular’ 또는 ‘sca’), 서로 얽혀 있는 큐비트의 인덱스를 지정하는 정수 쌍의 리스트, 또는 얽힘 계층의 인덱스가 주어졌을 때 이러한 리스트를 반환하는 호출 가능 객체일 수 있습니다. 기본값을 ‘reverse_linear’ 얽힘으로 설정합니다. ‘reverse_linear’ 얽힘은 ‘full’과 동일한 유니터리를 제공하면서도 얽힘 게이트의 수가 더 적다는 점에 유의하십시오. 자세한 내용은
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