Skip to content

2. Mitigazione degli Errori ZNE

tatopenn-cell edited this page Jul 25, 2026 · 2 revisions

2. Mitigazione degli Errori (ZNE)

zne_mitigation.py implementa la Zero-Noise Extrapolation di Richardson su un canale di dephasing stocastico Pauli-Z, su una catena tight-binding di 6 qubit.

$$E(0) = 2E(\lambda_1) - E(\lambda_2), \qquad \lambda_1 = 1.0,\ \lambda_2 = 2.0$$

Funzioni reali

def generate_bloch_state(k_val): ...                 # |psi(k)> = 1/sqrt(N) sum_q e^{iqk} |1_q>
def apply_stochastic_dephasing(statevector, p_error, seed): ...
def measure_energy_with_shots(k_val, noise_scale, base_seed): ...
def calcola_aspettazione_hamiltoniana(statevector): ...

apply_stochastic_dephasing applica, per ogni qubit indipendentemente, una fase Z con probabilità p_error = 0.06 * noise_scale. measure_energy_with_shots media su 2.000 shot — eccetto il caso noise_scale == 0.0, che va in scorciatoia diretta all'energia esatta (nessuno shot, nessun rumore, deterministico).

Proprietà verificate (non assunte)

  • A noise_scale=0.0, measure_energy_with_shots deve dare esattamente lo stesso valore di calcola_aspettazione_hamiltoniana chiamata direttamente sullo stesso stato di Bloch (stessa funzione, due strade).
  • A $k=0$, l'energia ideale deve toccare il limite di legame esatto $E = -2 t_{hopping} = -4.22\text{ eV}$.
  • apply_stochastic_dephasing(p_error=1.0) è completamente deterministico (ogni qubit sfasa ad ogni chiamata, nessuna casualità residua) — verificato contro un pattern di fase calcolato indipendentemente, non riusando la logica a bit-mask della funzione stessa.

Tutti e tre confermati in tests/test_integration_smoke.py::test_zne_mitigation_real_functions_are_internally_consistent, che chiama le funzioni reali dello script (import diretto, non riscritte a mano).

Risultato

Il protocollo ricostruisce il target ideale non perturbato: minimo rumoroso degradato a $-3.3155\text{ eV}$ ($k=0$) riportato a $-4.2467\text{ eV}$ tramite estrapolazione lineare, senza artefatti non lineari.

Da dense-evolution 8.1.27: la stessa ZNE ora esiste anche a monte

tests/test_zne_predictive_healing.py (non descritto in questo capitolo, vedi il suo file per i dettagli) implementa una variante "predictive healing" a 3 punti della stessa idea — Richardson coefficients (3, -3, 1) per noise_factors=(1,2,3), perturbati da dense_evolution.healing.calculate_delta_preemp — ma fino alla 8.1.26 quella logica di combinazione viveva solo come funzioni hand-written locali al file di test (_static_richardson/_adaptive_healing_richardson), non riusabili altrove.

Da dense-evolution 8.1.27, dense_evolution.mitigation.richardson_extrapolate/zero_noise_extrapolation espongono la stessa matematica (verificata numericamente equivalente: la formula generica a N punti si riduce esattamente a (3, -3, 1) per noise_factors=(1,2,3)) come funzione reale del pacchetto, con nomi standard del campo (Richardson, ZNE) — non più solo logica nascosta in un file di test downstream.


Capitolo 1 · Home · Capitolo 3 ▶