Pisot-Orbit Deterministic JL Layer / compare.py
Mechanism failed
1import json, math, hashlib
2from pathlib import Path
3import numpy as np
4from experiment import make_projection, alpha_calibrate, pair_distortion, variance_sweep, PHI, orbit_coefficients, corr_decay, rng, SEED
5
6
7def gaussian_projection(d,m):
8 return np.random.default_rng(SEED + 99).normal(size=(m,d))/math.sqrt(m)
9
10
11def main():
12 d,m=24,16
13 X=rng.normal(size=(18,d)); X -= X.mean(0); X /= X.std(0)
14 # Same calibration set and scalar norm calibration for deterministic and Gaussian matrices.
15 P,_,_=make_projection(d,m,0.0314159,gap=1,coeff_n=4000)
16 a=alpha_calibrate(P,X)
17 det=(a,)+pair_distortion(a*P,X)
18 G=gaussian_projection(d,m)
19 ag=alpha_calibrate(G,X)
20 gauss=(ag,)+pair_distortion(ag*G,X)
21 # Search as in the proposal.
22 best=None
23 for si in range(30):
24 seed=(0.0314159 + si*0.2718281)%1
25 for g in [1,2,4,8,16,32]:
26 Q,_,_=make_projection(d,m,seed,gap=g,coeff_n=4000)
27 aq=alpha_calibrate(Q,X); md,ad=pair_distortion(aq*Q,X)
28 item=(md,ad,si,g,aq)
29 if best is None or item < best: best=item
30 # Correlation fit only after the visible transient, and report all lags.
31 z,mu,sig=orbit_coefficients(120000,0.3141592653)
32 cs,_=corr_decay(z,500)
33 lags=np.arange(4,33)
34 fit=float(math.exp(np.polyfit(lags,np.log(np.maximum(np.abs(cs[lags-1]),1e-12)),1)[0]))
35 var=variance_sweep(d=24,ms=(8,16,32,64,128),trials=700)
36 slope=float(np.polyfit(np.log([v[0] for v in var]),np.log([v[2] for v in var]),1)[0])
37 out={'seed':SEED,'dimensions':[d,m],
38 'baseline_gaussian':{'alpha':gauss[0],'max_pair_distortion':gauss[1],'mean_pair_distortion':gauss[2]},
39 'deterministic_fixed':{'alpha':det[0],'max_pair_distortion':det[1],'mean_pair_distortion':det[2]},
40 'deterministic_searched':{'max_pair_distortion':best[0],'mean_pair_distortion':best[1],'seed_index':best[2],'gap':best[3],'alpha':best[4]},
41 'correlation_prediction':{'global_fit_rho':float(corr_decay(z,500)[1]),'post_transient_fit_rho':fit,'lags_1_to_32':[(i,float(abs(cs[i-1]))) for i in range(1,33)]},
42 'variance_prediction':{'m_var_values':var,'loglog_slope':slope},
43 'reproducibility':hashlib.sha256(P.astype(np.float64).tobytes()).hexdigest()}
44 Path('results.json').write_text(json.dumps(out,indent=2)); print(json.dumps(out,indent=2))
45if __name__=='__main__': main()