Independent-Simplex Hypergraph Router / geometric_track.py
Mechanism confirmed, baseline not beaten
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}