퀸브 회로 기반 백엔드
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,
... )하지만 이번에는 실제 회로를 구성할 때 Parameter 를 time 인자로 지정합니다.
>>> 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(). 이에 대한 자세한 내용은 해당 문서를 참조하세요.