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,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACHIEVABILITY — is the target you WANT even reachable with the knobs you have? Every optimizer chases a
|
|
3
|
+
* better number; none tell you when you're chasing one that the physics can't deliver. If your goal is
|
|
4
|
+
* "yield ≥ 95%" but the best these variables can ever produce is ~88%, you can tune forever and never get
|
|
5
|
+
* there — the answer isn't a better setting, it's a new lever (a variable you aren't yet controlling) or a
|
|
6
|
+
* relaxed target. Knowing that EARLY saves weeks of doomed experiments.
|
|
7
|
+
*
|
|
8
|
+
* ACHIEVABILITY estimates the optimistic CEILING of your response over the whole variable space — a
|
|
9
|
+
* Lipschitz (smoothness) upper bound built from your own measurements — and compares your target against it.
|
|
10
|
+
* Target already met → achieved. Target below the ceiling → reachable, keep going. Target ABOVE even the
|
|
11
|
+
* optimistic ceiling → likely out of reach with these variables; stop tuning, change the experiment.
|
|
12
|
+
*
|
|
13
|
+
* Honest by construction (DIAKRISIS): the ceiling is an OPTIMISTIC estimate from the smoothness of your data,
|
|
14
|
+
* so "unreachable" means "above what your measurements can justify" — not a theorem of impossibility (a sharp
|
|
15
|
+
* spike between samples could exceed it; that's exactly what exploration is for). It abstains when data is
|
|
16
|
+
* thin, and it never cries "impossible" for a target your data already brackets.
|
|
17
|
+
*/
|
|
18
|
+
import { type Space } from "./space.js";
|
|
19
|
+
import { type Observation, type Goal } from "./engine.js";
|
|
20
|
+
export interface AchievabilityReport {
|
|
21
|
+
target: number;
|
|
22
|
+
bestSoFar: number;
|
|
23
|
+
ceiling: number;
|
|
24
|
+
feasibility: number;
|
|
25
|
+
verdict: "achieved" | "reachable" | "unreachable" | "unknown";
|
|
26
|
+
note: string;
|
|
27
|
+
}
|
|
28
|
+
/** Estimate whether `target` is reachable for this objective given the measurements so far. */
|
|
29
|
+
export declare function assessAchievability(obs: ReadonlyArray<Observation>, space: Space, target: number, goal?: Goal): AchievabilityReport;
|
|
30
|
+
export declare function achievabilityGauntlet(): {
|
|
31
|
+
score: 0 | 100;
|
|
32
|
+
checks: Array<{
|
|
33
|
+
name: string;
|
|
34
|
+
pass: boolean;
|
|
35
|
+
detail: string;
|
|
36
|
+
}>;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=achievability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"achievability.d.ts","sourceRoot":"","sources":["../src/achievability.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,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,+FAA+F;AAC/F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,IAAiB,GAAG,mBAAmB,CA8C/I;AAKD,wBAAgB,qBAAqB,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,CA8C1H"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
const HB = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];
|
|
2
|
+
const hal = (k, b) => { let f = 1, r = 0, i = k + 1; while (i > 0) {
|
|
3
|
+
f /= b;
|
|
4
|
+
r += f * (i % b);
|
|
5
|
+
i = Math.floor(i / b);
|
|
6
|
+
} return r; };
|
|
7
|
+
const dst = (a, c) => { let s = 0; for (let i = 0; i < a.length; i++)
|
|
8
|
+
s += (a[i] - c[i]) ** 2; return Math.sqrt(s); };
|
|
9
|
+
/** Estimate whether `target` is reachable for this objective given the measurements so far. */
|
|
10
|
+
export function assessAchievability(obs, space, target, goal = "maximize") {
|
|
11
|
+
const dims = space?.dims ?? [];
|
|
12
|
+
const D = dims.length;
|
|
13
|
+
const hist = (obs ?? []).filter((o) => o && o.experiment && Number.isFinite(o.value));
|
|
14
|
+
const n = hist.length;
|
|
15
|
+
if (D === 0 || n < 6 || !Number.isFinite(target)) {
|
|
16
|
+
return { target, bestSoFar: NaN, ceiling: NaN, feasibility: 0, verdict: "unknown", note: `need ≈6+ measurements to estimate the ceiling (have ${n})` };
|
|
17
|
+
}
|
|
18
|
+
const sgn = goal === "minimize" ? -1 : 1;
|
|
19
|
+
const lo = (i) => dims[i].min ?? 0, hi = (i) => dims[i].max ?? 1;
|
|
20
|
+
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)); });
|
|
21
|
+
const npts = hist.map((o) => toN(o.experiment));
|
|
22
|
+
const vals = hist.map((o) => sgn * o.value); // work in "bigger is better" space
|
|
23
|
+
const bestSigned = Math.max(...vals);
|
|
24
|
+
// Lipschitz constant from the data (largest value-change per unit distance)
|
|
25
|
+
let L = 0;
|
|
26
|
+
for (let i = 0; i < npts.length; i++)
|
|
27
|
+
for (let j = i + 1; j < npts.length; j++) {
|
|
28
|
+
const dx = dst(npts[i], npts[j]);
|
|
29
|
+
if (dx > 1e-9)
|
|
30
|
+
L = Math.max(L, Math.abs(vals[i] - vals[j]) / dx);
|
|
31
|
+
}
|
|
32
|
+
L = (L > 0 ? L : 1e-6) * 1.1;
|
|
33
|
+
// optimistic ceiling: max over a dense space-filling grid of the Lipschitz upper bound min_i(v_i + L·dist)
|
|
34
|
+
let ceilingSigned = bestSigned;
|
|
35
|
+
for (let k = 0; k < 1500; k++) {
|
|
36
|
+
const c = [];
|
|
37
|
+
for (let d = 0; d < D; d++)
|
|
38
|
+
c.push(hal(k * 5 + 1, HB[d % HB.length]));
|
|
39
|
+
let ub = Infinity;
|
|
40
|
+
for (let i = 0; i < npts.length; i++) {
|
|
41
|
+
const b = vals[i] + L * dst(c, npts[i]);
|
|
42
|
+
if (b < ub)
|
|
43
|
+
ub = b;
|
|
44
|
+
}
|
|
45
|
+
if (ub > ceilingSigned)
|
|
46
|
+
ceilingSigned = ub;
|
|
47
|
+
}
|
|
48
|
+
const bestSoFar = sgn * bestSigned;
|
|
49
|
+
const ceiling = sgn * ceilingSigned;
|
|
50
|
+
const targetSigned = sgn * target;
|
|
51
|
+
const span = Math.max(1e-9, ceilingSigned - bestSigned);
|
|
52
|
+
const feasibility = Math.max(0, Math.min(1, (ceilingSigned - targetSigned) / span)); // 1 at target=best, 0 at target=ceiling, <0→unreachable
|
|
53
|
+
let verdict;
|
|
54
|
+
let note;
|
|
55
|
+
const cmp = goal === "minimize" ? "≤" : "≥";
|
|
56
|
+
const fmt = (x) => (Math.abs(x) < 1 ? +x.toFixed(3) : +x.toFixed(2));
|
|
57
|
+
if (targetSigned <= bestSigned + 1e-9) {
|
|
58
|
+
verdict = "achieved";
|
|
59
|
+
note = `target ${cmp} ${fmt(target)} is already met (best so far ${fmt(bestSoFar)}) — you can stop or push further`;
|
|
60
|
+
}
|
|
61
|
+
else if (targetSigned <= ceilingSigned) {
|
|
62
|
+
verdict = "reachable";
|
|
63
|
+
note = `target ${fmt(target)} is below the estimated ceiling (~${fmt(ceiling)}) — reachable; keep optimizing (${(feasibility * 100).toFixed(0)}% headroom remaining)`;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
verdict = "unreachable";
|
|
67
|
+
note = `target ${fmt(target)} is ABOVE the optimistic ceiling (~${fmt(ceiling)}) these variables can reach — likely out of reach; add a new lever or relax the target`;
|
|
68
|
+
}
|
|
69
|
+
return { target, bestSoFar: +fmt(bestSoFar), ceiling: +fmt(ceiling), feasibility: +feasibility.toFixed(3), verdict, note };
|
|
70
|
+
}
|
|
71
|
+
// ── gauntlet ──────────────────────────────────────────────────────────────────
|
|
72
|
+
import { lcg } from "./space.js";
|
|
73
|
+
export function achievabilityGauntlet() {
|
|
74
|
+
const space = { dims: [{ name: "x", type: "real", min: 0, max: 1 }, { name: "y", type: "real", min: 0, max: 1 }] };
|
|
75
|
+
const TRUE_MAX = 1.0;
|
|
76
|
+
const f = (x, y) => Math.exp(-(((x - 0.5) ** 2) + ((y - 0.5) ** 2)) / 0.08); // peak 1.0 at (0.5,0.5)
|
|
77
|
+
const rnd = lcg(17);
|
|
78
|
+
const obs = [];
|
|
79
|
+
for (let i = 0; i < 80; i++) {
|
|
80
|
+
const x = rnd(), y = rnd();
|
|
81
|
+
obs.push({ experiment: { x, y }, value: f(x, y) });
|
|
82
|
+
}
|
|
83
|
+
// make sure the optimum region is sampled so bestSoFar is near the true max
|
|
84
|
+
for (let i = 0; i < 8; i++) {
|
|
85
|
+
const x = 0.5 + (rnd() - 0.5) * 0.1, y = 0.5 + (rnd() - 0.5) * 0.1;
|
|
86
|
+
obs.push({ experiment: { x, y }, value: f(x, y) });
|
|
87
|
+
}
|
|
88
|
+
const achieved = assessAchievability(obs, space, 0.5, "maximize"); // below best → achieved
|
|
89
|
+
const reachable = assessAchievability(obs, space, 0.97, "maximize"); // just under the true max → reachable, NOT impossible
|
|
90
|
+
const unreach = assessAchievability(obs, space, 1.6, "maximize"); // well above the max → unreachable
|
|
91
|
+
const achievedOk = achieved.verdict === "achieved";
|
|
92
|
+
const reachableOk = reachable.verdict !== "unreachable"; // must NOT falsely cry impossible below the real max
|
|
93
|
+
const unreachOk = unreach.verdict === "unreachable" && unreach.ceiling < 1.6;
|
|
94
|
+
// higher target → lower feasibility
|
|
95
|
+
const fa = assessAchievability(obs, space, 0.9, "maximize").feasibility;
|
|
96
|
+
const fb = assessAchievability(obs, space, 1.1, "maximize").feasibility;
|
|
97
|
+
const monotone = fa >= fb;
|
|
98
|
+
// MINIMIZE: target floor that's unreachably low
|
|
99
|
+
const g = (x, y) => 1 - f(x, y); // min 0.0 at (0.5,0.5)
|
|
100
|
+
const rnd2 = lcg(5);
|
|
101
|
+
const obsMin = [];
|
|
102
|
+
for (let i = 0; i < 88; i++) {
|
|
103
|
+
const x = rnd2(), y = rnd2();
|
|
104
|
+
obsMin.push({ experiment: { x, y }, value: g(x, y) });
|
|
105
|
+
}
|
|
106
|
+
for (let i = 0; i < 8; i++) {
|
|
107
|
+
const x = 0.5 + (rnd2() - 0.5) * 0.1, y = 0.5 + (rnd2() - 0.5) * 0.1;
|
|
108
|
+
obsMin.push({ experiment: { x, y }, value: g(x, y) });
|
|
109
|
+
}
|
|
110
|
+
const minUnreach = assessAchievability(obsMin, space, -0.5, "minimize"); // can't get below 0 → −0.5 unreachable
|
|
111
|
+
const minReach = assessAchievability(obsMin, space, 0.1, "minimize"); // 0.1 is reachable
|
|
112
|
+
const minOk = minUnreach.verdict === "unreachable" && minReach.verdict !== "unreachable";
|
|
113
|
+
const det = JSON.stringify(assessAchievability(obs, space, 1.6, "maximize")) === JSON.stringify(assessAchievability(obs, space, 1.6, "maximize"));
|
|
114
|
+
const abstains = assessAchievability(obs.slice(0, 4), space, 0.5, "maximize").verdict === "unknown";
|
|
115
|
+
const total = (() => { try {
|
|
116
|
+
assessAchievability(null, space, 1);
|
|
117
|
+
assessAchievability([], space, NaN);
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
} })();
|
|
123
|
+
const checks = [
|
|
124
|
+
{ name: "ACHIEVED-WHEN-MET", pass: achievedOk, detail: `target below best → achieved (best ${achieved.bestSoFar})` },
|
|
125
|
+
{ name: "REACHABLE-BELOW-MAX", pass: reachableOk, detail: `0.97 < true max ${TRUE_MAX} is NOT called impossible (verdict ${reachable.verdict}, ceiling ${reachable.ceiling})` },
|
|
126
|
+
{ name: "UNREACHABLE-ABOVE-MAX", pass: unreachOk, detail: `1.6 > ceiling ${unreach.ceiling} → unreachable (add a lever)` },
|
|
127
|
+
{ name: "HIGHER-TARGET-LOWER-FEASIBILITY", pass: monotone, detail: `feasibility drops as the target rises (${fa.toFixed(2)} → ${fb.toFixed(2)})` },
|
|
128
|
+
{ name: "MINIMIZE-DIRECTION", pass: minOk, detail: `floor 0 → −0.5 unreachable, 0.1 reachable` },
|
|
129
|
+
{ name: "DETERMINISTIC", pass: det, detail: "same data+target → same verdict" },
|
|
130
|
+
{ name: "ABSTAINS-WHEN-THIN", pass: abstains, detail: "too few measurements → unknown" },
|
|
131
|
+
{ name: "TOTAL", pass: total, detail: "null / empty / NaN target never throws" },
|
|
132
|
+
];
|
|
133
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=achievability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"achievability.js","sourceRoot":"","sources":["../src/achievability.ts"],"names":[],"mappings":"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"}
|
package/dist/aegis.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🛡 AEGIS — the Self-Aware Engine. Every optimizer on earth chases the single highest number. AEGIS refuses
|
|
3
|
+
* to. A tall spike perched on a cliff edge is a trap: it scores beautifully in the lab and fails the morning
|
|
4
|
+
* the temperature drifts 1°, the reagent batch changes, the operator's hand wobbles. AEGIS optimizes for the
|
|
5
|
+
* value that SURVIVES the real world — it watches its own search, learns where the cliffs and fragile spikes
|
|
6
|
+
* are, and deliberately steers toward a broad, stable optimum, even when a more fragile setting scores
|
|
7
|
+
* slightly higher.
|
|
8
|
+
*
|
|
9
|
+
* This is what makes it "self-aware": the same diagnostics Melete reports to humans (local steepness, cliff
|
|
10
|
+
* proximity, robustness) are fed back IN to drive the engine. Its acquisition isn't "highest predicted
|
|
11
|
+
* value" — it's "highest predicted value that also holds when you nudge it." And its final answer isn't the
|
|
12
|
+
* raw maximum, it's the best ROBUST optimum. No competitor's optimizer does this: they hand you the spike,
|
|
13
|
+
* then act surprised when it doesn't reproduce.
|
|
14
|
+
*
|
|
15
|
+
* Honest by construction (DIAKRISIS): robustness is estimated from your real data — how much the value
|
|
16
|
+
* changes for a small move, measured from the nearest measurements — not assumed. AEGIS trades a little raw
|
|
17
|
+
* peak height for a lot of stability; if you genuinely want the absolute spike, a plain maximiser still
|
|
18
|
+
* exists. The gauntlet proves it head-to-head: on a tall-fragile-spike-vs-broad-stable-peak landscape, AEGIS
|
|
19
|
+
* returns the setting that survives a real-world wobble while a plain maximiser returns the one that collapses.
|
|
20
|
+
*/
|
|
21
|
+
import { type Space, type Experiment } from "./space.js";
|
|
22
|
+
import { type Observation, type Goal } from "./engine.js";
|
|
23
|
+
export interface AegisResult {
|
|
24
|
+
best: Observation;
|
|
25
|
+
rawBest: Observation;
|
|
26
|
+
robustnessOfBest: number;
|
|
27
|
+
tradedHeight: number;
|
|
28
|
+
evaluations: number;
|
|
29
|
+
obs: Observation[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Run a self-aware discovery: search with a robustness-weighted acquisition and return the best STABLE
|
|
33
|
+
* optimum (not the fragile spike). `robustWeight` 0 = pure height (a normal maximiser), 1 = strongly favour
|
|
34
|
+
* flat regions.
|
|
35
|
+
*/
|
|
36
|
+
export declare function aegisDiscover(opts: {
|
|
37
|
+
space: Space;
|
|
38
|
+
oracle: (e: Experiment) => number;
|
|
39
|
+
budget: number;
|
|
40
|
+
goal?: Goal;
|
|
41
|
+
seed?: number;
|
|
42
|
+
robustWeight?: number;
|
|
43
|
+
}): AegisResult;
|
|
44
|
+
export declare function aegisGauntlet(): {
|
|
45
|
+
score: 0 | 100;
|
|
46
|
+
checks: Array<{
|
|
47
|
+
name: string;
|
|
48
|
+
pass: boolean;
|
|
49
|
+
detail: string;
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=aegis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aegis.d.ts","sourceRoot":"","sources":["../src/aegis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAO,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAM1D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,WAAW,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CA4DvK;AAGD,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,CAmClH"}
|
package/dist/aegis.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🛡 AEGIS — the Self-Aware Engine. Every optimizer on earth chases the single highest number. AEGIS refuses
|
|
3
|
+
* to. A tall spike perched on a cliff edge is a trap: it scores beautifully in the lab and fails the morning
|
|
4
|
+
* the temperature drifts 1°, the reagent batch changes, the operator's hand wobbles. AEGIS optimizes for the
|
|
5
|
+
* value that SURVIVES the real world — it watches its own search, learns where the cliffs and fragile spikes
|
|
6
|
+
* are, and deliberately steers toward a broad, stable optimum, even when a more fragile setting scores
|
|
7
|
+
* slightly higher.
|
|
8
|
+
*
|
|
9
|
+
* This is what makes it "self-aware": the same diagnostics Melete reports to humans (local steepness, cliff
|
|
10
|
+
* proximity, robustness) are fed back IN to drive the engine. Its acquisition isn't "highest predicted
|
|
11
|
+
* value" — it's "highest predicted value that also holds when you nudge it." And its final answer isn't the
|
|
12
|
+
* raw maximum, it's the best ROBUST optimum. No competitor's optimizer does this: they hand you the spike,
|
|
13
|
+
* then act surprised when it doesn't reproduce.
|
|
14
|
+
*
|
|
15
|
+
* Honest by construction (DIAKRISIS): robustness is estimated from your real data — how much the value
|
|
16
|
+
* changes for a small move, measured from the nearest measurements — not assumed. AEGIS trades a little raw
|
|
17
|
+
* peak height for a lot of stability; if you genuinely want the absolute spike, a plain maximiser still
|
|
18
|
+
* exists. The gauntlet proves it head-to-head: on a tall-fragile-spike-vs-broad-stable-peak landscape, AEGIS
|
|
19
|
+
* returns the setting that survives a real-world wobble while a plain maximiser returns the one that collapses.
|
|
20
|
+
*/
|
|
21
|
+
import { lcg } from "./space.js";
|
|
22
|
+
const HB = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];
|
|
23
|
+
const hal = (k, b) => { let f = 1, r = 0, i = k + 1; while (i > 0) {
|
|
24
|
+
f /= b;
|
|
25
|
+
r += f * (i % b);
|
|
26
|
+
i = Math.floor(i / b);
|
|
27
|
+
} return r; };
|
|
28
|
+
const dst = (a, c) => { let s = 0; for (let i = 0; i < a.length; i++)
|
|
29
|
+
s += (a[i] - c[i]) ** 2; return Math.sqrt(s); };
|
|
30
|
+
/**
|
|
31
|
+
* Run a self-aware discovery: search with a robustness-weighted acquisition and return the best STABLE
|
|
32
|
+
* optimum (not the fragile spike). `robustWeight` 0 = pure height (a normal maximiser), 1 = strongly favour
|
|
33
|
+
* flat regions.
|
|
34
|
+
*/
|
|
35
|
+
export function aegisDiscover(opts) {
|
|
36
|
+
const goal = opts.goal ?? "maximize";
|
|
37
|
+
const sgn = goal === "minimize" ? -1 : 1;
|
|
38
|
+
const budget = Math.max(2, Math.floor(opts.budget));
|
|
39
|
+
const seed = (opts.seed ?? 1) | 0;
|
|
40
|
+
const rw = Math.max(0, Math.min(1, opts.robustWeight ?? 0.6));
|
|
41
|
+
const dims = opts.space.dims, D = dims.length;
|
|
42
|
+
const lo = (i) => dims[i].min ?? 0, hi = (i) => dims[i].max ?? 1;
|
|
43
|
+
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)); });
|
|
44
|
+
const toE = (v) => { const e = {}; dims.forEach((d, i) => { let x = lo(i) + v[i] * (hi(i) - lo(i)); if (d.type === "int")
|
|
45
|
+
x = Math.round(x); e[d.name] = x; }); return e; };
|
|
46
|
+
const obs = [];
|
|
47
|
+
const npts = [];
|
|
48
|
+
const vals = [];
|
|
49
|
+
const rnd = lcg((seed >>> 0) || 1);
|
|
50
|
+
const take = (p) => { const e = toE(p); const v = opts.oracle(e); obs.push({ experiment: e, value: v }); npts.push(p); vals.push(sgn * v); };
|
|
51
|
+
// local steepness at p: the biggest value-change per unit distance among nearby measurements (∞-fragile)
|
|
52
|
+
const steepness = (p) => {
|
|
53
|
+
let g = 0, any = false;
|
|
54
|
+
for (let i = 0; i < npts.length; i++) {
|
|
55
|
+
const d = dst(p, npts[i]);
|
|
56
|
+
if (d > 1e-6 && d < 0.28) {
|
|
57
|
+
any = true;
|
|
58
|
+
const s = Math.abs(vals[i] - nearestVal(p)) / d;
|
|
59
|
+
if (s > g)
|
|
60
|
+
g = s;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return any ? g : 0;
|
|
64
|
+
};
|
|
65
|
+
const nearestVal = (p) => { let dm = Infinity, v = 0; for (let i = 0; i < npts.length; i++) {
|
|
66
|
+
const d = dst(p, npts[i]);
|
|
67
|
+
if (d < dm) {
|
|
68
|
+
dm = d;
|
|
69
|
+
v = vals[i];
|
|
70
|
+
}
|
|
71
|
+
} return v; };
|
|
72
|
+
// seed: a small space-filling burst so we can see the terrain before judging it
|
|
73
|
+
const seeds = Math.min(budget, Math.max(4, Math.round(budget * 0.4)));
|
|
74
|
+
for (let k = 0; k < seeds; k++) {
|
|
75
|
+
const p = [];
|
|
76
|
+
for (let d = 0; d < D; d++)
|
|
77
|
+
p.push(hal(k * 5 + 1, HB[d % HB.length]));
|
|
78
|
+
take(p);
|
|
79
|
+
}
|
|
80
|
+
while (obs.length < budget) {
|
|
81
|
+
// value model: optimistic Lipschitz upper bound
|
|
82
|
+
let L = 0;
|
|
83
|
+
for (let i = 0; i < npts.length; i++)
|
|
84
|
+
for (let j = i + 1; j < npts.length; j++) {
|
|
85
|
+
const dx = dst(npts[i], npts[j]);
|
|
86
|
+
if (dx > 1e-9)
|
|
87
|
+
L = Math.max(L, Math.abs(vals[i] - vals[j]) / dx);
|
|
88
|
+
}
|
|
89
|
+
L = (L > 0 ? L : 1e-6) * 1.15;
|
|
90
|
+
const vRange = Math.max(1e-9, Math.max(...vals) - Math.min(...vals));
|
|
91
|
+
const bestRobust = robustPick();
|
|
92
|
+
const cands = [];
|
|
93
|
+
for (let k = 0; k < 600; k++) {
|
|
94
|
+
const c = [];
|
|
95
|
+
for (let d = 0; d < D; d++)
|
|
96
|
+
c.push(hal(k * 7 + (obs.length % 5) + 1, HB[d % HB.length]));
|
|
97
|
+
cands.push(c);
|
|
98
|
+
}
|
|
99
|
+
if (bestRobust)
|
|
100
|
+
for (let k = 0; k < 120; k++)
|
|
101
|
+
cands.push(bestRobust.p.map((x) => Math.max(0, Math.min(1, x + (rnd() - 0.5) * 0.2))));
|
|
102
|
+
let pick = null, pickScore = -Infinity;
|
|
103
|
+
for (const c of cands) {
|
|
104
|
+
let ub = Infinity;
|
|
105
|
+
for (let i = 0; i < npts.length; i++) {
|
|
106
|
+
const b = vals[i] + L * dst(c, npts[i]);
|
|
107
|
+
if (b < ub)
|
|
108
|
+
ub = b;
|
|
109
|
+
}
|
|
110
|
+
const flat = 1 / (1 + (steepness(c) / vRange) * 2); // 1 = flat/robust, →0 = on a steep wall
|
|
111
|
+
const score = ub * (1 - rw + rw * flat); // robustness-weighted acquisition
|
|
112
|
+
if (score > pickScore) {
|
|
113
|
+
pickScore = score;
|
|
114
|
+
pick = c;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
take(pick ?? cands[0]);
|
|
118
|
+
}
|
|
119
|
+
// final selection: the best ROBUST optimum (value × local flatness), not the raw spike
|
|
120
|
+
function robustPick() {
|
|
121
|
+
if (!npts.length)
|
|
122
|
+
return null;
|
|
123
|
+
const vRange = Math.max(1e-9, Math.max(...vals) - Math.min(...vals));
|
|
124
|
+
let bi = 0, bs = -Infinity;
|
|
125
|
+
for (let i = 0; i < npts.length; i++) {
|
|
126
|
+
const flat = 1 / (1 + (steepness(npts[i]) / vRange) * 2);
|
|
127
|
+
const s = vals[i] * (1 - rw) + vals[i] * rw * flat;
|
|
128
|
+
if (s > bs) {
|
|
129
|
+
bs = s;
|
|
130
|
+
bi = i;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return { i: bi, p: npts[bi], flat: 1 / (1 + (steepness(npts[bi]) / vRange) * 2) };
|
|
134
|
+
}
|
|
135
|
+
const rp = robustPick();
|
|
136
|
+
const vRange = Math.max(1e-9, Math.max(...vals) - Math.min(...vals));
|
|
137
|
+
let rawI = 0;
|
|
138
|
+
for (let i = 1; i < vals.length; i++)
|
|
139
|
+
if (vals[i] > vals[rawI])
|
|
140
|
+
rawI = i;
|
|
141
|
+
return {
|
|
142
|
+
best: obs[rp.i], rawBest: obs[rawI],
|
|
143
|
+
robustnessOfBest: +(1 / (1 + (steepness(npts[rp.i]) / vRange) * 2)).toFixed(3),
|
|
144
|
+
tradedHeight: +(sgn * (obs[rawI].value - obs[rp.i].value)).toFixed(4),
|
|
145
|
+
evaluations: obs.length, obs,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// ── gauntlet ──────────────────────────────────────────────────────────────────
|
|
149
|
+
export function aegisGauntlet() {
|
|
150
|
+
const space = { dims: [{ name: "x", type: "real", min: 0, max: 1 }, { name: "y", type: "real", min: 0, max: 1 }] };
|
|
151
|
+
// a TALL FRAGILE spike at (0.8,0.8) (collapses if you move a little) + a BROAD STABLE peak at (0.3,0.3)
|
|
152
|
+
const fragile = (x, y) => 1.05 * Math.exp(-(((x - 0.8) ** 2) + ((y - 0.8) ** 2)) / 0.03);
|
|
153
|
+
const stable = (x, y) => 0.9 * Math.exp(-(((x - 0.3) ** 2) + ((y - 0.3) ** 2)) / 0.25);
|
|
154
|
+
const f = (x, y) => Math.max(fragile(x, y), stable(x, y));
|
|
155
|
+
const aegis = aegisDiscover({ space, oracle: (e) => f(e.x ?? 0, e.y ?? 0), budget: 60, goal: "maximize", seed: 7, robustWeight: 0.75 });
|
|
156
|
+
const greedy = aegisDiscover({ space, oracle: (e) => f(e.x ?? 0, e.y ?? 0), budget: 60, goal: "maximize", seed: 7, robustWeight: 0 }); // rw=0 → pure height, no robustness
|
|
157
|
+
// perturbation-survival: nudge the chosen setting and see how much value is retained (worst over a ring)
|
|
158
|
+
const survives = (x, y) => { let worst = Infinity; for (let a = 0; a < 8; a++) {
|
|
159
|
+
const th = a / 8 * 2 * Math.PI;
|
|
160
|
+
worst = Math.min(worst, f(x + 0.14 * Math.cos(th), y + 0.14 * Math.sin(th)));
|
|
161
|
+
} return worst; };
|
|
162
|
+
const aegisSurvival = survives(aegis.best.experiment.x ?? 0, aegis.best.experiment.y ?? 0);
|
|
163
|
+
const spikeSurvival = survives(0.8, 0.8); // the fragile GLOBAL maximum's survival
|
|
164
|
+
const choosesStable = Math.abs((aegis.best.experiment.x ?? 0) - 0.3) < 0.18 && Math.abs((aegis.best.experiment.y ?? 0) - 0.3) < 0.18;
|
|
165
|
+
const answerIsRobust = aegisSurvival > 0.8; // AEGIS's pick barely moves under a real wobble
|
|
166
|
+
const beatsGlobalSpike = aegisSurvival > spikeSurvival + 0.2; // and it's far more stable than the tall spike
|
|
167
|
+
const weightHelps = survives(aegis.best.experiment.x ?? 0, aegis.best.experiment.y ?? 0) >= survives(greedy.best.experiment.x ?? 0, greedy.best.experiment.y ?? 0) - 1e-9; // turning robustness ON never hurts stability
|
|
168
|
+
const stillHigh = aegis.best.value > 0.8; // it didn't sacrifice much height
|
|
169
|
+
const reportsTrade = aegis.tradedHeight >= 0 && aegis.robustnessOfBest > 0.3;
|
|
170
|
+
const det = (() => { const a = aegisDiscover({ space, oracle: (e) => f(e.x ?? 0, e.y ?? 0), budget: 40, seed: 7, robustWeight: 0.75 }); const b = aegisDiscover({ space, oracle: (e) => f(e.x ?? 0, e.y ?? 0), budget: 40, seed: 7, robustWeight: 0.75 }); return a.best.value === b.best.value && JSON.stringify(a.best.experiment) === JSON.stringify(b.best.experiment); })();
|
|
171
|
+
const total = (() => { try {
|
|
172
|
+
aegisDiscover({ space, oracle: () => 0, budget: 3 });
|
|
173
|
+
aegisDiscover({ space: { dims: [{ name: "x", type: "real", min: 0, max: 1 }] }, oracle: () => 1, budget: 5 });
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return false;
|
|
178
|
+
} })();
|
|
179
|
+
const checks = [
|
|
180
|
+
{ name: "CHOOSES-STABLE-OPTIMUM", pass: choosesStable, detail: `AEGIS → (${(aegis.best.experiment.x ?? 0).toFixed(2)}, ${(aegis.best.experiment.y ?? 0).toFixed(2)}) ≈ the broad stable peak (0.3,0.3)` },
|
|
181
|
+
{ name: "ANSWER-SURVIVES-WOBBLE", pass: answerIsRobust, detail: `under a 0.14 nudge AEGIS's pick still scores ${aegisSurvival.toFixed(2)} (≥0.8)` },
|
|
182
|
+
{ name: "BEATS-THE-FRAGILE-GLOBAL-MAX", pass: beatsGlobalSpike, detail: `${aegisSurvival.toFixed(2)} survival vs the tall spike's ${spikeSurvival.toFixed(2)} — robustness ≫ raw height` },
|
|
183
|
+
{ name: "ROBUSTNESS-KNOB-NEVER-HURTS", pass: weightHelps, detail: "turning robustness ON never lowers the answer's stability" },
|
|
184
|
+
{ name: "DIDNT-SACRIFICE-MUCH-HEIGHT", pass: stillHigh, detail: `AEGIS best still scores ${aegis.best.value.toFixed(3)} (≥0.8)` },
|
|
185
|
+
{ name: "REPORTS-THE-TRADE", pass: reportsTrade, detail: `robustness of the chosen optimum ${aegis.robustnessOfBest}` },
|
|
186
|
+
{ name: "DETERMINISTIC", pass: det, detail: "same seed → same robust optimum" },
|
|
187
|
+
{ name: "TOTAL", pass: total, detail: "tiny budget / 1-D never throws" },
|
|
188
|
+
];
|
|
189
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=aegis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aegis.js","sourceRoot":"","sources":["../src/aegis.ts"],"names":[],"mappings":"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"}
|
package/dist/arms.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* STRATEGY ARMS — interchangeable per-step experiment proposers for the portfolio brain.
|
|
3
|
+
*
|
|
4
|
+
* The No-Free-Lunch theorem is the production reality: no single optimiser is best across all landscapes
|
|
5
|
+
* (smooth, rugged, low-D, high-D). So Melete does not bet on one algorithm — it runs a PORTFOLIO of arms
|
|
6
|
+
* and lets a bandit (portfolio.ts) allocate each expensive experiment to whichever arm is winning ON THIS
|
|
7
|
+
* problem. An arm is a stateful proposer: given the history so far, propose the next experiment.
|
|
8
|
+
*
|
|
9
|
+
* Arms shipped:
|
|
10
|
+
* • kernel-ucb — Gaussian-kernel surrogate + UCB (the strong low-D Bayesian-lite core)
|
|
11
|
+
* • cmaes — a (1+1) self-adaptive evolution strategy (robust in higher-D and on rugged surfaces,
|
|
12
|
+
* where the kernel surrogate degrades — fixes the high-D failure of a pure-BO engine)
|
|
13
|
+
* • resonance — the wave-interference field (a diversity/exploration hedge; earns budget only when it
|
|
14
|
+
* actually helps — honest: it is not strong alone, but a portfolio loses nothing by
|
|
15
|
+
* holding a hedge that the bandit can ignore)
|
|
16
|
+
* • random — uniform exploration (the escape hatch / baseline)
|
|
17
|
+
*
|
|
18
|
+
* Each arm is created fresh per run via a factory (closure-held state), so a discovery is deterministic
|
|
19
|
+
* and reproducible. Proposers avoid already-seen experiments.
|
|
20
|
+
*/
|
|
21
|
+
import { type Space, type Experiment } from "./space.js";
|
|
22
|
+
import { type Goal, type Observation } from "./engine.js";
|
|
23
|
+
export interface ArmContext {
|
|
24
|
+
space: Space;
|
|
25
|
+
obs: Observation[];
|
|
26
|
+
t: number;
|
|
27
|
+
budget: number;
|
|
28
|
+
rnd: () => number;
|
|
29
|
+
goal: Goal;
|
|
30
|
+
}
|
|
31
|
+
export interface Arm {
|
|
32
|
+
name: string;
|
|
33
|
+
propose: (ctx: ArmContext) => Experiment;
|
|
34
|
+
}
|
|
35
|
+
/** kernel-UCB: dense grid + local cloud candidates; pick argmax(surrogate mean + annealed·uncertainty). */
|
|
36
|
+
export declare function armKernelUCB(bandwidth?: number, kappa0?: number): Arm;
|
|
37
|
+
/** (1+1) self-adaptive evolution strategy — sample N(best, σ); σ grows when stuck, shrinks on success. */
|
|
38
|
+
export declare function armCMAES(sigma0?: number): Arm;
|
|
39
|
+
/** Wave-interference field (diversity hedge). Honest: weak alone; the bandit only funds it when it helps. */
|
|
40
|
+
export declare function armResonance(sigma?: number, k0?: number, rho?: number): Arm;
|
|
41
|
+
export declare function armRandom(): Arm;
|
|
42
|
+
/** Real GP surrogate + Expected Improvement — the gold-standard sample-efficient acquisition. */
|
|
43
|
+
export declare function armGP(lengthscale?: number, noise?: number): Arm;
|
|
44
|
+
/** Simulated annealing arm — temperature-annealed random walk from the best; escapes via occasional far jumps. */
|
|
45
|
+
export declare function armSimAnneal(temp0?: number): Arm;
|
|
46
|
+
/** Trust-region arm — coordinate steps within a region around the best; region tightens as the run progresses. */
|
|
47
|
+
export declare function armTrustRegion(radius0?: number): Arm;
|
|
48
|
+
/** Maximin space-filler — propose the point FARTHEST from every prior experiment. Pure global coverage;
|
|
49
|
+
* measured to materially help on rugged/multimodal surfaces (finds un-sampled basins the others miss). */
|
|
50
|
+
export declare function armMaximin(pool?: number): Arm;
|
|
51
|
+
/** Basin-hopping — restart from a fresh random anchor every few calls, then refine locally around it.
|
|
52
|
+
* Escapes the global-best trap by deliberately exploring OTHER basins of a multimodal surface. */
|
|
53
|
+
export declare function armBasinHop(restartEvery?: number, radius?: number): Arm;
|
|
54
|
+
/** Differential Evolution arm — DE/rand/1: combine three past experiments (a + F·(b−c)) + crossover with
|
|
55
|
+
* the best. A population-based global optimiser that is strong on rugged/multimodal surfaces. */
|
|
56
|
+
export declare function armDiffEvolution(F?: number, CR?: number): Arm;
|
|
57
|
+
/** The production portfolio. Curated by MEASURED robustness (see bench.robustnessBench): the strong
|
|
58
|
+
* convergers (gp, cmaes, kernel-ucb) + a local refiner (trust-region) + escape/diversity (anneal, random).
|
|
59
|
+
* resonance stays available as an arm but is not in the default set (measured weakest; keep the bandit lean). */
|
|
60
|
+
export declare function defaultArms(): Arm[];
|
|
61
|
+
export declare function allArms(): Arm[];
|
|
62
|
+
export declare function armsGauntlet(): {
|
|
63
|
+
score: 0 | 100;
|
|
64
|
+
checks: Array<{
|
|
65
|
+
name: string;
|
|
66
|
+
pass: boolean;
|
|
67
|
+
detail: string;
|
|
68
|
+
}>;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=arms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arms.d.ts","sourceRoot":"","sources":["../src/arms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAA4D,MAAM,YAAY,CAAC;AACnH,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,UAAU;IAAG,KAAK,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,WAAW,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE;AAC1H,MAAM,WAAW,GAAG;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,UAAU,CAAA;CAAE;AAM/E,2GAA2G;AAC3G,wBAAgB,YAAY,CAAC,SAAS,SAAQ,EAAE,MAAM,SAAM,GAAG,GAAG,CAqBjE;AAED,0GAA0G;AAC1G,wBAAgB,QAAQ,CAAC,MAAM,SAAM,GAAG,GAAG,CAgB1C;AAED,6GAA6G;AAC7G,wBAAgB,YAAY,CAAC,KAAK,SAAO,EAAE,EAAE,SAAM,EAAE,GAAG,SAAO,GAAG,GAAG,CAuBpE;AAED,wBAAgB,SAAS,IAAI,GAAG,CAE/B;AAgBD,iGAAiG;AACjG,wBAAgB,KAAK,CAAC,WAAW,SAAO,EAAE,KAAK,SAAO,GAAG,GAAG,CA2B3D;AAED,kHAAkH;AAClH,wBAAgB,YAAY,CAAC,KAAK,SAAM,GAAG,GAAG,CAe7C;AAED,kHAAkH;AAClH,wBAAgB,cAAc,CAAC,OAAO,SAAM,GAAG,GAAG,CAmBjD;AAED;0GAC0G;AAC1G,wBAAgB,UAAU,CAAC,IAAI,SAAM,GAAG,GAAG,CAc1C;AAED;kGACkG;AAClG,wBAAgB,WAAW,CAAC,YAAY,SAAI,EAAE,MAAM,SAAO,GAAG,GAAG,CAYhE;AAED;iGACiG;AACjG,wBAAgB,gBAAgB,CAAC,CAAC,SAAM,EAAE,EAAE,SAAM,GAAG,GAAG,CAmBvD;AAED;;iHAEiH;AAGjH,wBAAgB,WAAW,IAAI,GAAG,EAAE,CAA8H;AAGlK,wBAAgB,OAAO,IAAI,GAAG,EAAE,CAAkK;AAIlM,wBAAgB,YAAY,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,CA6BjH"}
|