import json import math import random import sys from pathlib import Path import numpy as np import torch import torch.nn as nn sys.path.insert(0, "/home/maxwelhelp/all/math2nn") from bench import get_dataset, make_model, train_model, sweep_baseline, evaluate, make_report SEEDS = tuple(range(8)) SWEEP_SEEDS = tuple(range(4)) N_TRAIN, N_TEST = 1200, 400 EPOCHS = 18 BATCH = 128 # All learning rates tried by the idea are also tried by the baseline. GRID = [{"lr": 1e-3}, {"lr": 3e-3}, {"lr": 1e-2}] def seed_all(seed): random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) if torch.cuda.is_available(): torch.cuda.manual_seed_all(seed) def math_sanity(): rows = [] for rho in (0.5, 0.9, 0.99): d = 1.0 actual = [] for _ in range(40): d = rho * d actual.append(d) expected = np.asarray([rho ** (t + 1) for t in range(40)]) observed_half = next((i + 1 for i, v in enumerate(actual) if v <= 0.5), None) rows.append({ "rho": rho, "max_abs_error": float(np.max(np.abs(np.asarray(actual) - expected))), "half_life_pred": float(math.log(0.5) / math.log(rho)), "half_life_observed_first_integer": observed_half, }) # For the scalar nominal observer error e[t+1]=(1-lx*a)e[t], # stability requires |1-lx*a|<1, hence 0