melete-ai 0.88.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +72 -0
- package/bin/melete-server.mjs +345 -0
- package/bin/melete.mjs +165 -0
- package/dist/achievability.d.ts +38 -0
- package/dist/achievability.d.ts.map +1 -0
- package/dist/achievability.js +135 -0
- package/dist/achievability.js.map +1 -0
- package/dist/aegis.d.ts +52 -0
- package/dist/aegis.d.ts.map +1 -0
- package/dist/aegis.js +191 -0
- package/dist/aegis.js.map +1 -0
- package/dist/arms.d.ts +70 -0
- package/dist/arms.d.ts.map +1 -0
- package/dist/arms.js +399 -0
- package/dist/arms.js.map +1 -0
- package/dist/batch.d.ts +30 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +151 -0
- package/dist/batch.js.map +1 -0
- package/dist/bench.d.ts +49 -0
- package/dist/bench.d.ts.map +1 -0
- package/dist/bench.js +124 -0
- package/dist/bench.js.map +1 -0
- package/dist/certify.d.ts +48 -0
- package/dist/certify.d.ts.map +1 -0
- package/dist/certify.js +125 -0
- package/dist/certify.js.map +1 -0
- package/dist/cliff.d.ts +41 -0
- package/dist/cliff.d.ts.map +1 -0
- package/dist/cliff.js +132 -0
- package/dist/cliff.js.map +1 -0
- package/dist/confidence.d.ts +38 -0
- package/dist/confidence.d.ts.map +1 -0
- package/dist/confidence.js +98 -0
- package/dist/confidence.js.map +1 -0
- package/dist/constrained.d.ts +59 -0
- package/dist/constrained.d.ts.map +1 -0
- package/dist/constrained.js +191 -0
- package/dist/constrained.js.map +1 -0
- package/dist/cortex.d.ts +56 -0
- package/dist/cortex.d.ts.map +1 -0
- package/dist/cortex.js +81 -0
- package/dist/cortex.js.map +1 -0
- package/dist/costaware.d.ts +49 -0
- package/dist/costaware.d.ts.map +1 -0
- package/dist/costaware.js +185 -0
- package/dist/costaware.js.map +1 -0
- package/dist/drift.d.ts +36 -0
- package/dist/drift.d.ts.map +1 -0
- package/dist/drift.js +157 -0
- package/dist/drift.js.map +1 -0
- package/dist/efficiency.d.ts +49 -0
- package/dist/efficiency.d.ts.map +1 -0
- package/dist/efficiency.js +143 -0
- package/dist/efficiency.js.map +1 -0
- package/dist/engine.d.ts +64 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +130 -0
- package/dist/engine.js.map +1 -0
- package/dist/federated.d.ts +38 -0
- package/dist/federated.d.ts.map +1 -0
- package/dist/federated.js +121 -0
- package/dist/federated.js.map +1 -0
- package/dist/frontier.d.ts +51 -0
- package/dist/frontier.d.ts.map +1 -0
- package/dist/frontier.js +117 -0
- package/dist/frontier.js.map +1 -0
- package/dist/guardian.d.ts +46 -0
- package/dist/guardian.d.ts.map +1 -0
- package/dist/guardian.js +101 -0
- package/dist/guardian.js.map +1 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +189 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +44 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +167 -0
- package/dist/interaction.js.map +1 -0
- package/dist/interactive.d.ts +25 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +75 -0
- package/dist/interactive.js.map +1 -0
- package/dist/inverse.d.ts +44 -0
- package/dist/inverse.d.ts.map +1 -0
- package/dist/inverse.js +141 -0
- package/dist/inverse.js.map +1 -0
- package/dist/ipshield.d.ts +62 -0
- package/dist/ipshield.d.ts.map +1 -0
- package/dist/ipshield.js +104 -0
- package/dist/ipshield.js.map +1 -0
- package/dist/journalist.d.ts +56 -0
- package/dist/journalist.d.ts.map +1 -0
- package/dist/journalist.js +132 -0
- package/dist/journalist.js.map +1 -0
- package/dist/lineage.d.ts +43 -0
- package/dist/lineage.d.ts.map +1 -0
- package/dist/lineage.js +112 -0
- package/dist/lineage.js.map +1 -0
- package/dist/metabrain.d.ts +59 -0
- package/dist/metabrain.d.ts.map +1 -0
- package/dist/metabrain.js +215 -0
- package/dist/metabrain.js.map +1 -0
- package/dist/mixedspace.d.ts +61 -0
- package/dist/mixedspace.d.ts.map +1 -0
- package/dist/mixedspace.js +267 -0
- package/dist/mixedspace.js.map +1 -0
- package/dist/multiobjective.d.ts +42 -0
- package/dist/multiobjective.d.ts.map +1 -0
- package/dist/multiobjective.js +123 -0
- package/dist/multiobjective.js.map +1 -0
- package/dist/noise.d.ts +45 -0
- package/dist/noise.d.ts.map +1 -0
- package/dist/noise.js +148 -0
- package/dist/noise.js.map +1 -0
- package/dist/noiserobust.d.ts +71 -0
- package/dist/noiserobust.d.ts.map +1 -0
- package/dist/noiserobust.js +215 -0
- package/dist/noiserobust.js.map +1 -0
- package/dist/oracle.d.ts +63 -0
- package/dist/oracle.d.ts.map +1 -0
- package/dist/oracle.js +106 -0
- package/dist/oracle.js.map +1 -0
- package/dist/poopt.d.ts +79 -0
- package/dist/poopt.d.ts.map +1 -0
- package/dist/poopt.js +148 -0
- package/dist/poopt.js.map +1 -0
- package/dist/portfolio.d.ts +51 -0
- package/dist/portfolio.d.ts.map +1 -0
- package/dist/portfolio.js +132 -0
- package/dist/portfolio.js.map +1 -0
- package/dist/prescription.d.ts +57 -0
- package/dist/prescription.d.ts.map +1 -0
- package/dist/prescription.js +131 -0
- package/dist/prescription.js.map +1 -0
- package/dist/prime.d.ts +85 -0
- package/dist/prime.d.ts.map +1 -0
- package/dist/prime.js +157 -0
- package/dist/prime.js.map +1 -0
- package/dist/provenance.d.ts +77 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +155 -0
- package/dist/provenance.js.map +1 -0
- package/dist/rashomon.d.ts +40 -0
- package/dist/rashomon.d.ts.map +1 -0
- package/dist/rashomon.js +93 -0
- package/dist/rashomon.js.map +1 -0
- package/dist/reliability.d.ts +79 -0
- package/dist/reliability.d.ts.map +1 -0
- package/dist/reliability.js +197 -0
- package/dist/reliability.js.map +1 -0
- package/dist/replay.d.ts +62 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +146 -0
- package/dist/replay.js.map +1 -0
- package/dist/replicate.d.ts +72 -0
- package/dist/replicate.d.ts.map +1 -0
- package/dist/replicate.js +103 -0
- package/dist/replicate.js.map +1 -0
- package/dist/resonance.d.ts +32 -0
- package/dist/resonance.d.ts.map +1 -0
- package/dist/resonance.js +190 -0
- package/dist/resonance.js.map +1 -0
- package/dist/sensitivity.d.ts +44 -0
- package/dist/sensitivity.d.ts.map +1 -0
- package/dist/sensitivity.js +109 -0
- package/dist/sensitivity.js.map +1 -0
- package/dist/server.d.ts +26 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1410 -0
- package/dist/server.js.map +1 -0
- package/dist/shape.d.ts +37 -0
- package/dist/shape.d.ts.map +1 -0
- package/dist/shape.js +170 -0
- package/dist/shape.js.map +1 -0
- package/dist/sloppiness.d.ts +44 -0
- package/dist/sloppiness.d.ts.map +1 -0
- package/dist/sloppiness.js +194 -0
- package/dist/sloppiness.js.map +1 -0
- package/dist/sovereign.d.ts +77 -0
- package/dist/sovereign.d.ts.map +1 -0
- package/dist/sovereign.js +144 -0
- package/dist/sovereign.js.map +1 -0
- package/dist/space.d.ts +38 -0
- package/dist/space.d.ts.map +1 -0
- package/dist/space.js +107 -0
- package/dist/space.js.map +1 -0
- package/dist/surprise.d.ts +43 -0
- package/dist/surprise.d.ts.map +1 -0
- package/dist/surprise.js +123 -0
- package/dist/surprise.js.map +1 -0
- package/dist/territory.d.ts +43 -0
- package/dist/territory.d.ts.map +1 -0
- package/dist/territory.js +102 -0
- package/dist/territory.js.map +1 -0
- package/dist/trace.d.ts +58 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +0 -0
- package/dist/trace.js.map +1 -0
- package/dist/transfer.d.ts +46 -0
- package/dist/transfer.d.ts.map +1 -0
- package/dist/transfer.js +112 -0
- package/dist/transfer.js.map +1 -0
- package/dist/twin.d.ts +41 -0
- package/dist/twin.d.ts.map +1 -0
- package/dist/twin.js +116 -0
- package/dist/twin.js.map +1 -0
- package/examples/train.mjs +8 -0
- package/examples/tune.mjs +11 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"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"}
|
package/dist/bench.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BENCHMARK — the falsifiable proof that the brain is worth it: on a hidden response surface, does the
|
|
3
|
+
* closed loop reach the optimum in FEWER experiments than random search and a systematic grid? Fewer
|
|
4
|
+
* experiments is the entire value — each real experiment costs reagents, robot-time, money. Deterministic
|
|
5
|
+
* + reproducible; the numbers are measured, not claimed.
|
|
6
|
+
*/
|
|
7
|
+
import { type Space, type Experiment } from "./space.js";
|
|
8
|
+
/** A multimodal surface with a global peak (≈1 at (7.2,3.4)) and a decoy local peak that traps naive search. */
|
|
9
|
+
export declare function multimodal(e: Experiment): number;
|
|
10
|
+
export declare const benchSpace: Space;
|
|
11
|
+
export interface BenchResult {
|
|
12
|
+
brain: number | null;
|
|
13
|
+
random: number;
|
|
14
|
+
grid: number | null;
|
|
15
|
+
target: number;
|
|
16
|
+
budget: number;
|
|
17
|
+
}
|
|
18
|
+
/** Compare experiments-to-target for brain vs random (averaged over seeds) vs grid. Lower = better. */
|
|
19
|
+
export declare function benchmark(opts?: {
|
|
20
|
+
budget?: number;
|
|
21
|
+
target?: number;
|
|
22
|
+
seeds?: number;
|
|
23
|
+
}): Promise<BenchResult>;
|
|
24
|
+
/** A rugged Rastrigin-style surface (many local optima; global max 0 at (6.3,3.7)) — where single
|
|
25
|
+
* greedy optimisers get trapped and the portfolio's diversity pays off. */
|
|
26
|
+
export declare function rugged(e: Experiment): number;
|
|
27
|
+
export interface RobustnessRow {
|
|
28
|
+
landscape: string;
|
|
29
|
+
portfolio: number;
|
|
30
|
+
kernelUcb: number;
|
|
31
|
+
cmaes: number;
|
|
32
|
+
resonance: number;
|
|
33
|
+
random: number;
|
|
34
|
+
portfolioIsBest: boolean;
|
|
35
|
+
portfolioIsWorst: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** Measure the portfolio vs each single arm across diverse landscapes (mean best over `seeds`). The
|
|
38
|
+
* production thesis, falsifiable: the portfolio is never the worst and tracks the best arm per landscape —
|
|
39
|
+
* and on the rugged surface the ensemble beats every single algorithm. */
|
|
40
|
+
export declare function robustnessBench(seeds?: number): Promise<RobustnessRow[]>;
|
|
41
|
+
export declare function benchGauntlet(): Promise<{
|
|
42
|
+
score: 0 | 100;
|
|
43
|
+
checks: Array<{
|
|
44
|
+
name: string;
|
|
45
|
+
pass: boolean;
|
|
46
|
+
detail: string;
|
|
47
|
+
}>;
|
|
48
|
+
}>;
|
|
49
|
+
//# sourceMappingURL=bench.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench.d.ts","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAuB,MAAM,YAAY,CAAC;AAG9E,gHAAgH;AAChH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAKhD;AACD,eAAO,MAAM,UAAU,EAAE,KAA8G,CAAC;AAExI,MAAM,WAAW,WAAW;IAAG,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAgB1H,uGAAuG;AACvG,wBAAsB,SAAS,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAQjH;AAED;2EAC2E;AAC3E,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAG5C;AAID,MAAM,WAAW,aAAa;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE;AACjM;;0EAE0E;AAC1E,wBAAsB,eAAe,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAwBzE;AAGD,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAajI"}
|
package/dist/bench.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BENCHMARK — the falsifiable proof that the brain is worth it: on a hidden response surface, does the
|
|
3
|
+
* closed loop reach the optimum in FEWER experiments than random search and a systematic grid? Fewer
|
|
4
|
+
* experiments is the entire value — each real experiment costs reagents, robot-time, money. Deterministic
|
|
5
|
+
* + reproducible; the numbers are measured, not claimed.
|
|
6
|
+
*/
|
|
7
|
+
import { lcg, gridCandidates } from "./space.js";
|
|
8
|
+
import { discover } from "./engine.js";
|
|
9
|
+
/** A multimodal surface with a global peak (≈1 at (7.2,3.4)) and a decoy local peak that traps naive search. */
|
|
10
|
+
export function multimodal(e) {
|
|
11
|
+
const x = Number(e?.["x"]) || 0, y = Number(e?.["y"]) || 0;
|
|
12
|
+
const g = Math.exp(-((x - 7.2) ** 2 + (y - 3.4) ** 2) / 3.0);
|
|
13
|
+
const d = 0.6 * Math.exp(-((x - 2) ** 2 + (y - 8) ** 2) / 2.0);
|
|
14
|
+
return g + d;
|
|
15
|
+
}
|
|
16
|
+
export const benchSpace = { dims: [{ name: "x", type: "real", min: 0, max: 10 }, { name: "y", type: "real", min: 0, max: 10 }] };
|
|
17
|
+
function randomSearch(space, oracle, budget, target, seed) {
|
|
18
|
+
const rnd = lcg(seed);
|
|
19
|
+
let best = -Infinity;
|
|
20
|
+
for (let t = 0; t < budget; t++) {
|
|
21
|
+
const e = {};
|
|
22
|
+
for (const d of space.dims)
|
|
23
|
+
e[d.name] = d.min + (d.max - d.min) * rnd();
|
|
24
|
+
const v = oracle(e);
|
|
25
|
+
if (v > best)
|
|
26
|
+
best = v;
|
|
27
|
+
if (best >= target)
|
|
28
|
+
return t + 1;
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function gridSearch(space, oracle, budget, target) {
|
|
33
|
+
const n = Math.floor(Math.sqrt(budget));
|
|
34
|
+
const cands = gridCandidates(space, n);
|
|
35
|
+
let best = -Infinity;
|
|
36
|
+
for (let i = 0; i < cands.length && i < budget; i++) {
|
|
37
|
+
const v = oracle(cands[i]);
|
|
38
|
+
if (v > best)
|
|
39
|
+
best = v;
|
|
40
|
+
if (best >= target)
|
|
41
|
+
return i + 1;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/** Compare experiments-to-target for brain vs random (averaged over seeds) vs grid. Lower = better. */
|
|
46
|
+
export async function benchmark(opts) {
|
|
47
|
+
const budget = opts?.budget ?? 150;
|
|
48
|
+
const target = opts?.target ?? 0.99;
|
|
49
|
+
const seeds = opts?.seeds ?? 30;
|
|
50
|
+
const br = await discover({ space: benchSpace, oracle: (e) => multimodal(e), budget, seed: 7, goal: "maximize", target });
|
|
51
|
+
const brain = br.best.value >= target ? br.evaluations : null;
|
|
52
|
+
let rsum = 0, rcount = 0;
|
|
53
|
+
for (let s = 1; s <= seeds; s++) {
|
|
54
|
+
const f = randomSearch(benchSpace, multimodal, budget, target, s * 7919);
|
|
55
|
+
if (f) {
|
|
56
|
+
rsum += f;
|
|
57
|
+
rcount++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const random = rcount ? Math.round((rsum / rcount) * 10) / 10 : budget;
|
|
61
|
+
const grid = gridSearch(benchSpace, multimodal, budget, target);
|
|
62
|
+
return { brain, random, grid, target, budget };
|
|
63
|
+
}
|
|
64
|
+
/** A rugged Rastrigin-style surface (many local optima; global max 0 at (6.3,3.7)) — where single
|
|
65
|
+
* greedy optimisers get trapped and the portfolio's diversity pays off. */
|
|
66
|
+
export function rugged(e) {
|
|
67
|
+
const x = (Number(e?.["x"]) || 0) - 6.3, y = (Number(e?.["y"]) || 0) - 3.7;
|
|
68
|
+
return -(20 + (x * x - 10 * Math.cos(2 * Math.PI * x)) + (y * y - 10 * Math.cos(2 * Math.PI * y)));
|
|
69
|
+
}
|
|
70
|
+
import { portfolioDiscover } from "./portfolio.js";
|
|
71
|
+
import { armKernelUCB, armCMAES, armResonance, armRandom } from "./arms.js";
|
|
72
|
+
/** Measure the portfolio vs each single arm across diverse landscapes (mean best over `seeds`). The
|
|
73
|
+
* production thesis, falsifiable: the portfolio is never the worst and tracks the best arm per landscape —
|
|
74
|
+
* and on the rugged surface the ensemble beats every single algorithm. */
|
|
75
|
+
export async function robustnessBench(seeds = 6) {
|
|
76
|
+
const sp2 = { dims: [{ name: "x", type: "real", min: 0, max: 10 }, { name: "y", type: "real", min: 0, max: 10 }] };
|
|
77
|
+
const sp5 = { dims: Array.from({ length: 5 }, (_, i) => ({ name: "x" + i, type: "real", min: 0, max: 1 })) };
|
|
78
|
+
const f5 = (e) => { let s = 0; for (let i = 0; i < 5; i++) {
|
|
79
|
+
const d = (Number(e?.["x" + i]) || 0) - 0.6;
|
|
80
|
+
s += d * d;
|
|
81
|
+
} return Math.exp(-s / 0.1); };
|
|
82
|
+
const cases = [
|
|
83
|
+
{ landscape: "smooth-2D", space: sp2, oracle: (e) => multimodal(e), budget: 80 },
|
|
84
|
+
{ landscape: "rugged-2D", space: sp2, oracle: (e) => rugged(e), budget: 150 },
|
|
85
|
+
{ landscape: "high-5D", space: sp5, oracle: f5, budget: 200 },
|
|
86
|
+
];
|
|
87
|
+
const mean = (a) => a.reduce((x, y) => x + y, 0) / a.length;
|
|
88
|
+
const rows = [];
|
|
89
|
+
for (const c of cases) {
|
|
90
|
+
const P = [], K = [], C = [], R = [], Z = [];
|
|
91
|
+
for (let s = 1; s <= seeds; s++) {
|
|
92
|
+
P.push((await portfolioDiscover({ space: c.space, oracle: c.oracle, budget: c.budget, seed: s, goal: "maximize" })).best.value);
|
|
93
|
+
K.push((await portfolioDiscover({ space: c.space, oracle: c.oracle, budget: c.budget, seed: s, goal: "maximize", arms: [armKernelUCB()] })).best.value);
|
|
94
|
+
C.push((await portfolioDiscover({ space: c.space, oracle: c.oracle, budget: c.budget, seed: s, goal: "maximize", arms: [armCMAES()] })).best.value);
|
|
95
|
+
R.push((await portfolioDiscover({ space: c.space, oracle: c.oracle, budget: c.budget, seed: s, goal: "maximize", arms: [armResonance()] })).best.value);
|
|
96
|
+
Z.push((await portfolioDiscover({ space: c.space, oracle: c.oracle, budget: c.budget, seed: s, goal: "maximize", arms: [armRandom()] })).best.value);
|
|
97
|
+
}
|
|
98
|
+
const p = mean(P), vals = [mean(K), mean(C), mean(R), mean(Z)];
|
|
99
|
+
rows.push({ landscape: c.landscape, portfolio: p, kernelUcb: vals[0], cmaes: vals[1], resonance: vals[2], random: vals[3], portfolioIsBest: p >= Math.max(...vals) - 1e-9, portfolioIsWorst: p <= Math.min(...vals) + 1e-9 });
|
|
100
|
+
}
|
|
101
|
+
return rows;
|
|
102
|
+
}
|
|
103
|
+
// ── gauntlet ──────────────────────────────────────────────────────────────────
|
|
104
|
+
export async function benchGauntlet() {
|
|
105
|
+
const r = await benchmark({ budget: 150, target: 0.99, seeds: 30 });
|
|
106
|
+
const brainFinds = r.brain != null && r.brain <= 150;
|
|
107
|
+
const beatsRandom = r.brain != null && r.brain < r.random; // the headline claim — measured
|
|
108
|
+
const beatsGridOrTie = r.grid == null || (r.brain != null && r.brain <= r.grid);
|
|
109
|
+
const total = (() => { try {
|
|
110
|
+
multimodal(null);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
} })();
|
|
116
|
+
const checks = [
|
|
117
|
+
{ name: "BRAIN-CONVERGES", pass: brainFinds, detail: `brain reached 99% of optimum in ${r.brain} experiments` },
|
|
118
|
+
{ name: "BEATS-RANDOM", pass: beatsRandom, detail: `brain ${r.brain} < random avg ${r.random} experiments` },
|
|
119
|
+
{ name: "BEATS-OR-TIES-GRID", pass: beatsGridOrTie, detail: `grid: ${r.grid ?? ">budget"} experiments` },
|
|
120
|
+
{ name: "TOTAL", pass: total, detail: "objective never throws on garbage" },
|
|
121
|
+
];
|
|
122
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bench.js","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAA+B,GAAG,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,gHAAgH;AAChH,MAAM,UAAU,UAAU,CAAC,CAAa;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AACD,MAAM,CAAC,MAAM,UAAU,GAAU,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAIxI,SAAS,YAAY,CAAC,KAAY,EAAE,MAAiC,EAAE,MAAc,EAAE,MAAc,EAAE,IAAY;IACjH,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAe,EAAE,CAAC;QAAC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI;YAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;QAClG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;QAAC,IAAI,IAAI,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AACD,SAAS,UAAU,CAAC,KAAY,EAAE,MAAiC,EAAE,MAAc,EAAE,MAAc;IACjG,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACtG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;QAAC,IAAI,IAAI,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAC9I,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAA2D;IACzF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC;IAAC,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;IAAC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IACzG,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1H,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC;YAAC,IAAI,IAAI,CAAC,CAAC;YAAC,MAAM,EAAE,CAAC;QAAC,CAAC;IAAC,CAAC;IACxK,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC;AAED;2EAC2E;AAC3E,MAAM,UAAU,MAAM,CAAC,CAAa;IAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IAC3E,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5E;;0EAE0E;AAC1E,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAK,GAAG,CAAC;IAC7C,MAAM,GAAG,GAAU,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1H,MAAM,GAAG,GAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC7H,MAAM,EAAE,GAAG,CAAC,CAAa,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjK,MAAM,KAAK,GAAG;QACZ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5F,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;QACzF,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;KAC9D,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACtE,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAa,EAAE,EAAE,CAAC,GAAa,EAAE,EAAE,CAAC,GAAa,EAAE,EAAE,CAAC,GAAa,EAAE,EAAE,CAAC,GAAa,EAAE,CAAC;QAC/F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxJ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpJ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxJ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvJ,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,gBAAgB,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAChO,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;IACrD,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAU,gCAAgC;IACpG,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,IAAa,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpG,MAAM,MAAM,GAAG;QACb,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,mCAAmC,CAAC,CAAC,KAAK,cAAc,EAAE;QAC/G,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,MAAM,cAAc,EAAE;QAC5G,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,IAAI,SAAS,cAAc,EAAE;QACxG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE;KAC5E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CERTIFY — the Optimality Certificate. The thing no black-box optimizer ships: a falsifiable bound on
|
|
3
|
+
* HOW FAR the best-found could be from the true global best.
|
|
4
|
+
*
|
|
5
|
+
* Every optimizer returns "here's the best I found". None tell you "and the true optimum cannot be more
|
|
6
|
+
* than X% better than this" — so you never know if you stopped because it's good or because the optimizer
|
|
7
|
+
* is bad. CERTIFY closes that: assuming the response surface changes no faster than a Lipschitz constant L
|
|
8
|
+
* (ESTIMATED FROM YOUR OWN DATA, then held conservatively), the value at any unobserved point x is bounded
|
|
9
|
+
* by min_i ( f(x_i) + L·‖x − x_i‖ ). Maximising that bound over a space-filling sweep gives a CERTIFIED
|
|
10
|
+
* CEILING the global optimum cannot exceed. Your best vs that ceiling = a provable "within X% of the best
|
|
11
|
+
* possible" — signable alongside the discovery trace.
|
|
12
|
+
*
|
|
13
|
+
* Honest by construction (DIAKRISIS): this is "certified UNDER a data-estimated Lipschitz bound", not an
|
|
14
|
+
* unconditional proof — a black box can hide an arbitrarily sharp spike between samples. We estimate L from
|
|
15
|
+
* the observed pairs and hold a conservative safety factor, and we STATE the assumption. The gauntlet
|
|
16
|
+
* checks the honest, guaranteed properties (the ceiling never sits below what you already saw, it tightens
|
|
17
|
+
* as you sample more, it is deterministic) and that on smooth, well-sampled surfaces the certified gap is
|
|
18
|
+
* small — falsifiable, reproducible.
|
|
19
|
+
*/
|
|
20
|
+
import { type Space } from "./space.js";
|
|
21
|
+
import { type Observation, type Goal } from "./engine.js";
|
|
22
|
+
export interface OptimalityCertificate {
|
|
23
|
+
n: number;
|
|
24
|
+
bestObserved: number;
|
|
25
|
+
certifiedCeiling: number;
|
|
26
|
+
gap: number;
|
|
27
|
+
withinPct: number;
|
|
28
|
+
lipschitz: number;
|
|
29
|
+
assumption: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Certify how close the best-found is to the global optimum, under a data-estimated Lipschitz bound.
|
|
33
|
+
* @param obs the (experiment, value) history
|
|
34
|
+
* @param space the search space (for normalisation + the sweep)
|
|
35
|
+
* @param goal maximise | minimise
|
|
36
|
+
* @param safety conservative multiplier on the estimated Lipschitz constant (>=1; default 1.5)
|
|
37
|
+
* @param sweep number of space-filling probe points for the ceiling (default 2000)
|
|
38
|
+
*/
|
|
39
|
+
export declare function certifyOptimality(obs: ReadonlyArray<Observation>, space: Space, goal?: Goal, safety?: number, sweep?: number): OptimalityCertificate;
|
|
40
|
+
export declare function certifyGauntlet(): Promise<{
|
|
41
|
+
score: 0 | 100;
|
|
42
|
+
checks: Array<{
|
|
43
|
+
name: string;
|
|
44
|
+
pass: boolean;
|
|
45
|
+
detail: string;
|
|
46
|
+
}>;
|
|
47
|
+
}>;
|
|
48
|
+
//# sourceMappingURL=certify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"certify.d.ts","sourceRoot":"","sources":["../src/certify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,KAAK,KAAK,EAAmB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,CAAC,EAAE,MAAM,CAAC;IACV,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,IAAiB,EAAE,MAAM,SAAM,EAAE,KAAK,SAAO,GAAG,qBAAqB,CA+B3J;AAKD,wBAAsB,eAAe,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA8CnI"}
|
package/dist/certify.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/** map an experiment to a point in normalised [0,1]^d using the space bounds */
|
|
2
|
+
function norm(space, e) {
|
|
3
|
+
return space.dims.map((d) => { const lo = d.min ?? 0, hi = d.max ?? 1; const span = hi - lo || 1; return Math.max(0, Math.min(1, ((+e[d.name] || 0) - lo) / span)); });
|
|
4
|
+
}
|
|
5
|
+
const dist = (a, b) => { let s = 0; for (let i = 0; i < a.length; i++)
|
|
6
|
+
s += (a[i] - b[i]) ** 2; return Math.sqrt(s); };
|
|
7
|
+
/** deterministic Halton low-discrepancy point (index k, base) — space-filling without randomness */
|
|
8
|
+
function halton(k, base) { let f = 1, r = 0, i = k + 1; while (i > 0) {
|
|
9
|
+
f /= base;
|
|
10
|
+
r += f * (i % base);
|
|
11
|
+
i = Math.floor(i / base);
|
|
12
|
+
} return r; }
|
|
13
|
+
const PRIMES = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];
|
|
14
|
+
/**
|
|
15
|
+
* Certify how close the best-found is to the global optimum, under a data-estimated Lipschitz bound.
|
|
16
|
+
* @param obs the (experiment, value) history
|
|
17
|
+
* @param space the search space (for normalisation + the sweep)
|
|
18
|
+
* @param goal maximise | minimise
|
|
19
|
+
* @param safety conservative multiplier on the estimated Lipschitz constant (>=1; default 1.5)
|
|
20
|
+
* @param sweep number of space-filling probe points for the ceiling (default 2000)
|
|
21
|
+
*/
|
|
22
|
+
export function certifyOptimality(obs, space, goal = "maximize", safety = 1.5, sweep = 2000) {
|
|
23
|
+
const hist = (obs ?? []).filter((o) => o && o.experiment && Number.isFinite(o.value));
|
|
24
|
+
const d = space?.dims?.length ?? 0;
|
|
25
|
+
const sgn = goal === "minimize" ? -1 : 1; // work in "higher = better"
|
|
26
|
+
const pts = hist.map((o) => norm(space, o.experiment));
|
|
27
|
+
const vals = hist.map((o) => sgn * o.value);
|
|
28
|
+
const n = hist.length;
|
|
29
|
+
const bestNorm = n ? Math.max(...vals) : 0;
|
|
30
|
+
const bestRaw = sgn * bestNorm;
|
|
31
|
+
if (n < 2 || d === 0) {
|
|
32
|
+
return { n, bestObserved: bestRaw, certifiedCeiling: bestRaw, gap: 0, withinPct: n ? 100 : 0, lipschitz: 0, assumption: "need ≥2 observations to estimate a Lipschitz bound" };
|
|
33
|
+
}
|
|
34
|
+
// estimate Lipschitz L = max |Δv| / ‖Δx‖ over observed pairs, held conservative
|
|
35
|
+
let L = 0;
|
|
36
|
+
for (let i = 0; i < n; i++)
|
|
37
|
+
for (let j = i + 1; j < n; j++) {
|
|
38
|
+
const dx = dist(pts[i], pts[j]);
|
|
39
|
+
if (dx > 1e-9)
|
|
40
|
+
L = Math.max(L, Math.abs(vals[i] - vals[j]) / dx);
|
|
41
|
+
}
|
|
42
|
+
L = L * Math.max(1, safety);
|
|
43
|
+
if (!(L > 0))
|
|
44
|
+
L = 1e-9;
|
|
45
|
+
// certified ceiling: max over a space-filling sweep of min_i ( v_i + L·dist )
|
|
46
|
+
let ceiling = bestNorm;
|
|
47
|
+
for (let k = 0; k < sweep; k++) {
|
|
48
|
+
const c = [];
|
|
49
|
+
for (let dim = 0; dim < d; dim++)
|
|
50
|
+
c.push(halton(k, PRIMES[dim % PRIMES.length]));
|
|
51
|
+
let bound = Infinity;
|
|
52
|
+
for (let i = 0; i < n; i++) {
|
|
53
|
+
const b = vals[i] + L * dist(c, pts[i]);
|
|
54
|
+
if (b < bound)
|
|
55
|
+
bound = b;
|
|
56
|
+
}
|
|
57
|
+
if (bound > ceiling)
|
|
58
|
+
ceiling = bound;
|
|
59
|
+
}
|
|
60
|
+
// also check the sample points themselves (bound there == their own value, already ≤ ceiling)
|
|
61
|
+
const gap = Math.max(0, ceiling - bestNorm);
|
|
62
|
+
const denom = Math.abs(ceiling) > 1e-12 ? Math.abs(ceiling) : 1;
|
|
63
|
+
const withinPct = Math.max(0, Math.min(100, 100 * (1 - gap / denom)));
|
|
64
|
+
return { n, bestObserved: bestRaw, certifiedCeiling: sgn * ceiling, gap, withinPct, lipschitz: L,
|
|
65
|
+
assumption: `under a Lipschitz bound L≈${L.toPrecision(3)} estimated from your ${n} observations (×${safety} safety); a black box can hide a sharper spike between samples` };
|
|
66
|
+
}
|
|
67
|
+
// ── gauntlet ──────────────────────────────────────────────────────────────────
|
|
68
|
+
import { reliableDiscover } from "./reliability.js";
|
|
69
|
+
export async function certifyGauntlet() {
|
|
70
|
+
const space = { dims: [{ name: "x", type: "real", min: -5, max: 5 }, { name: "y", type: "real", min: -5, max: 5 }] };
|
|
71
|
+
const f = (e) => Math.exp(-(((e.x ?? 0)) ** 2 + ((e.y ?? 0)) ** 2) / 8); // smooth bowl, optimum = 1 at (0,0)
|
|
72
|
+
// collect a real run's history
|
|
73
|
+
const obs = [];
|
|
74
|
+
// sample on a coarse grid so the certificate has coverage (deterministic)
|
|
75
|
+
for (let i = 0; i <= 6; i++)
|
|
76
|
+
for (let j = 0; j <= 6; j++) {
|
|
77
|
+
const e = { x: -5 + (10 * i) / 6, y: -5 + (10 * j) / 6 };
|
|
78
|
+
obs.push({ experiment: e, value: f(e) });
|
|
79
|
+
}
|
|
80
|
+
const cert = certifyOptimality(obs, space, "maximize");
|
|
81
|
+
// CONTAINS-BEST: the ceiling can never sit below the best you actually observed
|
|
82
|
+
const containsBest = cert.certifiedCeiling >= cert.bestObserved - 1e-9;
|
|
83
|
+
// CONTAINS-OPTIMUM: with real coverage the certified ceiling is ≥ the true optimum (1.0) — the certificate
|
|
84
|
+
// is honest (it never tells you you're closer to done than you provably are)
|
|
85
|
+
const containsOptimum = cert.certifiedCeiling >= 1.0 - 1e-6;
|
|
86
|
+
// TIGHTENS: more observations ⇒ the certified gap does not grow
|
|
87
|
+
const few = certifyOptimality(obs.slice(0, 9), space, "maximize");
|
|
88
|
+
const many = certifyOptimality(obs, space, "maximize");
|
|
89
|
+
const tightens = many.gap <= few.gap + 1e-9;
|
|
90
|
+
// DETERMINISTIC
|
|
91
|
+
const det = JSON.stringify(certifyOptimality(obs, space, "maximize")) === JSON.stringify(certifyOptimality(obs, space, "maximize"));
|
|
92
|
+
// MINIMIZE symmetry: on -f with goal minimize, ceiling (in its direction) contains the true min (-1)
|
|
93
|
+
const obsMin = obs.map((o) => ({ experiment: o.experiment, value: -o.value }));
|
|
94
|
+
const certMin = certifyOptimality(obsMin, space, "minimize");
|
|
95
|
+
const minOK = certMin.certifiedCeiling <= -1.0 + 1e-6 && certMin.bestObserved <= -0.99;
|
|
96
|
+
// WITHIN-RANGE: withinPct is a sane 0..100
|
|
97
|
+
const rangeOK = cert.withinPct >= 0 && cert.withinPct <= 100 && Number.isFinite(cert.lipschitz);
|
|
98
|
+
// TOTAL: junk never throws
|
|
99
|
+
const total = (() => { try {
|
|
100
|
+
certifyOptimality(null, space);
|
|
101
|
+
certifyOptimality([], space);
|
|
102
|
+
certifyOptimality([{ experiment: { x: 1, y: 1 }, value: 0.5 }], space);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
} })();
|
|
108
|
+
// USEFUL: after a real reliableDiscover run on the bowl, best is certified close to the ceiling
|
|
109
|
+
const r = await reliableDiscover({ space, oracle: f, budget: 60, seed: 3, goal: "maximize" });
|
|
110
|
+
const runObs = obs.concat([{ experiment: r.best.experiment, value: r.best.value }]);
|
|
111
|
+
const certRun = certifyOptimality(runObs, space, "maximize");
|
|
112
|
+
const useful = certRun.withinPct >= 80;
|
|
113
|
+
const checks = [
|
|
114
|
+
{ name: "CONTAINS-BEST", pass: containsBest, detail: "the certified ceiling never sits below the best observed value" },
|
|
115
|
+
{ name: "CONTAINS-OPTIMUM", pass: containsOptimum, detail: `with coverage the ceiling (${cert.certifiedCeiling.toFixed(3)}) is ≥ the true optimum 1.0 — honest, never over-optimistic` },
|
|
116
|
+
{ name: "TIGHTENS-WITH-DATA", pass: tightens, detail: `more observations ⇒ smaller gap (few=${few.gap.toFixed(3)} → many=${many.gap.toFixed(3)})` },
|
|
117
|
+
{ name: "DETERMINISTIC", pass: det, detail: "same history → identical certificate (signable)" },
|
|
118
|
+
{ name: "MINIMIZE", pass: minOK, detail: "works symmetrically for a minimise goal" },
|
|
119
|
+
{ name: "SANE-RANGE", pass: rangeOK, detail: "withinPct ∈ [0,100] and Lipschitz is finite" },
|
|
120
|
+
{ name: "TOTAL", pass: total, detail: "null / empty / single-point never throws" },
|
|
121
|
+
{ name: "USEFUL", pass: useful, detail: `after a real run the best is certified within ${certRun.withinPct.toFixed(1)}% of the ceiling` },
|
|
122
|
+
];
|
|
123
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=certify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"certify.js","sourceRoot":"","sources":["../src/certify.ts"],"names":[],"mappings":"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"}
|
package/dist/cliff.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLIFF / TIPPING-POINT detector — where does a tiny change make the result fall off a cliff? Most analyses
|
|
3
|
+
* assume the response is smooth. Real processes aren't: a catalyst poisons past a temperature, a model
|
|
4
|
+
* collapses past a learning rate, a material shatters past a load, a yield craters past a pH. These cliffs
|
|
5
|
+
* are where disasters live — and a "best setting" sitting right on the edge of one is a setting that works
|
|
6
|
+
* brilliantly today and fails the morning the room is 1° warmer.
|
|
7
|
+
*
|
|
8
|
+
* CLIFF scans your measurements for NEIGHBOURS that are close in settings but far apart in result — the
|
|
9
|
+
* fingerprint of a cliff — and reports where they are, how big the drop is, and which knob you crossed.
|
|
10
|
+
* Crucially, it flags when your OPTIMUM sits on a cliff edge: a loud warning to step back to a safer,
|
|
11
|
+
* flatter setting even if it scores a hair lower.
|
|
12
|
+
*
|
|
13
|
+
* Honest by construction (DIAKRISIS): a cliff is detected only where two genuinely-near experiments disagree
|
|
14
|
+
* far more than the typical local change AND the drop is a real fraction of your result range — measured
|
|
15
|
+
* from your data, not assumed. It can't see a cliff hiding between samples you never took near; it reports
|
|
16
|
+
* the ones your data actually straddles, and abstains when data is too thin.
|
|
17
|
+
*/
|
|
18
|
+
import { type Space } from "./space.js";
|
|
19
|
+
import { type Observation, type Goal } from "./engine.js";
|
|
20
|
+
export interface Cliff {
|
|
21
|
+
at: Record<string, number>;
|
|
22
|
+
drop: number;
|
|
23
|
+
steepness: number;
|
|
24
|
+
variable: string;
|
|
25
|
+
}
|
|
26
|
+
export interface CliffReport {
|
|
27
|
+
cliffs: Cliff[];
|
|
28
|
+
optimumOnCliff: boolean;
|
|
29
|
+
note: string;
|
|
30
|
+
}
|
|
31
|
+
/** Find settings where a small change causes a big drop in result (cliffs / tipping points). */
|
|
32
|
+
export declare function analyzeCliffs(obs: ReadonlyArray<Observation>, space: Space, _goal?: Goal): CliffReport;
|
|
33
|
+
export declare function cliffGauntlet(): {
|
|
34
|
+
score: 0 | 100;
|
|
35
|
+
checks: Array<{
|
|
36
|
+
name: string;
|
|
37
|
+
pass: boolean;
|
|
38
|
+
detail: string;
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=cliff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliff.d.ts","sourceRoot":"","sources":["../src/cliff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,KAAK,EAAmB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,KAAK;IAAG,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AACxG,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,IAAiB,GAAG,WAAW,CA6ClH;AAKD,wBAAgB,aAAa,IAAI;IAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAyClH"}
|
package/dist/cliff.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
const dst = (a, c) => { let s = 0; for (let i = 0; i < a.length; i++)
|
|
2
|
+
s += (a[i] - c[i]) ** 2; return Math.sqrt(s); };
|
|
3
|
+
/** Find settings where a small change causes a big drop in result (cliffs / tipping points). */
|
|
4
|
+
export function analyzeCliffs(obs, space, _goal = "maximize") {
|
|
5
|
+
const dims = space?.dims ?? [];
|
|
6
|
+
const D = dims.length;
|
|
7
|
+
const hist = (obs ?? []).filter((o) => o && o.experiment && Number.isFinite(o.value));
|
|
8
|
+
const n = hist.length;
|
|
9
|
+
if (D === 0 || n < 8)
|
|
10
|
+
return { cliffs: [], optimumOnCliff: false, note: `need ≈8+ measurements to find cliffs (have ${n})` };
|
|
11
|
+
const lo = (i) => dims[i].min ?? 0, hi = (i) => dims[i].max ?? 1;
|
|
12
|
+
const toN = (e) => dims.map((d, i) => { const sp = hi(i) - lo(i) || 1; return Math.max(0, Math.min(1, ((+e[d.name] || 0) - lo(i)) / sp)); });
|
|
13
|
+
const P = hist.map((o) => toN(o.experiment));
|
|
14
|
+
const V = hist.map((o) => o.value);
|
|
15
|
+
const vRange = Math.max(1e-9, Math.max(...V) - Math.min(...V));
|
|
16
|
+
// typical local spacing
|
|
17
|
+
const nn = [];
|
|
18
|
+
for (let i = 0; i < n; i++) {
|
|
19
|
+
let m = Infinity;
|
|
20
|
+
for (let j = 0; j < n; j++)
|
|
21
|
+
if (j !== i)
|
|
22
|
+
m = Math.min(m, dst(P[i], P[j]));
|
|
23
|
+
nn.push(m);
|
|
24
|
+
}
|
|
25
|
+
const medNN = nn.slice().sort((a, b) => a - b)[Math.floor(n / 2)] || 0.1;
|
|
26
|
+
const rho = Math.max(1e-6, medNN * 2.5); // "neighbour" radius
|
|
27
|
+
// gradients of near pairs
|
|
28
|
+
const grads = [];
|
|
29
|
+
for (let i = 0; i < n; i++)
|
|
30
|
+
for (let j = i + 1; j < n; j++) {
|
|
31
|
+
const d = dst(P[i], P[j]);
|
|
32
|
+
if (d > 1e-6 && d <= rho)
|
|
33
|
+
grads.push({ i, j, g: Math.abs(V[i] - V[j]) / d, dv: Math.abs(V[i] - V[j]) });
|
|
34
|
+
}
|
|
35
|
+
if (!grads.length)
|
|
36
|
+
return { cliffs: [], optimumOnCliff: false, note: "no near-neighbour pairs to compare — sample a little denser" };
|
|
37
|
+
const medG = grads.map((x) => x.g).sort((a, b) => a - b)[Math.floor(grads.length / 2)] || 0;
|
|
38
|
+
// a cliff: gradient ≫ typical AND the drop is a real fraction of the result range
|
|
39
|
+
const candidates = grads.filter((x) => x.g > 3 * medG + 1e-9 && x.dv > 0.15 * vRange).sort((a, b) => b.g - a.g);
|
|
40
|
+
const cliffs = [];
|
|
41
|
+
const taken = [];
|
|
42
|
+
for (const c of candidates) {
|
|
43
|
+
const mid = P[c.i].map((v, k) => (v + P[c.j][k]) / 2);
|
|
44
|
+
if (taken.some((t) => dst(t, mid) < 0.12))
|
|
45
|
+
continue; // dedupe nearby cliffs
|
|
46
|
+
taken.push(mid);
|
|
47
|
+
let vk = 0, vmax = -1;
|
|
48
|
+
for (let k = 0; k < D; k++) {
|
|
49
|
+
const dd = Math.abs(P[c.i][k] - P[c.j][k]);
|
|
50
|
+
if (dd > vmax) {
|
|
51
|
+
vmax = dd;
|
|
52
|
+
vk = k;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const at = {};
|
|
56
|
+
dims.forEach((d, k) => { const real = lo(k) + mid[k] * (hi(k) - lo(k)); at[d.name] = +(d.type === "int" ? Math.round(real) : +real.toFixed(4)); });
|
|
57
|
+
cliffs.push({ at, drop: +c.dv.toFixed(4), steepness: +(c.g / (medG || 1)).toFixed(1), variable: dims[vk].name });
|
|
58
|
+
if (cliffs.length >= 5)
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
// is the optimum sitting on a cliff edge?
|
|
62
|
+
const sgn = _goal === "minimize" ? -1 : 1;
|
|
63
|
+
let bestIdx = 0;
|
|
64
|
+
for (let i = 1; i < n; i++)
|
|
65
|
+
if (sgn * V[i] > sgn * V[bestIdx])
|
|
66
|
+
bestIdx = i;
|
|
67
|
+
const optimumOnCliff = candidates.some((c) => c.i === bestIdx || c.j === bestIdx);
|
|
68
|
+
const note = cliffs.length === 0
|
|
69
|
+
? "no cliffs in range — the response looks smooth where you've measured (small changes → small effects)"
|
|
70
|
+
: `${cliffs.length} cliff${cliffs.length > 1 ? "s" : ""} found — near ${cliffs[0].variable} ≈ ${cliffs[0].at[cliffs[0].variable]}, a small step drops the result by ${cliffs[0].drop}${optimumOnCliff ? ". ⚠ your best setting sits ON a cliff edge — step back to a flatter, safer one" : ""}`;
|
|
71
|
+
return { cliffs, optimumOnCliff, note };
|
|
72
|
+
}
|
|
73
|
+
// ── gauntlet ──────────────────────────────────────────────────────────────────
|
|
74
|
+
import { lcg } from "./space.js";
|
|
75
|
+
export function cliffGauntlet() {
|
|
76
|
+
const space = { dims: [{ name: "x", type: "real", min: 0, max: 1 }, { name: "y", type: "real", min: 0, max: 1 }] };
|
|
77
|
+
// STEP: a cliff at x = 0.5 (0.1 below, 0.9 above), gentle in y
|
|
78
|
+
const step = (x, y) => (x < 0.5 ? 0.1 : 0.9) + 0.05 * y;
|
|
79
|
+
const r1 = lcg(13);
|
|
80
|
+
const o1 = [];
|
|
81
|
+
for (let i = 0; i < 90; i++) {
|
|
82
|
+
const x = r1(), y = r1();
|
|
83
|
+
o1.push({ experiment: { x, y }, value: step(x, y) });
|
|
84
|
+
}
|
|
85
|
+
const c1 = analyzeCliffs(o1, space, "maximize");
|
|
86
|
+
const detects = c1.cliffs.length >= 1;
|
|
87
|
+
const locatedRight = detects && Math.abs(c1.cliffs[0].at.x - 0.5) < 0.15;
|
|
88
|
+
const variableRight = detects && c1.cliffs[0].variable === "x";
|
|
89
|
+
// SMOOTH: linear ramp → no cliffs
|
|
90
|
+
const smooth = (x, y) => 0.5 * (x + y);
|
|
91
|
+
const r2 = lcg(4);
|
|
92
|
+
const o2 = [];
|
|
93
|
+
for (let i = 0; i < 90; i++) {
|
|
94
|
+
const x = r2(), y = r2();
|
|
95
|
+
o2.push({ experiment: { x, y }, value: smooth(x, y) });
|
|
96
|
+
}
|
|
97
|
+
const c2 = analyzeCliffs(o2, space, "maximize");
|
|
98
|
+
const smoothClean = c2.cliffs.length === 0 && !c2.optimumOnCliff;
|
|
99
|
+
// OPTIMUM-ON-CLIFF: a narrow high ledge bordered by drops; the best sits on the edge
|
|
100
|
+
const ledge = (x, y) => (x >= 0.5 && x < 0.58 ? 1.0 : 0.2) + 0.02 * y;
|
|
101
|
+
const r3 = lcg(8);
|
|
102
|
+
const o3 = [];
|
|
103
|
+
for (let i = 0; i < 130; i++) {
|
|
104
|
+
const x = r3(), y = r3();
|
|
105
|
+
o3.push({ experiment: { x, y }, value: ledge(x, y) });
|
|
106
|
+
}
|
|
107
|
+
const c3 = analyzeCliffs(o3, space, "maximize");
|
|
108
|
+
const optOnCliff = c3.optimumOnCliff && c3.cliffs.length >= 1;
|
|
109
|
+
const det = JSON.stringify(analyzeCliffs(o1, space, "maximize")) === JSON.stringify(analyzeCliffs(o1, space, "maximize"));
|
|
110
|
+
const abstains = analyzeCliffs(o1.slice(0, 5), space, "maximize").note.indexOf("need") >= 0;
|
|
111
|
+
const total = (() => { try {
|
|
112
|
+
analyzeCliffs([], space);
|
|
113
|
+
analyzeCliffs(null, space);
|
|
114
|
+
analyzeCliffs(o1, { dims: [] });
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return false;
|
|
119
|
+
} })();
|
|
120
|
+
const checks = [
|
|
121
|
+
{ name: "DETECTS-CLIFF", pass: detects, detail: `step landscape → ${c1.cliffs.length} cliff(s) found (steepness ${c1.cliffs[0]?.steepness}× typical)` },
|
|
122
|
+
{ name: "LOCATES-CLIFF", pass: locatedRight, detail: `cliff at x ≈ ${c1.cliffs[0]?.at.x} (true edge 0.5)` },
|
|
123
|
+
{ name: "IDENTIFIES-VARIABLE", pass: variableRight, detail: `the knob you crossed = ${c1.cliffs[0]?.variable} (true: x)` },
|
|
124
|
+
{ name: "SMOOTH-NO-FALSE-CLIFF", pass: smoothClean, detail: `smooth ramp → ${c2.cliffs.length} cliffs (no false alarm)` },
|
|
125
|
+
{ name: "OPTIMUM-ON-CLIFF-WARNING", pass: optOnCliff, detail: `narrow ledge → best flagged on a cliff edge (${c3.optimumOnCliff})` },
|
|
126
|
+
{ name: "DETERMINISTIC", pass: det, detail: "same data → same cliffs" },
|
|
127
|
+
{ name: "ABSTAINS-WHEN-THIN", pass: abstains, detail: "too few measurements → no claim" },
|
|
128
|
+
{ name: "TOTAL", pass: total, detail: "empty / null / no-dims never throws" },
|
|
129
|
+
];
|
|
130
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=cliff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliff.js","sourceRoot":"","sources":["../src/cliff.ts"],"names":[],"mappings":"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"}
|