/** * MULTI-OBJECTIVE — real problems rarely have ONE goal. A pharma formulation must be more POTENT *and* more * STABLE *and* cheaper; a fraud model must catch more fraud *and* decline fewer good customers. These trade * off — there is no single best, but a PARETO FRONT of best-possible compromises. * * MULTI-OBJECTIVE finds that front from hand-measured results: you score each experiment on N objectives, * and Melete (a) computes the exact non-dominated set and (b) proposes the next experiment to widen the * front, by scalarising the objectives with a deterministically-varying weight vector so successive * proposals probe different trade-offs. Deterministic ⇒ reproducible + signable like every Melete run. * * Honest by construction (DIAKRISIS): the Pareto front (dominance) is EXACT. The proposer uses weighted-sum * scalarisation with rotating weights — simple, robust, and it reliably spreads along the front; it is not * guaranteed to recover points on a deeply CONCAVE front (a known limitation of linear scalarisation, the * honest trade-off for a dependency-free deterministic engine). The front it reports is always exact. */ import { type Space, type Experiment } from "./space.js"; export interface MGoal { name?: string; goal: "maximize" | "minimize"; } export interface MObservation { experiment: Experiment; values: number[]; } /** Does `a` Pareto-dominate `b` across all objectives (≥ in every one, > in at least one, in goal direction)? */ export declare function dominates(a: number[], b: number[], goals: ReadonlyArray): boolean; /** The exact non-dominated set — the achievable best trade-offs. */ export declare function paretoFront(obs: ReadonlyArray, goals: ReadonlyArray): MObservation[]; /** * Propose the next experiment to widen the Pareto front. Scalarises the N objectives with a weight vector * that rotates with the run, so successive calls probe different corners of the trade-off space. */ export declare function proposeNextMulti(space: Space, obs: ReadonlyArray, goals: ReadonlyArray, seed?: number): Experiment; export declare function multiObjectiveGauntlet(): { score: 0 | 100; checks: Array<{ name: string; pass: boolean; detail: string; }>; }; //# sourceMappingURL=multiobjective.d.ts.map