Hidden-Diffusion Irreversibility Monitor / run_experiment.py

Failed on benchmark

Raw ⬇ ZIP
 1import json
 2import numpy as np
 3from hidden_diffusion_monitor import (analytic_spectrum, paper_sigma, simulate,
 4                                      forward_reverse_action_gap, autocorr, expm)
 5
 6
 7def run():
 8    rng = np.random.default_rng(20250308)
 9    A = np.array([[1., 1.], [-1., 0.]])  # A_yy=0, stable, coupled
10    Dx = Dm = 1.; dt = .03; n = 120000
11    dcs = [-.75, 0., .75]
12    omega = np.logspace(-2, 2, 250)
13    spectra = []; acs = []; rows = []
14    for dc in dcs:
15        D = np.array([[Dx, dc], [dc, Dm]])
16        spectra.append(analytic_spectrum(omega, A, D))
17        path, C, F, Q = simulate(A, D, dt, n, rng)
18        ac = autocorr(path, 80)[1:]
19        acs.append(ac)
20        sigma = paper_sigma(1., 1., Dx, Dm, dc)
21        gap = forward_reverse_action_gap(path, F, Q, dt)
22        exact = np.array([(expm(-A*t) @ C)[0, 0]/C[0, 0]
23                          for t in np.arange(1, 81)*dt])
24        rows.append({'D_xy': dc, 'spectrum_rel_to_baseline': float(
25            np.max(np.abs(spectra[-1]-spectra[0]) / np.maximum(spectra[0], 1e-12))),
26            'sigma_formula': float(sigma), 'monitor_gap': float(gap),
27            'autocorrelation_max_error': float(np.max(np.abs(ac-exact)))})
28    # Baseline has only observed x: its distinguishability is spectral/AC variation.
29    baseline_pairwise_ac = max(float(np.max(np.abs(acs[i]-acs[j])))
30                               for i in range(3) for j in range(i))
31    baseline_pairwise_spectrum = max(float(np.max(np.abs(spectra[i]-spectra[j]) /
32                                                  np.maximum(spectra[j], 1e-12)))
33                                     for i in range(3) for j in range(i))
34    monitor_gap_spread = max(r['monitor_gap'] for r in rows)-min(r['monitor_gap'] for r in rows)
35    formula_spread = max(r['sigma_formula'] for r in rows)-min(r['sigma_formula'] for r in rows)
36    result = {'rows': rows, 'baseline_observed_AC_pairwise_max': baseline_pairwise_ac,
37              'baseline_observed_spectrum_pairwise_max': baseline_pairwise_spectrum,
38              'monitor_gap_spread': monitor_gap_spread, 'formula_sigma_spread': formula_spread}
39    print(json.dumps(result, indent=2))
40    with open('results.json', 'w') as f: json.dump(result, f, indent=2)
41
42if __name__ == '__main__': run()