PDE Sinkhorn with asymmetric geometric boundaries / pde_boundary_track.py

Mechanism confirmed, baseline not beaten

Raw ⬇ ZIP
 1import numpy as np
 2
 3META = {'name': 'anisotropic_oblique_bvp', 'domain': 'pde', 'description': '2D manufactured elliptic boundary-value regression with anisotropic oblique and normal no-flux boundaries.'}
 4C = 0.8
 5
 6def h(y): return y**3 * (1-y)**3
 7def hp(y): return 3*y**2*(1-y)**3 - 3*y**3*(1-y)**2
 8
 9def solution(xy):
10    x, y = xy[:, 0], xy[:, 1]
11    return (h(y) - C*x*hp(y)).astype(np.float32)
12
13def get_dataset(seed, n_train=400, n_test=400):
14    rng = np.random.default_rng(int(seed))
15    n_int = max(1, int(n_train*0.75)); n_edge = int(n_train)-n_int
16    interior = rng.random((n_int,2))
17    edges = np.empty((n_edge,2), np.float32)
18    for i in range(n_edge):
19        t=rng.random(); s=i%4
20        edges[i] = (0,t) if s==0 else ((1,t) if s==1 else ((t,0) if s==2 else (t,1)))
21    xtr=np.concatenate([interior,edges]).astype(np.float32)
22    xte=rng.random((int(n_test),2), dtype=np.float32)
23    return {'xtr':xtr,'ytr':solution(xtr),'xte':xte,'yte':solution(xte),'task':'regression','metric':'mse','out_dim':1}