Skip to main content
IBM Quantum Platform

퀸브 회로 기반 백엔드

qiskit_addon_mpf.backends.quimb_circuit

를 사용하는 회로 기반 시간 진화 백엔드 quimb.

경고

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

pip install "qiskit-addon-mpf[quimb]"
CircuitEvolver양자 회로를 기반으로 하는 시간 진화 엔진입니다.
CircuitState양자 회로를 기반으로 한 시간 진화 상태의 MPO와 유사한 표현입니다.

기본 방법

Quimb은 텐서 네트워크 기반의 양자 회로 시뮬레이션을 직접 지원합니다 quimb.tensor.Circuit 표현을 직접 지원합니다. 이를 활용하여 명시적인 시간 진화 알고리즘을 우회하고 대신 시간 진화를 직접 인코딩하여 QuantumCircuit 로 직접 인코딩하고 quimb 를 사용하여 두 회로 사이의 중첩을 계산할 수 있습니다. 자세한 내용은 양자 회로에 대한 가이드를 확인하세요.


코드 예

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

프로토콜은 IdentityStateFactory 프로토콜은 이미 CircuitState 생성자에 의해 이미 충족되므로 identity_factory 인수는 중요하지 않습니다:

>>> from qiskit_addon_mpf.backends.quimb_circuit import CircuitState
>>> identity_factory = CircuitState

의 설정은 CircuitEvolver 의 설정은 약간 더 복잡합니다. 매개변수화된 QuantumCircuit 객체를 입력으로 사용해야 하며, 여기서 Parameter 가 트로터 메서드 시간 단계(dt)를 대신해야 합니다.

이러한 매개변수화된 트로터 회로 템플릿이 어떻게 구성되는지 보여주기 위해 다음과 같이 동일한 해밀턴 및 2차 스즈키-트로터 공식을 재사용합니다 quimb_layers.

>>> from qiskit.quantum_info import SparsePauliOp
>>> hamil = SparsePauliOp.from_sparse_list(
...     [("ZZ", (i, i+1), 1.0) for i in range(0, 9, 2)] +
...     [("Z", (i,), 0.5) for i in range(10)] +
...     [("ZZ", (i, i+1), 1.0) for i in range(1, 9, 2)] +
...     [("X", (i,), 0.25) for i in range(10)],
...     num_qubits=10,
... )

하지만 이번에는 실제 회로를 구성할 때 Parametertime 인자로 지정합니다.

>>> from functools import partial
>>> from qiskit.circuit import Parameter
>>> from qiskit.synthesis import SuzukiTrotter
>>> from qiskit_addon_mpf.backends.quimb_circuit import CircuitEvolver
>>> from qiskit_addon_utils.problem_generators import generate_time_evolution_circuit
>>> dt = Parameter("dt")
>>> suzuki_2 = generate_time_evolution_circuit(hamil, time=dt, synthesis=SuzukiTrotter(order=2))
>>> approx_evolver_factory = partial(CircuitEvolver, circuit=suzuki_2)
주의

이름이 **필요합니다 **Parameter ~이다 dt!

exact_evolver_factory 에 대해 더 높은 차수의 트로터 공식을 선택할 수 있습니다. 하지만 partial 함수를 구성할 때 매개변수를 즉시 바인딩하더라도 다시 한 번 매개변수화된 회로를 사용해야 한다는 점에 유의하세요.

>>> suzuki_4 = generate_time_evolution_circuit(hamil, time=dt, synthesis=SuzukiTrotter(order=4))
>>> exact_evolver_factory = partial(CircuitEvolver, circuit=suzuki_4, dt=0.05)

이제 이러한 팩토리 함수를 사용하여 setup_dynamic_lse(). 이에 대한 자세한 내용은 해당 문서를 참조하세요.

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