Reducerea adâncimii circuitelor cu backpropagation pe operatori
Backpropagation pe operatori este o tehnică care presupune absorbirea operațiilor de la sfârșitul unui Circuit cuantic într-un operator Pauli, reducând în general adâncimea circuitului cu prețul unor termeni suplimentari în operator. Scopul este de a backpropaga cât mai mult din circuit fără a permite operatorului să crească prea mult.
O modalitate de a permite o backpropagare mai adâncă în circuit, prevenind în același timp creșterea excesivă a operatorului, este trunchierea termenilor cu coeficienți mici, în loc să fie adăugați la operator. Trunchierea termenilor poate duce la mai puține Circuit-uri cuantice de executat, însă aceasta introduce o eroare în calculul final al valorii de așteptare, proporțională cu magnitudinea coeficienților termenilor trunchiați. În acest tutorial vom implementa un pattern Qiskit pentru simularea dinamicii cuantice a unui lanț de spin Heisenberg folosind backpropagation pe operatori:
- Pasul 1: Maparea la problema cuantică
- Mapează Hamiltonianul evoluat în timp pe un Circuit cuantic
- Pasul 2: Optimizarea problemei
- Împarte circuitul în felii (slices)
- Backpropagă feliile din circuit pe un observabil Pauli
- Combină feliile rămase într-un singur Circuit
- Transpilează circuitul pentru Backend
- Pasul 3: Execuția experimentelor
- Calculează valoarea de așteptare folosind circuitul redus și observabilul extins cu un StatevectorEstimator, pentru simplitate în acest notebook
- Pasul 4: Reconstrucția rezultatelor
- N.A.
Notă: Qiskit descrie în sens larg straturile ca partiții de adâncime 1 ale circuitului pe toți Qubiții. Acest pachet folosește termenul felii (slices) pentru a descrie straturi de adâncime arbitrară. Funcția qiskit_addon_obp.backpropagate este proiectată să backpropage felii întregi odată, astfel că alegerea modului de feliere a circuitului cuantic poate avea un impact major asupra performanței backpropagării pentru o problemă dată. Vei afla mai multe despre felii mai jos.
Pasul 1: Maparea la problema cuantică
Mapează evoluția în timp a unui model cuantic Heisenberg la un experiment cuantic.
Pachetul qiskit_addon_utils oferă funcționalități reutilizabile pentru diverse scopuri.
Modulul său qiskit_addon_utils.problem_generators oferă funcții pentru generarea de Hamiltonieni de tip Heisenberg pe un graf de conectivitate dat. Acest graf poate fi fie un rustworkx.PyGraph, fie un CouplingMap, ceea ce îl face ușor de utilizat în fluxuri de lucru centrate pe Qiskit.
În continuare, generăm mai întâi un CouplingMap de tip heavy-hex din care extragem un lanț liniar de 10 Qubiți. Notă: indicii acestui nou reduced_coupling_map sunt din nou bazați pe zero.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-addon-obp qiskit-addon-utils qiskit-ibm-runtime rustworkx
from qiskit.transpiler import CouplingMap
coupling_map = CouplingMap.from_heavy_hex(3, bidirectional=False)
# Choose a 10-qubit linear chain on this coupling map
reduced_coupling_map = coupling_map.reduce([0, 13, 1, 14, 10, 16, 5, 12, 8, 18])
from rustworkx.visualization import graphviz_draw
graphviz_draw(reduced_coupling_map.graph, method="circo")
Apoi, generăm un operator Pauli care modelează un Hamiltonian Heisenberg XYZ.
undefined