퀸브 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 텐서 네트워크 라이브러리.
이 모듈에서 제공하는 클래스는 두 가지 용도로 사용됩니다:
- 연결
quimb의 구현을qiskit_addon_mpf.backends. - 확장
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))다음으로, 정의하기 전에 ExactEvolverFactory 및 ApproxEvolverFactory 프로토콜을 정의하기 전에 시간 진화할 해밀턴을 정의해야 합니다. 여기서는 다음 중 하나를 선택하기만 하면 됩니다 quimb의 편리한 방법 중 하나를 선택하면 됩니다.
>>> from quimb.tensor import ham_1d_heis
>>> hamil = ham_1d_heis(num_qubits, 0.8, 0.3, cyclic=False)이제 정확하고 근사한 시간 진화 인스턴스 팩토리를 구축할 수 있습니다. 이를 위해 간단히 functools.partial() 를 사용하여 이니셜라이저의 사전 정의된 값을 바인딩하고 TEBDEvolver 이니셜라이저에 바인딩하여 예상대로 올바른 인터페이스로 축소하고 ExactEvolverFactory 및 ApproxEvolverFactory 프로토콜에 각각 바인딩하면 됩니다.
>>> 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