Skip to main content
IBM Quantum Platform

페르미온 회로 변환

중요

이 가이드에 소개된 개념들은 현재 Python API에서만 사용할 수 있습니다. 향후 릴리스에서 C API를 통해 동등한 기능이 제공될 예정입니다.

이 가이드에서는 를 표준 로 FermionicCircuit 트랜스파일하는 방법을 설명합니다 QuantumCircuit. 이어 페르미온 회로 가이드에 나온 것과 동일한 시간 변화 예제를 다룹니다.


전사 단계

에서 설명한 바와 같이 qiskit_fermions.transpiler, 이 프로젝트의 사전 설정된 패스 관리자는 트랜스파일링 과정을 다음과 같은 단계로 나눕니다:


입력

입력 회로를 방향성 비순환 그래프(DAG) 데이터 구조로 변환합니다.


최적화

회로를 페르미온 공간에 유지합니다. 이러한 패스는 페르미온 구조를 활용하고 교환 관계를 따르면서도, 문제에 대한 이해는 여전히 온전히 유지됩니다. F2FSynthesis 여기서 Evolution 게이트를 트로터화하는 패스는 곱 공식이나 FermionicQDrift, 그리고 점유율을 고려한 변형인 QDriftTrotterization 을 사용하는 패스입니다. 전체 목록은 “최적화 패스(Optimization Passes) ”를, 곱 공식이 어떻게 선택되는지는 “페르미온 공간에서 진화 게이트 합성 (Synthesize an Evolution gate in fermionic space)”을 참조하십시오.


레이아웃

페르미온 모드를 양자 레지스터에 매핑합니다. 조던-위그너(Jordan-Wigner)와 같은 점유 기반 매핑의 경우, 각 페르미온 모드는 단일 큐비트로 매핑됩니다. 이 단계는 큐비트의 수가 페르미온 모드의 수와 다른, 보다 일반적인 매핑도 지원합니다.


종합

선택된 페르미온-큐비트 매핑을 사용하여 페르미온 게이트를 큐비트 연산으로 변환합니다. FermionicGate 인스턴스는 표준 양자 게이트의 시퀀스로 변환됩니다. 장벽은 접촉한 각 레지스터의 모든 큐비트로 전달되므로, 큐비트 단계 동안에도 장벽은 양쪽의 게이트를 계속 분리시킨다.


큐비트

대상 하드웨어에 대한 최적화, 레이아웃 및 라우팅을 포함한 표준 Qiskit 방법을 사용하여 생성된 큐비트 회로를 트랜스파일합니다.


출력

내부 DAG 데이터 구조를 원하는 출력 형식으로 변환합니다.


실제 예시: 조던-위그너를 이용한 트랜스필레이션

사전 설정된 패스 관리자를 사용하여 조던-위그너 페르미온-큐비트 매핑을 적용해 페르미온 회로를 트랜스파일하십시오:

>>> from qiskit_fermions.circuit import FermionicCircuit
>>> from qiskit_fermions.circuit.library import Evolution
>>> from qiskit_fermions.operators import FermionOperator, cre, ann
>>> from qiskit_fermions.transpiler.presets import generate_preset_jw_pass_manager
>>>
>>> # Create the same fermionic circuit from the previous guide
>>> circuit = FermionicCircuit(4)
>>> hamiltonian = FermionOperator.from_terms([
...     ([cre(0), ann(2)], 0.5),
...     ([cre(2), ann(0)], 0.5),
...     ([cre(1), ann(3)], 0.5),
...     ([cre(3), ann(1)], 0.5),
... ])
>>> hamiltonian.groups = [0, 0, 1, 1]
>>> evolution = Evolution(4, hamiltonian, time=1.0)
>>> circuit.append(evolution, circuit.register)
>>>
>>> # Generate the Jordan-Wigner transpilation pipeline
>>> pm = generate_preset_jw_pass_manager()
>>>
>>> # Transpile the fermionic circuit to a qubit circuit
>>> qubit_circuit = pm.run(circuit)
>>>
>>> # The result is a standard QuantumCircuit
>>> print(type(qubit_circuit))
<class 'qiskit.circuit.quantumcircuit.QuantumCircuit'>
페르미온 시간 진화의 트랜스파일된 QuantumCircuit.

기존 워크플로우와 비교해 보세요

‘페르미온 회 로’ 가이드에서는 기존 워크플로우에서 회로를 구축하기 전에 페르미온을 큐비트로 인코딩하는 방법을 설명합니다 QuantumCircuit. 두 가지 접근 방식을 비교해 보십시오:

>>> from qiskit_fermions.mappers.library import jordan_wigner
>>> from qiskit.circuit import QuantumCircuit
>>> from qiskit.circuit.library import PauliEvolutionGate
>>>
>>> # Map the fermionic Hamiltonian to a qubit operator
>>> qubit_hamiltonian = jordan_wigner(hamiltonian, 4).simplify()
>>>
>>> # Build the QuantumCircuit directly
>>> quantum_circuit = QuantumCircuit(4)
>>> pauli_evolution = PauliEvolutionGate(qubit_hamiltonian, time=1.0)
>>> quantum_circuit.append(pauli_evolution, quantum_circuit.qubits)
<qiskit.circuit.instructionset.InstructionSet object at ...>
페르미온의 시간 진화에 대한 직접적으로 구축된 QuantumCircuit.

두 워크플로 모두 등가 회로를 생성합니다. 그러나 기존의 워크플로에서는 최적화 단계를 수동으로 구현해야 하는 반면, 페르미온 우선 접근법을 사용하면 문제 특성에 맞춘 최적화를 트랜스파일링 과정에 통합할 수 있습니다.


고급 워크플로우

사전 설정 패스 관리자는 편리한 출발점을 제공합니다. 보다 고급 사용 사례의 경우, 다음과 같이 할 수 있습니다:

  • 각 단계에서 실행되는 트랜스파일러 패스를 사용자 정의합니다.
  • 페르미온 공간에서 Evolution 게이트를 ‘트로터화’하는 제품 공식을 선택하십시오. 이는 개별 게이트 단위로 선택하거나, 전체 파이프라인에 대해 선택할 수 있습니다( F2FSynthesis ‘페르미온 공간에서 진화 게이트 합성’ 참조).
  • 합성 플러그인을 생성하여 사용자 정의 페르미온-큐비트 매핑을 구현합니다(참조 F2QSynthesisPlugin).
  • 사용자 정의 트랜스파일러 패스를 구축합니다.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.