Transpilace fermionových obvodů
Koncepty v tomto návodu jsou aktuálně dostupné pouze v Python API. Ekvivalentní funkcionalita bude v C API zpřístupněna v budoucím vydání.
Tento návod vysvětluje, jak transpilovat FermionicCircuit na standardní QuantumCircuit. Pokračuje se stejným příkladem časového vývoje z návodu k fermionovým obvodům.
Fáze transpilace
Jak je vysvětleno v qiskit_fermions.transpiler, přednastavené správce průchodů v tomto projektu dělí transpilaci do následujících fází:
Vstup
Převádí vstupní obvod na datovou strukturu orientovaného acyklického grafu (DAG).
Optimalizace
Ponechává obvod ve fermionovém prostoru. Tyto průchody využívají fermionovou strukturu a komutační relace, zatímco znalost specifická pro daný problém zůstává plně k dispozici. F2FSynthesis je průchod, který zde trotterizuje hradlo Evolution, a to součinovým vzorcem nebo pomocí FermionicQDrift, a QDriftTrotterization je jeho varianta s ohledem na obsazení; úplnou sadu najdeš v Optimalizačních průchodech a to, jak se součinový vzorec volí, v Syntéza hradla Evolution ve fermionovém prostoru.
Rozvržení
Mapuje fermionové registry módů na kvantové registry. U mapování v bázi obsazení, jako je Jordan-Wigner, se každý fermionový mód mapuje na jediný qubit. Tato fáze podporuje i obecnější mapování, kde se počet qubitů liší od počtu fermionových módů.
Syntéza
Převádí fermionová hradla na qubitové operace pomocí zvoleného mapování fermionů na qubity. Instance FermionicGate se transformují na posloupnosti standardních kvantových hradel. Bariéra se přenáší na každý qubit každého registru, kterého se dotýkala, takže během qubitové fáze nadále odděluje hradla na obou svých stranách.
Qubit
Transpiluje výsledný qubitový obvod standardními metodami Qiskit, včetně optimalizace, rozvržení a směrování pro tvůj cílový hardware.
Výstup
Převádí interní datovou strukturu DAG na požadovaný výstupní formát.
Praktický příklad: transpilace pomocí Jordan-Wigner
Použij přednastavený správce průchodů k transpilaci fermionového obvodu s mapováním fermionů na qubity Jordan-Wigner:
- Python
- C
>>> 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'>
// The C API for transpilation will be made available in a future release.
Porovnání s tradičním postupem
Návod fermionové obvody popisuje, jak tradiční postup provádí kódování fermionů na qubity před sestavením QuantumCircuit. Porovnej oba přístupy:
>>> 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 ...>
Oba postupy vytvářejí ekvivalentní obvody. Tradiční postup však vyžaduje, abys optimalizační kroky implementoval ručně, zatímco s přístupem založeným nejprve na fermionech můžeš do procesu transpilace začlenit optimalizace s ohledem na problém.
Pokročilé postupy
Přednastavený správce průchodů poskytuje pohodlný výchozí bod. Pro pokročilejší případy použití můžeš provést následující:
-
Přizpůsob transpilační průchody spouštěné během každé fáze.
-
Zvol součinový vzorec, který trotterizuje hradlo
Evolutionve fermionovém prostoru, buď pro každé hradlo zvlášť, nebo pro celé pipeline pomocíF2FSynthesis(viz Syntéza hradla Evolution ve fermionovém prostoru). -
Implementuj vlastní mapování fermionů na qubity vytvořením syntézních pluginů (viz
F2QSynthesisPlugin). -
Vytvoř vlastní transpilační průchody.