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