Sari la conținutul principal
Acest proiect este în versiune beta. Ai găsit o eroare? Deschide un issue pe GitHub. Ai o întrebare sau o idee? Întreabă în Discussions — ne-ar plăcea să aflăm părerea ta!
Cum este calitatea traducerii pe această pagină?

Transpilează circuite fermionice

Important

Conceptele din acest ghid sunt disponibile în prezent doar în API-ul Python. Funcționalitatea echivalentă va fi disponibilă în API-ul C într-o versiune viitoare.

Acest ghid explică cum să transpilezi un FermionicCircuit într-un QuantumCircuit standard. Continuă cu același exemplu de evoluție în timp din ghidul circuitelor fermionice.

Etapele transpilării​

După cum este explicat în qiskit_fermions.transpiler, managerii de pași presetați din acest proiect împart transpilarea în următoarele etape:

Intrare​

Convertește circuitul de intrare într-o structură de date de graf aciclic orientat (DAG).

Optimizare​

Păstrează circuitul în spațiul fermionic. Acești pași folosesc structura fermionică și relațiile de comutare, în timp ce cunoștințele specifice problemei rămân pe deplin disponibile. F2FSynthesis este pasul care trotterizează aici o poartă Evolution, cu o formulă produs sau cu FermionicQDrift, iar QDriftTrotterization este varianta sa conștientă de ocupare; vezi Pași de optimizare pentru setul complet și Sintetizează o poartă Evolution în spațiul fermionic pentru modul în care se alege o formulă produs.

Aranjare​

Mapează registrele de moduri fermionice pe registre cuantice. Pentru mapările în baza de ocupare, precum Jordan-Wigner, fiecare mod fermionic se mapează pe un singur qubit. Această etapă acceptă și mapări mai generale, în care numărul de qubiți diferă de numărul de moduri fermionice.

Sinteză​

Convertește porțile fermionice în operații pe qubiți folosind maparea fermion-qubit aleasă. Instanțele FermionicGate sunt transformate în secvențe de porți cuantice standard. O barieră este purtată pe fiecare qubit al fiecărui registru pe care l-a atins, astfel că ea continuă să separe porțile de o parte și de alta a ei în timpul etapei qubit.

Qubit​

Transpilează circuitul de qubiți rezultat folosind metode Qiskit standard, inclusiv optimizare, aranjare și rutare pentru hardware-ul tău țintă.

Ieșire​

Convertește structura de date DAG internă în formatul de ieșire dorit.

Un exemplu practic: transpilarea cu Jordan-Wigner​

Folosește managerul de pași presetat pentru a transpila circuitul tău fermionic cu maparea fermion-qubit 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.

Compară cu fluxul tradițional​

Ghidul circuitelor fermionice descrie cum fluxul tradițional realizează încodarea fermion-qubit înainte de a construi QuantumCircuit. Compară cele două abordări:

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

Ambele fluxuri produc circuite echivalente. Totuși, fluxul tradițional îți cere să implementezi manual pașii de optimizare, în timp ce cu abordarea fermionică mai întâi poți integra optimizări conștiente de problemă în procesul de transpilare.

Fluxuri avansate​

Managerul de pași presetat oferă un punct de plecare convenabil. Pentru cazuri de utilizare mai avansate, poți face următoarele: