import { type Goal } from "./engine.js"; export type MixedType = "real" | "int" | "categorical"; export interface MixedDim { name: string; type: MixedType; min?: number; max?: number; choices?: string[]; activeWhen?: { dim: string; equals: string; }; } export interface MixedSpace { dims: MixedDim[]; } export type MixedExperiment = Record; export interface MixedComboResult { combo: Record; best: MixedExperiment; value: number; evaluations: number; } export interface MixedResult { best: { experiment: MixedExperiment; value: number; }; bestCombo: Record; byCombo: MixedComboResult[]; evaluations: number; comboCount: number; sampledCombos: boolean; } /** * Optimize a mixed (real + int + categorical, with conditional) space. DISCRETE dims (categoricals + small * integers) are ENUMERATED as a combo grid (never interpolated); within each live combo, the active REAL / * large-int dims get a deterministic continuous search (space-filling seeds → golden-section coordinate * descent that PINPOINTS a smooth optimum, incl. the right integer). Budget is split fairly across combos * (a harder higher-dim combo seeds low and must NOT be discarded early), each search returns budget the moment * it converges, and any remainder concentrates on the current leader. Cost is BOUNDED and roughly linear in * the number of combos (≈ combos × sub-budget) — not an exponential explosion. Inactive conditional dims are * FROZEN (never searched), so no budget is wasted on a knob that does nothing right now. Honest: optimizing K * genuinely-distinct discrete configurations takes ~K× the continuous cost — the win is bounded + correct. */ export declare function mixedDiscover(opts: { space: MixedSpace; oracle: (e: MixedExperiment) => number; budget: number; goal?: Goal; seed?: number; }): MixedResult; export declare function mixedGauntlet(): { score: 0 | 100; checks: Array<{ name: string; pass: boolean; detail: string; }>; }; //# sourceMappingURL=mixedspace.d.ts.map