백엔드
qiskit_addon_mpf.backends
알고리즘을 위한 선택적 백엔드 DynamicMPF 알고리즘에 대한 선택적 백엔드.
사용 가능성
특정 백엔드를 사용할 수 있는지 여부는 기본 텐서 네트워크 라이브러리의 가용성에 따라 달라집니다. 이는 런타임에 다음 표시기를 사용하여 쉽게 확인할 수 있습니다:
HAS_QUIMB
선택적 quimb 종속성이 설치되어 있는지 여부를 나타냅니다.
HAS_TENPY
선택적 tenpy 종속성이 설치되어 있는지 여부를 나타냅니다.
백엔드
사용 가능 여부(위 참조)에 따라 다음과 같은 백엔드를 사용할 수 있습니다:
quimb_tebd | A quimb-기반 TEBD 백엔드. |
quimb_layers | 를 사용한 계층별 시간 진화 백엔드 quimb. |
quimb_circuit | 를 사용하는 회로 기반 시간 진화 백엔드 quimb. |
tenpy_tebd | A tenpy-기반 TEBD 백엔드. |
tenpy_layers | 를 사용한 계층별 시간 진화 백엔드 tenpy. |
인터페이스
이러한 선택적 백엔드 중 하나에서 구현하는 인터페이스는 다음 클래스로 구성됩니다:
진화자
class Evolver
베이스: ABC
에서 사용되는 시간 진화 알고리즘의 인터페이스는 DynamicMPF.
이 시간 진화 인터페이스는 DynamicMPF.lhs 와 DynamicMPF.rhs 객체를 시간 진화시켜야 하며 State 객체를 시간 진화시켜야 합니다. 알고리즘의 정확한 메커니즘에 대한 자세한 설명은 DynamicMPF, State와 setup_dynamic_lse().
conjugate
abstract property
유형: bool
이 타임 에볼버 인스턴스가 오른쪽에서 작동하는지 여부를 반환합니다.
evolved_time
abstract property
유형: float
현재 진화 시간을 반환합니다.
step
상태
class State
베이스: ABC
의 인터페이스는 DynamicMPF.evolution_state.
이 시간 진화 상태는 LHS와 RHS 간에 공유됩니다 Evolver 인스턴스 간에 공유됩니다 DynamicMPF 인스턴스 간에 공유됩니다. 이 인터페이스를 구현하는 구체적인 백엔드가 텐서 네트워크를 기반으로 하는 대부분의 경우, 이 상태는 행렬 제품 연산자(MPO)가 됩니다. 이는 대부분의 시간 진화 알고리즘이 일반적으로 아래 그림과 같이 1차원 MPS(S#)에 시간 진화 블록(U#)을 연속적으로 적용하여 행렬 곱 상태(MPS)를 진화시키기 때문입니다. 여기서 텐서 네트워크는 시간이 지남에 따라 오른쪽으로 커집니다.
MPS Evolution
S0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
│ ┃ U1 ┃ ┃ U5 ┃
S1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U3 ┃
S2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
│ ┃ U2 ┃ ┃ U6 ┃
S3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
│ ┃ U4 ┃
S4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄하지만 저희의 경우 두 개의 시간 진화 엔진이 하나의 상태를 공유하기를 원합니다. 이를 위해 하나는 오른쪽에서 상태를 진화시키고(이전과 마찬가지로 U#), 두 번째는 왼쪽에서 상태를 진화시키도록 할 수 있습니다(V#). 이렇게 하려면 스테이트도 해당 방향으로 결합이 진행되어야 하므로 이전의 1차원 MPS가 아닌 2차원 MPO(M#)가 됩니다.
MPO Evolution
┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄┄M0┄┄┲━━━━┱┄┄┄┄┄┄┄┄┲━━━━┱┄
┃ V5 ┃ ┃ V1 ┃ │ ┃ U1 ┃ ┃ U5 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M1┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V3 ┃ │ ┃ U3 ┃
... ┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄┄M2┄┄┲━━━━┱┄┺━━━━┹┄┲━━━━┱┄ ...
┃ V6 ┃ ┃ V2 ┃ │ ┃ U2 ┃ ┃ U6 ┃
┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄┄M3┄┄┺━━━━┹┄┲━━━━┱┄┺━━━━┹┄
┃ V4 ┃ │ ┃ U4 ┃
┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄┄M4┄┄┄┄┄┄┄┄┄┺━━━━┹┄┄┄┄┄┄┄┄