/** * INTERACTION — the variable-coupling map. The rarest thing a sequential optimizer can tell you: not just * "what's the best setting", but "which of your knobs INTERACT — where the best value of one depends on * another, so you cannot tune them independently." * * In real process design this is the difference between a recipe you can hand off ("set temp=X, pH=Y") and * one you can't ("the best temp depends on the pH"). Classical Design-of-Experiments studies interactions — * but black-box / sequential optimizers (the ones tuning ML models and assays today) just return a point and * never surface the coupling. INTERACTION fits a quadratic-with-cross-terms response model to the * measurements you already collected and reads off, for every pair of variables, how strong their * interaction is relative to their individual effects — a coupling map of your process. * * Honest by construction (DIAKRISIS): it is a second-order (quadratic) fit — it recovers pairwise * interactions exactly when the response is well-approximated by one (the gauntlet proves it recovers an * injected interaction coefficient), and it abstains when there are too few measurements to fit the model. * It reports correlation-of-effects, not a causal proof. */ import { type Space } from "./space.js"; import { type Observation, type Goal } from "./engine.js"; export interface InteractionPair { a: string; b: string; strength: number; importancePct: number; coupled: boolean; } export interface InteractionReport { n: number; pairs: InteractionPair[]; strongest: InteractionPair | null; hasInteraction: boolean; note: string; } /** Fit a quadratic-with-interactions model and report the coupling strength of every variable pair. */ export declare function analyzeInteractions(obs: ReadonlyArray, space: Space, _goal?: Goal): InteractionReport; export declare function interactionGauntlet(): { score: 0 | 100; checks: Array<{ name: string; pass: boolean; detail: string; }>; }; //# sourceMappingURL=interaction.d.ts.map