Independent-Simplex Hypergraph Router / geometric_track.py

Mechanism confirmed, baseline not beaten

Raw ⬇ ZIP
 1import numpy as np
 2
 3META = {"name": "geometric_triangle_area", "domain": "geometric_graph", "description": "Triangle-area regression with shared global edge incidence."}
 4N_POINTS = 8
 5N_CANDIDATES = 32
 6TRIS = np.array([(i % N_POINTS, (2*i+1) % N_POINTS, (3*i+2) % N_POINTS) for i in range(N_CANDIDATES)], dtype=np.int64)
 7for i in range(N_CANDIDATES):
 8    if len(set(TRIS[i])) < 3:
 9        TRIS[i] = [i % N_POINTS, (i+1) % N_POINTS, (i+3) % N_POINTS]
10PAIRS = [(i,j) for i in range(N_POINTS) for j in range(i+1,N_POINTS)]
11EDGE_ID = {p:k for k,p in enumerate(PAIRS)}
12TRI_EDGES = np.array([[EDGE_ID[tuple(sorted((a,b)))], EDGE_ID[tuple(sorted((a,c)))], EDGE_ID[tuple(sorted((b,c)))] ] for a,b,c in TRIS], dtype=np.int64)
13
14def _make(rng, n):
15    pts = rng.normal(size=(n,N_POINTS,2)).astype(np.float32)
16    x = np.empty((n,N_CANDIDATES,3), dtype=np.float32)
17    for k,(a,b,c) in enumerate(TRIS):
18        x[:,k,0] = np.linalg.norm(pts[:,b]-pts[:,c],axis=1)
19        x[:,k,1] = np.linalg.norm(pts[:,a]-pts[:,c],axis=1)
20        x[:,k,2] = np.linalg.norm(pts[:,a]-pts[:,b],axis=1)
21    s=x.sum(2)/2
22    areas=np.sqrt(np.maximum(s*(s-x[:,:,0])*(s-x[:,:,1])*(s-x[:,:,2]),1e-8))
23    total=areas.sum(1)
24    y=((total-total.mean())/(total.std()+1e-7)).astype(np.float32)
25    return x.reshape(n,-1), y.reshape(-1,1)
26
27def get_dataset(seed, n_train, n_test):
28    tr=_make(np.random.default_rng(seed), n_train)
29    te=_make(np.random.default_rng(seed+5000), n_test)
30    return {"xtr":tr[0],"ytr":tr[1],"xte":te[0],"yte":te[1],"task":"regression","metric":"mse","out_dim":1}