Skip to main content
IBM Quantum Platform

TeNPy TEBD 백엔드

qiskit_addon_mpf.backends.tenpy_tebd

A tenpy-기반 TEBD 백엔드.

주의

선택적 종속성 TeNPy 는 이전에는 GPLv3 라이선스에 따라 제공되었습니다. 출시일 기준 v1.0.4 2024년 10월 2일, Apache v2 라이선스에 따라 제공되고 있습니다. 이 패키지의 라이선스는 TeNPy 의 Apache -라이선스 버전과만 호환됩니다.

경고

이 백엔드는 선택적 종속성이 설치된 경우에만 사용할 수 있습니다:

pip install "qiskit-addon-mpf[tenpy]"
TEBDEvolver내부 MPO를 발전시키기 위한 TEBD 알고리즘입니다.
MPOStateTeNPy's MPO를 일치시키는 매개자 클래스 State 인터페이스와 일치하도록 합니다.
MPS_neel_state넬 상태를 MPS로 구성합니다.

기본 방법

이 모듈은 텐서 네트워크 라이브러리에서 구현된 시간 진화 블록 데시메이션(TEBD) 알고리즘 [1을] 기반으로 동적 MPF 계수를 계산하기 위한 시간 진화 백엔드를 제공합니다 tenpy 텐서 네트워크 라이브러리.

이 모듈에서 제공하는 클래스는 두 가지 용도로 사용됩니다:

  1. 연결 tenpy의 구현을 qiskit_addon_mpf.backends.
  2. 확장 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),

이제 우리는 이제 ExactEvolverFactoryApproxEvolverFactory 시간 진화 인스턴스 팩토리를 구성할 수 있습니다. 이를 위해 미리 정의된 값을 이니셜라이저의 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

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.