TeNPy TEBD 백엔드
qiskit_addon_mpf.backends.tenpy_tebd
A tenpy-기반 TEBD 백엔드.
이 백엔드는 선택적 종속성이 설치된 경우에만 사용할 수 있습니다:
pip install "qiskit-addon-mpf[tenpy]"TEBDEvolver | 내부 MPO를 발전시키기 위한 TEBD 알고리즘입니다. |
MPOState | TeNPy's MPO를 일치시키는 매개자 클래스 State 인터페이스와 일치하도록 합니다. |
MPS_neel_state | 넬 상태를 MPS로 구성합니다. |
기본 방법
이 모듈은 텐서 네트워크 라이브러리에서 구현된 시간 진화 블록 데시메이션(TEBD) 알고리즘 [1을] 기반으로 동적 MPF 계수를 계산하기 위한 시간 진화 백엔드를 제공합니다 tenpy 텐서 네트워크 라이브러리.
이 모듈에서 제공하는 클래스는 두 가지 용도로 사용됩니다:
- 연결
tenpy의 구현을qiskit_addon_mpf.backends. - 확장
tenpy의 TEBD 구현을 확장하여 내부 MPO(MPS가 아닌) 상태를 처리할 수 있습니다(자세한 내용은State를 참조하세요.)
가장 간단하게 설명하자면, 이 모듈은 내부 MPO 상태를 발전시키기 위해 TEBD 알고리즘을 간단하게 확장한 것입니다. 따라서 동적 MPF 알고리즘에 이 백엔드를 사용하려면 시간 진화하려는 해밀턴을 네이티브 형식으로 인코딩해야 합니다 tenpy-네이티브 형식으로 인코딩해야 합니다. 좀 더 구체적으로 말하자면 TEBDEvolver 클래스( tenpy.algorithms.tebd.TEBDEngine)는 해밀턴과 함께 작동합니다 Model. TeNPy 모듈에서 이러한 해밀턴을 구성하기 위한 여러 가지 편리한 방법을 제공합니다 tenpy.models 모듈을 제공합니다. 이 중 어느 것도 여러분의 요구를 충족시키지 못한다면, 키스킷 네이티브 객체의 일부 변환 메서드를 구현하는 LayerModel 클래스를 사용하여 키스킷 네이티브 객체에서 일부 변환 메서드를 구현할 수 있습니다.
코드 예
이 섹션에서는 이 백엔드 사용을 시작하는 데 도움이 되는 간단한 예제를 보여줍니다. 이 예제에서는 세 가지 팩토리 함수를 만드는 방법을 보여줍니다 setup_dynamic_lse().
우선, 시간 진화하고자 하는 해밀턴을 정의합니다. 여기서는 다음 중 하나를 선택하기만 하면 됩니다 tenpy의 편리한 방법 중 하나를 선택하면 됩니다.
>>> from tenpy.models import XXZChain2
>>> hamil = XXZChain2(
... {
... "L": 10,
... "Jz": 0.8,
... "Jxx": 0.7,
... "hz": 0.3,
... "bc_MPS": "finite",
... "sort_charge": False,
... }
... )다음으로, 프로토콜과 일치해야 하는 identity_factory 을 만들 수 있습니다 IdentityStateFactory 프로토콜과 일치해야 합니다. 방금 정의한 해밀턴의 기초가 되는 격자를 유일한 입력으로 사용하는 initialize_from_lattice() 편의 방법을 사용하여 이를 수행합니다.
>>> from functools import partial
>>> from qiskit_addon_mpf.backends.tenpy_tebd import MPOState
>>> identity_factory = partial(MPOState.initialize_from_lattice, hamil.lat),이제 우리는 이제 ExactEvolverFactory 및 ApproxEvolverFactory 시간 진화 인스턴스 팩토리를 구성할 수 있습니다. 이를 위해 미리 정의된 값을 이니셜라이저의 TEBDEvolver 이니셜라이저의 사전 정의된 값을 바인딩하여 각 함수 프로토콜에서 예상하는 올바른 인터페이스로 축소할 수 있습니다.
>>> from qiskit_addon_mpf.backends.tenpy_tebd import TEBDEvolver
>>> exact_evolver_factory = partial(
... TEBDEvolver,
... model=hamil,
... dt=0.05,
... options={
... "order": 4,
... "preserve_norm": False,
... },
... )dt 값을 작은 시간 단계로 고정하고 위의 정확한 시간 변화를 모방하기 위해 고차 스즈키-트로터 분해를 사용한 것을 주목하세요.
아래에서는 dt 값을 고정하지 않고 대략적인 시간 진화에 대해 2차 스즈키-트로터 공식만 사용합니다. 또한 일부 잘라내기 설정도 지정합니다.
>>> approx_evolver_factory = partial(
... TEBDEvolver,
... model=hamil,
... options={
... "order": 2,
... "preserve_norm": False,
... "trunc_params": {
... "chi_max": 10,
... "svd_min": 1e-5,
... "trunc_cut": None,
... },
... },
... )물론 여기에 표시된 예제에 국한되지 않고 TeNPy’s 에서 제공하는 다른 설정도 사용해 볼 것을 권장합니다 TEBDEngine 구현에서 제공하는 다른 설정을 사용해 보세요.
제한사항
마지막으로, 이 백엔드에서 처리할 수 있는 해밀턴 사용자 유형에 대한 몇 가지 알려진 제한 사항을 지적합니다:
- 모든 상호작용은 1차원적이어야 합니다
- 상호 작용은 유한 경계 조건을 사용해야 합니다
자원
[1]: https://en.wikipedia.org/wiki/Time-evolving _block_decimation