Skip to main content
IBM Quantum Platform

퀸브 TEBD 백엔드

qiskit_addon_mpf.backends.quimb_tebd

A quimb-기반 TEBD 백엔드.

경고

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

pip install "qiskit-addon-mpf[quimb]"
TEBDEvolver내부 MPO를 발전시키기 위한 TEBD 알고리즘입니다.
MPOState비달 게이지를 시행하는 MPO.

기본 방법

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

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

  1. 연결 quimb의 구현을 qiskit_addon_mpf.backends.
  2. 확장 quimb의 TEBD 구현을 확장하여 내부 MPO(MPS가 아닌) 상태를 처리할 수 있습니다(자세한 내용은 State 를 참조하세요.)

가장 간단하게 설명하자면, 이 모듈은 내부 MPO 상태를 발전시키기 위해 TEBD 알고리즘을 간단하게 확장한 것입니다. 따라서 동적 MPF 알고리즘에 이 백엔드를 사용하려면 시간 진화하려는 해밀턴을 네이티브 형식으로 인코딩해야 합니다 quimb-네이티브 형식으로 인코딩해야 합니다. 좀 더 구체적으로 말하자면 TEBDEvolver 클래스( quimb.tensor.TEBD)는 해밀턴과 함께 작동합니다 quimb.tensor.LocalHam1D. Quimb은 이러한 해밀턴을 구성하기 위한 여러 가지 편리한 방법을 모듈에서 제공합니다 quimb.tensor.tensor_builder 모듈을 제공합니다. 이 중 어느 것도 여러분의 요구를 충족시키지 못한다면, 키스킷 네이티브 객체의 일부 변환 메서드를 구현하는 LayerModel 클래스를 사용하여 키스킷 네이티브 객체에서 일부 변환 메서드를 구현할 수 있습니다.


코드 예

이 섹션에서는 이 백엔드 사용을 시작하는 데 도움이 되는 간단한 예제를 보여줍니다. 이 예제에서는 세 가지 팩토리 함수를 만드는 방법을 보여줍니다 setup_dynamic_lse().

먼저, 프로토콜과 일치해야 하는 identity_factory 을 생성합니다 IdentityStateFactory 프로토콜과 일치해야 합니다. 함수를 사용하고 quimb.tensor.MPO_identity() 함수를 사용하고 결과값을 quimb.tensor.MatrixProductOperator 를 커스텀 MPOState 인터페이스로 래핑하면 됩니다.

>>> from qiskit_addon_mpf.backends.quimb_tebd import MPOState
>>> from quimb.tensor import MPO_identity
>>> num_qubits = 10
>>> identity_factory = lambda: MPOState(MPO_identity(num_qubits))

다음으로, 정의하기 전에 ExactEvolverFactoryApproxEvolverFactory 프로토콜을 정의하기 전에 시간 진화할 해밀턴을 정의해야 합니다. 여기서는 다음 중 하나를 선택하기만 하면 됩니다 quimb의 편리한 방법 중 하나를 선택하면 됩니다.

>>> from quimb.tensor import ham_1d_heis
>>> hamil = ham_1d_heis(num_qubits, 0.8, 0.3, cyclic=False)

이제 정확하고 근사한 시간 진화 인스턴스 팩토리를 구축할 수 있습니다. 이를 위해 간단히 functools.partial() 를 사용하여 이니셜라이저의 사전 정의된 값을 바인딩하고 TEBDEvolver 이니셜라이저에 바인딩하여 예상대로 올바른 인터페이스로 축소하고 ExactEvolverFactoryApproxEvolverFactory 프로토콜에 각각 바인딩하면 됩니다.

>>> from functools import partial
>>> from qiskit_addon_mpf.backends.quimb_tebd import TEBDEvolver
>>> exact_evolver_factory = partial(
...     TEBDEvolver,
...     H=hamil,
...     dt=0.05,
...     order=4,
... )

dt 값을 작은 시간 단계로 고정하고 위의 정확한 시간 변화를 모방하기 위해 고차 스즈키-트로터 분해를 사용한 것을 주목하세요.

아래에서는 dt 값을 고정하지 않고 대략적인 시간 진화에 대해 2차 스즈키-트로터 공식만 사용합니다. 또한 일부 잘라내기 설정도 지정합니다.

>>> approx_evolver_factory = partial(
...     TEBDEvolver,
...     H=hamil,
...     order=2,
...     split_opts={"max_bond": 10, "cutoff": 1e-5},
... )

물론 여기에 표시된 예제에 국한되지 않으며, 구현에서 제공하는 다른 설정도 사용해 보는 것이 좋습니다 quimb.tensor.TEBD 구현에서 제공하는 다른 설정을 사용해 보시기 바랍니다.


제한사항

마지막으로, 이 백엔드에서 처리할 수 있는 해밀턴 사용자 유형에 대한 몇 가지 알려진 제한 사항을 지적합니다:

  • 모든 상호작용은 1차원적이어야 합니다
  • 상호 작용이 원활해야 합니다

자원

[1]: https://en.wikipedia.org/wiki/Time-evolving _block_decimation

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