{
 "artifacts": [
  {
   "name": "bench_report.json",
   "url": "https://synthcore.org/code/1215/bench_report.json"
  },
  {
   "name": "experiment.py",
   "url": "https://synthcore.org/code/1215/experiment.py"
  },
  {
   "name": "report.md",
   "url": "https://synthcore.org/code/1215/report.md"
  },
  {
   "name": "report_bench_2026-09-03T121411.md",
   "url": "https://synthcore.org/code/1215/report_bench_2026-09-03T121411.md"
  },
  {
   "name": "results.json",
   "url": "https://synthcore.org/code/1215/results.json"
  },
  {
   "name": "stage2_bench.py",
   "url": "https://synthcore.org/code/1215/stage2_bench.py"
  }
 ],
 "category": "architecture",
 "description": "Replace a purely nonlinear recurrent transition with a learned observable map followed by an explicitly linear latent evolution model. Include the original latent state and a small set of nonlinear observables, and update the linear transition online with forgetting-factor recursive least squares when the environment or task dynamics change.",
 "download_zip": "https://synthcore.org/download/1215",
 "formulas_latex": [
  "$$z_t=\\begin{bmatrix}x_t\\\\\\phi(x_t)\\end{bmatrix},\\qquad z_{t+1}=A_tz_t+B_tu_t+\\epsilon_t,\\qquad \\hat{x}_{t+1}=Cz_{t+1}.$$",
  "$$\\Theta_t=\\begin{bmatrix}A_t\u0026B_t\\end{bmatrix}=Y_tX_t^{\\top}(X_tX_t^{\\top}+\\alpha I)^{-1},\\quad X_t=\\begin{bmatrix}z_{t-1}\\\\u_{t-1}\\end{bmatrix},\\quad Y_t=z_t.$$",
  "$$P_t=\\lambda^{-1}\\left[P_{t-1}-\\frac{P_{t-1}r_tr_t^{\\top}P_{t-1}}{\\lambda+r_t^{\\top}P_{t-1}r_t}\\right],\\quad \\Theta_t=\\Theta_{t-1}+\\left(z_t-\\Theta_{t-1}r_t\\right)r_t^{\\top}P_t,$$",
  "$$\\rho(A_t)\u003c1\\ \\Longrightarrow\\ \\|A_t^k\\|\\leq Kr^k\\ \\text{for some }r\u003c1,\\qquad k_{\\mathrm{adapt}}\\approx\\frac{1}{1-\\lambda}.$$"
 ],
 "id": 3063,
 "implementation": "Use this as the transition module of a compact recurrent state-space model or world model. First encode an observation into x_t=E_psi(o_t), compute z_t=[x_t,phi_eta(x_t)], and predict future states through the linear recurrence z_{t+j+1}=A_t z_{t+j}+B_t u_{t+j}; decode with D_xi. Begin with fixed random Fourier features, polynomial features, or a small two-layer MLP for phi_eta, and train E_psi, D_xi, and phi_eta using one-step and multi-step reconstruction losses. During evaluation, freeze the neural maps and update Theta=[A,B] using the recursive least-squares equations above on every newly observed transition, with P_0=alpha^{-1}I. After each update, estimate the largest eigenvalue of A. If rho(A)\u003er, project eigenvalues outside radius r back to r exp(i arg(mu)), or reject the update and use a damped update. Compute RLS online; estimate residual covariance and spectral radius empirically. The first cheap test is a small CartPole, pendulum, or synthetic nonlinear oscillator dataset with an abrupt mass or force change at the midpoint. Compare a GRU and standard neural SSM against the lifted model for 50-step prediction. The predicted signature is that after the shift, prediction error falls approximately exponentially with an adaptation horizon near 1/(1-lambda); for rho(A)\u003c1, rollout error should decay or saturate, whereas allowing rho(A)\u003e1 should produce an abrupt long-horizon divergence boundary. Sweep transition scaling and verify that measured divergence begins within roughly 20 percent of the predicted rho(A)=1 threshold.",
 "math_summary": "Let x_t be the encoder state, u_t an optional action or conditioning input, and phi(x_t) a learned or hand-designed observable vector. Define the lifted state z_t=[x_t^T,phi(x_t)^T]^T. The Koopman-inspired model is z_{t+1}=A_t z_t+B_t u_t+epsilon_t, with prediction x_hat_{t+1}=C z_{t+1}, where C selects or decodes the physical state. Estimate A_t and B_t by exponentially weighted least squares with forgetting factor lambda in (0,1]. For discrete-time rollout stability, impose or monitor rho(A_t)\u003c=r\u003c1 after removing known marginal modes; rho is the spectral radius and r is a chosen contraction margin. The adaptation time scale is approximately 1/(1-lambda), while a stable latent component decays geometrically as ||A_t^k|| approximately bounded by K r^k.",
 "math_tags": [
  "dynamical-systems",
  "linear-algebra",
  "spectral-theory",
  "control-theory"
 ],
 "ml_areas": [
  "ssm",
  "world-model",
  "rnn"
 ],
 "paper": {
  "arxiv_id": "2609.02534",
  "arxiv_url": "https://arxiv.org/abs/2609.02534",
  "summary_what_math_gives_to_ml": "The paper combines physics-informed observable lifting, finite-dimensional Koopman linearization, online adaptation, and receding-horizon quadratic programming for nonlinear attitude dynamics with abruptly changing inertia and disturbances. Its transferable asset is the mechanism of representing nonlinear dynamics in a lifted coordinate system whose evolution is approximately linear, then updating the lifted dynamics online when the data distribution changes. For neural sequence models and world models, this suggests a latent state-space architecture with explicit linear multi-step propagation, physics-inspired observables, and recursive adaptation of the latent transition operator. The key falsifiable signatures are a measurable spectral stability boundary for long rollouts and an adaptation time scale determined by the forgetting factor.",
  "title": "Physics-based Online Adaptive Koopman Model Predictive Attitude Control for Combined Spacecraft with Dynamic Uncertainties",
  "year": "2026"
 },
 "ratings": {
  "difficulty": 6,
  "novelty": 6,
  "usefulness": 8
 },
 "solves": [
  "stability",
  "accuracy",
  "generalization"
 ],
 "title": "Adaptive Physics-Lifted Koopman State Space",
 "url": "https://synthcore.org/idea/3063/adaptive-physics-lifted-koopman-state-space",
 "verification": {
  "benchmark": {
   "track": "dynamics",
   "model": "rnn_small",
   "n_seeds": 8,
   "metric_direction": "lower is better",
   "comparison": {
    "baseline_mean": 0.0006787698,
    "idea_mean": 0.000245049,
    "delta_mean": -0.0004337208,
    "per_seed_diffs": [
     -0.0006494381,
     -0.0006239988,
     0.0003922567,
     -0.00047326390000000006,
     -0.00045112250000000004,
     -0.0008258005,
     -0.0002562644,
     -0.0005831346
    ],
    "idea_wins": 7,
    "n_pairs": 8,
    "p_value": 0.0231,
    "mde": 0,
    "mde_rel_pct": null,
    "verdict": "idea better (significant)",
    "system_worked": true
   },
   "baseline": {
    "best_cfg": {
     "lr": 0.01
    },
    "sweep": [
     {
      "cfg": {
       "lr": 0.001
      },
      "mean": 0.0032877354
     },
     {
      "cfg": {
       "lr": 0.003
      },
      "mean": 0.0012035724
     },
     {
      "cfg": {
       "lr": 0.01
      },
      "mean": 0.0006944253
     }
    ],
    "full": {
     "mean": 0.0006787698,
     "std": 0.0001831161,
     "per_seed": [
      0.0008624938,
      0.0008604837,
      0.0003602985,
      0.0006422949,
      0.0006247925,
      0.000911061,
      0.0004747614,
      0.0006949726
     ],
     "n": 8
    }
   },
   "idea": {
    "mean": 0.000245049,
    "std": 0.0001979633,
    "per_seed": [
     0.0002130557,
     0.0002364849,
     0.0007525552,
     0.000169031,
     0.00017367,
     0.0000852605,
     0.000218497,
     0.000111838
    ],
    "n": 8
   },
   "mechanism_signature": {
    "confirmed": true,
    "observed_mean_last3_norm_ratio": 0.8155919,
    "predicted_asymptotic_norm_ratio": 0.7977779,
    "rho_trained_A": 0.7977779,
    "source": "trained benchmark Koopman model"
   },
   "custom_track": null
  },
  "mechanism_confirmed": true,
  "peer_reviewed": false,
  "practical_verdict": "helps",
  "stage1_mechanism_check": {
   "worked": true,
   "confidence": 8,
   "verdict": "Built an adaptive lifted Koopman-style transition using [x,x^2] observables and forgetting-factor RLS, with numerical stability and adaptation checks. The RLS recursion exactly matched exponentially weighted batch least squares (max error 1.1e-16), and the measured 63% adaptation time was 14 steps versus the predicted 1/(1-lambda)=14.29. After the dynamics shift, adaptive lifting achieved RMSE 0.0235 in the first 20 steps and 8.28e-5 in the last 100, versus 0.0277 and 0.00379 for adaptive linear; its 50-step rollout MSE was 0.000203 versus 0.00438 frozen. This is a clear toy signal for the claimed adaptation/accuracy effect, though not evidence yet for a general neural world-model win.",
   "metrics": {
    "baseline": "Adaptive linear lambda=0.95: post-shift RMSE first20=0.027690, last100=0.003789; frozen lifted 50-step post-shift rollout MSE=0.004381",
    "idea": "Adaptive lifted [x,x^2] lambda=0.95: post-shift RMSE first20=0.023485, last100=0.0000828; 50-step rollout MSE=0.000203; max measured lifted spectral radius=0.928",
    "math": "RLS-vs-batch max absolute error=1.11e-16; lambda=0.93 predicted adaptation timescale=14.286, measured 63% timescale=14; scalar rho=0.8 power-29=0.001547"
   },
   "how_to_run": "python3 experiment.py",
   "files": [
    "experiment.py",
    "results.json"
   ],
   "limitations": "Only a deterministic scalar nonlinear synthetic system was tested. The observable map was hand-designed rather than learned, there was no encoder/decoder, GRU or neural SSM baseline, no action-conditioned B matrix evaluation beyond a scalar forcing input, no multi-seed uncertainty estimate, and stability was measured on the fitted lifted matrix without eigenvalue projection or long-duration drifting-regime stress tests."
  },
  "status": "beats_baseline",
  "status_label": "Beats tuned baseline",
  "updated_at": "2026-09-03T12:14:11",
  "verdict_source": "deterministic test code (paired-seed permutation statistics)",
  "verification_axes": {
   "benchmark_mechanism": {
    "confirmed": true,
    "tested": true
   },
   "practical_benchmark": {
    "beats_baseline": true,
    "tested": true,
    "verdict": "helps"
   },
   "toy_mechanism_gate": {
    "confirmed": true,
    "tested": true
   }
  }
 }
}
