Přeskočit na hlavní obsah
Tento projekt je v betě. Našel jsi chybu? Otevřít issue na GitHubu. Máš otázku nebo nápad? Zeptej se v Discussions — rádi si poslechneme tvou zpětnou vazbu!
Jaká je kvalita překladu na této stránce?

Transpilace fermionových obvodů

Důležité

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:

>>> 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 transpiled QuantumCircuit of the fermionic time evolution.

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 ...>

The directly constructed QuantumCircuit of the fermionic time evolution.

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 Evolution ve 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.