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.
Files changed (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +72 -0
  3. package/bin/melete-server.mjs +345 -0
  4. package/bin/melete.mjs +165 -0
  5. package/dist/achievability.d.ts +38 -0
  6. package/dist/achievability.d.ts.map +1 -0
  7. package/dist/achievability.js +135 -0
  8. package/dist/achievability.js.map +1 -0
  9. package/dist/aegis.d.ts +52 -0
  10. package/dist/aegis.d.ts.map +1 -0
  11. package/dist/aegis.js +191 -0
  12. package/dist/aegis.js.map +1 -0
  13. package/dist/arms.d.ts +70 -0
  14. package/dist/arms.d.ts.map +1 -0
  15. package/dist/arms.js +399 -0
  16. package/dist/arms.js.map +1 -0
  17. package/dist/batch.d.ts +30 -0
  18. package/dist/batch.d.ts.map +1 -0
  19. package/dist/batch.js +151 -0
  20. package/dist/batch.js.map +1 -0
  21. package/dist/bench.d.ts +49 -0
  22. package/dist/bench.d.ts.map +1 -0
  23. package/dist/bench.js +124 -0
  24. package/dist/bench.js.map +1 -0
  25. package/dist/certify.d.ts +48 -0
  26. package/dist/certify.d.ts.map +1 -0
  27. package/dist/certify.js +125 -0
  28. package/dist/certify.js.map +1 -0
  29. package/dist/cliff.d.ts +41 -0
  30. package/dist/cliff.d.ts.map +1 -0
  31. package/dist/cliff.js +132 -0
  32. package/dist/cliff.js.map +1 -0
  33. package/dist/confidence.d.ts +38 -0
  34. package/dist/confidence.d.ts.map +1 -0
  35. package/dist/confidence.js +98 -0
  36. package/dist/confidence.js.map +1 -0
  37. package/dist/constrained.d.ts +59 -0
  38. package/dist/constrained.d.ts.map +1 -0
  39. package/dist/constrained.js +191 -0
  40. package/dist/constrained.js.map +1 -0
  41. package/dist/cortex.d.ts +56 -0
  42. package/dist/cortex.d.ts.map +1 -0
  43. package/dist/cortex.js +81 -0
  44. package/dist/cortex.js.map +1 -0
  45. package/dist/costaware.d.ts +49 -0
  46. package/dist/costaware.d.ts.map +1 -0
  47. package/dist/costaware.js +185 -0
  48. package/dist/costaware.js.map +1 -0
  49. package/dist/drift.d.ts +36 -0
  50. package/dist/drift.d.ts.map +1 -0
  51. package/dist/drift.js +157 -0
  52. package/dist/drift.js.map +1 -0
  53. package/dist/efficiency.d.ts +49 -0
  54. package/dist/efficiency.d.ts.map +1 -0
  55. package/dist/efficiency.js +143 -0
  56. package/dist/efficiency.js.map +1 -0
  57. package/dist/engine.d.ts +64 -0
  58. package/dist/engine.d.ts.map +1 -0
  59. package/dist/engine.js +130 -0
  60. package/dist/engine.js.map +1 -0
  61. package/dist/federated.d.ts +38 -0
  62. package/dist/federated.d.ts.map +1 -0
  63. package/dist/federated.js +121 -0
  64. package/dist/federated.js.map +1 -0
  65. package/dist/frontier.d.ts +51 -0
  66. package/dist/frontier.d.ts.map +1 -0
  67. package/dist/frontier.js +117 -0
  68. package/dist/frontier.js.map +1 -0
  69. package/dist/guardian.d.ts +46 -0
  70. package/dist/guardian.d.ts.map +1 -0
  71. package/dist/guardian.js +101 -0
  72. package/dist/guardian.js.map +1 -0
  73. package/dist/index.d.ts +90 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +189 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/interaction.d.ts +44 -0
  78. package/dist/interaction.d.ts.map +1 -0
  79. package/dist/interaction.js +167 -0
  80. package/dist/interaction.js.map +1 -0
  81. package/dist/interactive.d.ts +25 -0
  82. package/dist/interactive.d.ts.map +1 -0
  83. package/dist/interactive.js +75 -0
  84. package/dist/interactive.js.map +1 -0
  85. package/dist/inverse.d.ts +44 -0
  86. package/dist/inverse.d.ts.map +1 -0
  87. package/dist/inverse.js +141 -0
  88. package/dist/inverse.js.map +1 -0
  89. package/dist/ipshield.d.ts +62 -0
  90. package/dist/ipshield.d.ts.map +1 -0
  91. package/dist/ipshield.js +104 -0
  92. package/dist/ipshield.js.map +1 -0
  93. package/dist/journalist.d.ts +56 -0
  94. package/dist/journalist.d.ts.map +1 -0
  95. package/dist/journalist.js +132 -0
  96. package/dist/journalist.js.map +1 -0
  97. package/dist/lineage.d.ts +43 -0
  98. package/dist/lineage.d.ts.map +1 -0
  99. package/dist/lineage.js +112 -0
  100. package/dist/lineage.js.map +1 -0
  101. package/dist/metabrain.d.ts +59 -0
  102. package/dist/metabrain.d.ts.map +1 -0
  103. package/dist/metabrain.js +215 -0
  104. package/dist/metabrain.js.map +1 -0
  105. package/dist/mixedspace.d.ts +61 -0
  106. package/dist/mixedspace.d.ts.map +1 -0
  107. package/dist/mixedspace.js +267 -0
  108. package/dist/mixedspace.js.map +1 -0
  109. package/dist/multiobjective.d.ts +42 -0
  110. package/dist/multiobjective.d.ts.map +1 -0
  111. package/dist/multiobjective.js +123 -0
  112. package/dist/multiobjective.js.map +1 -0
  113. package/dist/noise.d.ts +45 -0
  114. package/dist/noise.d.ts.map +1 -0
  115. package/dist/noise.js +148 -0
  116. package/dist/noise.js.map +1 -0
  117. package/dist/noiserobust.d.ts +71 -0
  118. package/dist/noiserobust.d.ts.map +1 -0
  119. package/dist/noiserobust.js +215 -0
  120. package/dist/noiserobust.js.map +1 -0
  121. package/dist/oracle.d.ts +63 -0
  122. package/dist/oracle.d.ts.map +1 -0
  123. package/dist/oracle.js +106 -0
  124. package/dist/oracle.js.map +1 -0
  125. package/dist/poopt.d.ts +79 -0
  126. package/dist/poopt.d.ts.map +1 -0
  127. package/dist/poopt.js +148 -0
  128. package/dist/poopt.js.map +1 -0
  129. package/dist/portfolio.d.ts +51 -0
  130. package/dist/portfolio.d.ts.map +1 -0
  131. package/dist/portfolio.js +132 -0
  132. package/dist/portfolio.js.map +1 -0
  133. package/dist/prescription.d.ts +57 -0
  134. package/dist/prescription.d.ts.map +1 -0
  135. package/dist/prescription.js +131 -0
  136. package/dist/prescription.js.map +1 -0
  137. package/dist/prime.d.ts +85 -0
  138. package/dist/prime.d.ts.map +1 -0
  139. package/dist/prime.js +157 -0
  140. package/dist/prime.js.map +1 -0
  141. package/dist/provenance.d.ts +77 -0
  142. package/dist/provenance.d.ts.map +1 -0
  143. package/dist/provenance.js +155 -0
  144. package/dist/provenance.js.map +1 -0
  145. package/dist/rashomon.d.ts +40 -0
  146. package/dist/rashomon.d.ts.map +1 -0
  147. package/dist/rashomon.js +93 -0
  148. package/dist/rashomon.js.map +1 -0
  149. package/dist/reliability.d.ts +79 -0
  150. package/dist/reliability.d.ts.map +1 -0
  151. package/dist/reliability.js +197 -0
  152. package/dist/reliability.js.map +1 -0
  153. package/dist/replay.d.ts +62 -0
  154. package/dist/replay.d.ts.map +1 -0
  155. package/dist/replay.js +146 -0
  156. package/dist/replay.js.map +1 -0
  157. package/dist/replicate.d.ts +72 -0
  158. package/dist/replicate.d.ts.map +1 -0
  159. package/dist/replicate.js +103 -0
  160. package/dist/replicate.js.map +1 -0
  161. package/dist/resonance.d.ts +32 -0
  162. package/dist/resonance.d.ts.map +1 -0
  163. package/dist/resonance.js +190 -0
  164. package/dist/resonance.js.map +1 -0
  165. package/dist/sensitivity.d.ts +44 -0
  166. package/dist/sensitivity.d.ts.map +1 -0
  167. package/dist/sensitivity.js +109 -0
  168. package/dist/sensitivity.js.map +1 -0
  169. package/dist/server.d.ts +26 -0
  170. package/dist/server.d.ts.map +1 -0
  171. package/dist/server.js +1410 -0
  172. package/dist/server.js.map +1 -0
  173. package/dist/shape.d.ts +37 -0
  174. package/dist/shape.d.ts.map +1 -0
  175. package/dist/shape.js +170 -0
  176. package/dist/shape.js.map +1 -0
  177. package/dist/sloppiness.d.ts +44 -0
  178. package/dist/sloppiness.d.ts.map +1 -0
  179. package/dist/sloppiness.js +194 -0
  180. package/dist/sloppiness.js.map +1 -0
  181. package/dist/sovereign.d.ts +77 -0
  182. package/dist/sovereign.d.ts.map +1 -0
  183. package/dist/sovereign.js +144 -0
  184. package/dist/sovereign.js.map +1 -0
  185. package/dist/space.d.ts +38 -0
  186. package/dist/space.d.ts.map +1 -0
  187. package/dist/space.js +107 -0
  188. package/dist/space.js.map +1 -0
  189. package/dist/surprise.d.ts +43 -0
  190. package/dist/surprise.d.ts.map +1 -0
  191. package/dist/surprise.js +123 -0
  192. package/dist/surprise.js.map +1 -0
  193. package/dist/territory.d.ts +43 -0
  194. package/dist/territory.d.ts.map +1 -0
  195. package/dist/territory.js +102 -0
  196. package/dist/territory.js.map +1 -0
  197. package/dist/trace.d.ts +58 -0
  198. package/dist/trace.d.ts.map +1 -0
  199. package/dist/trace.js +0 -0
  200. package/dist/trace.js.map +1 -0
  201. package/dist/transfer.d.ts +46 -0
  202. package/dist/transfer.d.ts.map +1 -0
  203. package/dist/transfer.js +112 -0
  204. package/dist/transfer.js.map +1 -0
  205. package/dist/twin.d.ts +41 -0
  206. package/dist/twin.d.ts.map +1 -0
  207. package/dist/twin.js +116 -0
  208. package/dist/twin.js.map +1 -0
  209. package/examples/train.mjs +8 -0
  210. package/examples/tune.mjs +11 -0
  211. package/package.json +56 -0
@@ -0,0 +1,215 @@
1
+ /**
2
+ * FEDERATED META-BRAIN — the data flywheel that doesn't break sovereignty. The hard truth about a from-
3
+ * scratch optimizer: every customer starts cold, so the vendor never gets smarter and there's no moat. But
4
+ * you can't pool customers' raw data either — a pharma lab's secret recipe must never leave the building.
5
+ *
6
+ * The META-BRAIN squares that circle. After a run, each site shares only a privacy-safe LANDSCAPE
7
+ * FINGERPRINT — abstract shape/behaviour features (how rugged, how smooth, how many effective dimensions,
8
+ * the shape class, how concentrated the good region is) — and NEVER the optimum's coordinates or any
9
+ * measured value. The central registry learns which SEARCH STRATEGY suits each class of landscape. A new
10
+ * run whose fingerprint matches gets a recommended search profile (how much to explore vs exploit, how many
11
+ * seeds) instead of a blind default — so it converges faster. The more sites contribute, the sharper the
12
+ * strategy, and none of them leaked a secret.
13
+ *
14
+ * Honest by construction (DIAKRISIS): the fingerprint shares HOW a landscape behaves (to tune the search),
15
+ * NOT WHERE the answer is (that would leak the recipe) — the gauntlet proves no raw value or coordinate
16
+ * appears in what's shared. The benefit is MEASURED (the recommended profile beats the wrong one on that
17
+ * class), not a promised "5 instead of 20" — the gain depends on how well a new problem matches known ones,
18
+ * and is bounded. This is meta-learning of SEARCH STRATEGY, not a magic global oracle.
19
+ */
20
+ import { lcg } from "./space.js";
21
+ import { analyzeSloppiness } from "./sloppiness.js";
22
+ const dst = (a, c) => { let s = 0; for (let i = 0; i < a.length; i++)
23
+ s += (a[i] - c[i]) ** 2; return Math.sqrt(s); };
24
+ /** A privacy-safe summary of HOW a landscape behaves — never WHERE the optimum is, never a raw value. */
25
+ export function landscapeFingerprint(obs, space, goal = "maximize") {
26
+ const dims = space?.dims ?? [];
27
+ const D = dims.length;
28
+ const hist = (obs ?? []).filter((o) => o && o.experiment && Number.isFinite(o.value));
29
+ const n = hist.length;
30
+ if (D === 0 || n < 4)
31
+ return { dims: D, ruggedness: 0, smoothness: 1, effectiveDimsFrac: 1, concentration: 0 };
32
+ const lo = (i) => dims[i].min ?? 0, hi = (i) => dims[i].max ?? 1;
33
+ 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)); });
34
+ const P = hist.map((o) => toN(o.experiment));
35
+ const sgn = goal === "minimize" ? -1 : 1;
36
+ const V = hist.map((o) => sgn * o.value);
37
+ const vmin = Math.min(...V), vmax = Math.max(...V), vRange = Math.max(1e-9, vmax - vmin);
38
+ // ruggedness: how UN-unimodal the surface is. A smooth single-optimum bowl has value falling monotonically
39
+ // with distance from the best point (strong correlation); a rugged/multimodal one does not. So ruggedness
40
+ // = 1 − |corr(value, distance-to-best)|. (Robust, and a clean smooth-vs-rugged discriminator.)
41
+ let bestI = 0;
42
+ for (let i = 1; i < n; i++)
43
+ if (V[i] > V[bestI])
44
+ bestI = i;
45
+ const dd = P.map((p) => dst(p, P[bestI]));
46
+ const md = dd.reduce((a, b) => a + b, 0) / n, mv = V.reduce((a, b) => a + b, 0) / n;
47
+ let sdv = 0, sdd = 0, sdvd = 0;
48
+ for (let i = 0; i < n; i++) {
49
+ const a = dd[i] - md, b = V[i] - mv;
50
+ sdd += a * a;
51
+ sdv += b * b;
52
+ sdvd += a * b;
53
+ }
54
+ const corr = (sdd > 1e-12 && sdv > 1e-12) ? sdvd / Math.sqrt(sdd * sdv) : 0;
55
+ const rug = Math.max(0, Math.min(1, 1 - Math.abs(corr)));
56
+ const smoothness = +Math.max(0, Math.min(1, Math.abs(corr))).toFixed(3);
57
+ // effective dims fraction (how many independent combinations matter)
58
+ let edf = 1;
59
+ if (D >= 2) {
60
+ const s = analyzeSloppiness(hist, space, goal);
61
+ if (Number.isFinite(s.effectiveDims))
62
+ edf = Math.max(0, Math.min(1, s.effectiveDims / D));
63
+ }
64
+ // concentration: of the top-quartile points, how tightly do they cluster near the best (needle vs broad)
65
+ const idxSorted = V.map((_, i) => i).sort((a, b) => V[b] - V[a]);
66
+ const topK = idxSorted.slice(0, Math.max(2, Math.round(n * 0.25)));
67
+ const bestP = P[idxSorted[0]];
68
+ const meanD = topK.reduce((s, i) => s + dst(bestP, P[i]), 0) / topK.length;
69
+ const concentration = +Math.max(0, Math.min(1, 1 - meanD / 0.5)).toFixed(3); // tight cluster ⇒ →1 (needle)
70
+ return { dims: D, ruggedness: +rug.toFixed(3), smoothness, effectiveDimsFrac: +edf.toFixed(3), concentration };
71
+ }
72
+ const DEFAULT_PROFILE = { seeds: 8, exploreWeight: 0.5, note: "default balanced search (no matching prior landscape yet)" };
73
+ /** Recommend a search profile for a new run, learned from prior landscapes of the SAME behavioural class. */
74
+ export function recommendProfile(fp, registry = []) {
75
+ // find prior entries with a similar fingerprint
76
+ const sim = (a, b) => Math.abs(a.ruggedness - b.ruggedness) + Math.abs(a.concentration - b.concentration) + Math.abs(a.effectiveDimsFrac - b.effectiveDimsFrac) + (a.dims === b.dims ? 0 : 0.3);
77
+ const near = (registry ?? []).map((e) => ({ e, d: sim(fp, e.fingerprint) })).filter((x) => x.d < 0.4).sort((a, b) => a.d - b.d);
78
+ if (near.length) {
79
+ let w = 0, sw = 0, ss = 0;
80
+ for (const { e } of near) {
81
+ const wt = e.n;
82
+ w += wt;
83
+ sw += wt * e.bestExploreWeight;
84
+ ss += wt * e.bestSeedsFrac;
85
+ }
86
+ const exploreWeight = +Math.max(0, Math.min(1, sw / (w || 1))).toFixed(3);
87
+ const seeds = Math.max(4, Math.round((ss / (w || 1)) * 40));
88
+ return { seeds, exploreWeight, note: `learned from ${near.length} similar prior landscape${near.length > 1 ? "s" : ""} — ${exploreWeight > 0.6 ? "explore-heavy (rugged class)" : exploreWeight < 0.4 ? "exploit-heavy (smooth class)" : "balanced"}` };
89
+ }
90
+ // no match → derive a sensible profile from the fingerprint alone (rugged/needle ⇒ explore more)
91
+ const exploreWeight = +Math.max(0.2, Math.min(0.85, 0.35 + 0.4 * fp.ruggedness + 0.25 * fp.concentration)).toFixed(3);
92
+ return { seeds: Math.round(6 + 10 * fp.ruggedness), exploreWeight, note: "derived from this landscape's own fingerprint (no prior match)" };
93
+ }
94
+ /** Append a landscape's learned strategy to the registry — anonymised (fingerprint only). CRDT-style merge. */
95
+ export function contributeFingerprint(registry, fp, bestExploreWeight, bestSeedsFrac) {
96
+ const key = (f) => `${f.dims}|${Math.round(f.ruggedness * 10)}|${Math.round(f.concentration * 10)}|${Math.round(f.effectiveDimsFrac * 10)}`;
97
+ const out = (registry ?? []).map((e) => ({ ...e, fingerprint: { ...e.fingerprint } }));
98
+ const k = key(fp);
99
+ const ex = out.find((e) => key(e.fingerprint) === k);
100
+ const ew = Math.max(0, Math.min(1, bestExploreWeight)), sf = Math.max(0, Math.min(1, bestSeedsFrac));
101
+ if (ex) {
102
+ const t = ex.n + 1;
103
+ ex.bestExploreWeight = +((ex.bestExploreWeight * ex.n + ew) / t).toFixed(4);
104
+ ex.bestSeedsFrac = +((ex.bestSeedsFrac * ex.n + sf) / t).toFixed(4);
105
+ ex.n = t;
106
+ }
107
+ else
108
+ out.push({ fingerprint: { ...fp }, bestExploreWeight: +ew.toFixed(4), bestSeedsFrac: +sf.toFixed(4), n: 1 });
109
+ out.sort((a, b) => (a.fingerprint.dims - b.fingerprint.dims) || (a.fingerprint.ruggedness - b.fingerprint.ruggedness) || (a.fingerprint.concentration - b.fingerprint.concentration));
110
+ return out;
111
+ }
112
+ /** A minimal profile-driven search used to MEASURE that a recommended profile actually helps. */
113
+ export function profiledSearch(space, oracle, budget, profile, goal = "maximize", seed = 1) {
114
+ const dims = space.dims, D = dims.length;
115
+ const sgn = goal === "minimize" ? -1 : 1;
116
+ const lo = (i) => dims[i].min ?? 0, hi = (i) => dims[i].max ?? 1;
117
+ const toE = (v) => { const e = {}; dims.forEach((d, i) => { let x = lo(i) + v[i] * (hi(i) - lo(i)); if (d.type === "int")
118
+ x = Math.round(x); e[d.name] = x; }); return e; };
119
+ const HB = [2, 3, 5, 7, 11, 13, 17, 19];
120
+ const hal = (k, b) => { let f = 1, r = 0, i = k + 1; while (i > 0) {
121
+ f /= b;
122
+ r += f * (i % b);
123
+ i = Math.floor(i / b);
124
+ } return r; };
125
+ const rnd = lcg((seed >>> 0) || 1);
126
+ const obs = [];
127
+ const pts = [];
128
+ let best = { experiment: {}, value: goal === "minimize" ? Infinity : -Infinity };
129
+ const take = (p) => { const e = toE(p); const v = oracle(e); obs.push({ experiment: e, value: v }); pts.push(p); if (sgn * v > sgn * best.value)
130
+ best = { experiment: e, value: v }; };
131
+ const seeds = Math.min(budget, Math.max(2, profile.seeds));
132
+ for (let k = 0; k < seeds; k++) {
133
+ const p = [];
134
+ for (let d = 0; d < D; d++)
135
+ p.push(hal(k * 5 + 1, HB[d % HB.length]));
136
+ take(p);
137
+ }
138
+ while (obs.length < budget) {
139
+ let p;
140
+ if (rnd() < profile.exploreWeight) {
141
+ p = [];
142
+ for (let d = 0; d < D; d++)
143
+ p.push(hal((obs.length * 7 + 3), HB[d % HB.length]));
144
+ } // explore: fresh space-filling
145
+ else {
146
+ const bn = dims.map((d) => { const sp = hi(0) - lo(0); void sp; return 0; });
147
+ void bn;
148
+ const bp = pts[obs.reduce((bi, o, i) => (sgn * o.value > sgn * obs[bi].value ? i : bi), 0)];
149
+ p = bp.map((x) => Math.max(0, Math.min(1, x + (rnd() - 0.5) * 0.15)));
150
+ } // exploit: cloud around best
151
+ take(p);
152
+ }
153
+ return { best, evaluations: obs.length };
154
+ }
155
+ // ── gauntlet ──────────────────────────────────────────────────────────────────
156
+ function canonical(o) { if (o === null || typeof o !== "object")
157
+ return JSON.stringify(o); if (Array.isArray(o))
158
+ return "[" + o.map(canonical).join(",") + "]"; const k = Object.keys(o).sort(); return "{" + k.map((x) => JSON.stringify(x) + ":" + canonical(o[x])).join(",") + "}"; }
159
+ export function metabrainGauntlet() {
160
+ const space = { dims: [{ name: "x", type: "real", min: 0, max: 1 }, { name: "y", type: "real", min: 0, max: 1 }] };
161
+ // RUGGED multimodal landscape (lots of local peaks) vs SMOOTH single bowl
162
+ const rugged = (x, y) => Math.sin(9 * x) * Math.sin(9 * y) * 0.5 + Math.exp(-(((x - 0.5) ** 2) + ((y - 0.5) ** 2)) / 0.3);
163
+ const smooth = (x, y) => -(((x - 0.5) ** 2) + ((y - 0.5) ** 2));
164
+ const samp = (f, sd) => { const r = lcg(sd); const o = []; for (let i = 0; i < 60; i++) {
165
+ const x = r(), y = r();
166
+ o.push({ experiment: { x, y }, value: f(x, y) });
167
+ } return o; };
168
+ const fpRug = landscapeFingerprint(samp(rugged, 3), space, "maximize");
169
+ const fpSmo = landscapeFingerprint(samp(smooth, 4), space, "maximize");
170
+ const recognizes = fpRug.ruggedness > fpSmo.ruggedness + 0.1;
171
+ // PRIVACY: no raw observation value or coordinate appears in the shared fingerprint
172
+ const ro = samp(rugged, 3);
173
+ const fpStr = canonical(landscapeFingerprint(ro, space, "maximize"));
174
+ const leaks = ro.some((o) => fpStr.indexOf(String(o.value)) >= 0 || fpStr.indexOf(String(o.experiment.x)) >= 0 || fpStr.indexOf(String(o.experiment.y)) >= 0);
175
+ const privacy = !leaks && Object.keys(landscapeFingerprint(ro, space, "maximize")).sort().join(",") === "concentration,dims,effectiveDimsFrac,ruggedness,smoothness";
176
+ // PROFILE matches class: rugged ⇒ explore-heavy; smooth ⇒ exploit-heavy
177
+ const pRug = recommendProfile(fpRug);
178
+ const pSmo = recommendProfile(fpSmo);
179
+ const profileMatches = pRug.exploreWeight > pSmo.exploreWeight;
180
+ // MEASURED benefit: on the rugged landscape, the explore-heavy profile beats an exploit-only profile (same budget)
181
+ const orc = (e) => rugged(e.x ?? 0, e.y ?? 0);
182
+ const exploreRun = profiledSearch(space, orc, 30, { seeds: 14, exploreWeight: 0.8, note: "" }, "maximize", 5);
183
+ const exploitRun = profiledSearch(space, orc, 30, { seeds: 4, exploreWeight: 0.05, note: "" }, "maximize", 5);
184
+ const measuredBenefit = exploreRun.best.value > exploitRun.best.value + 0.02;
185
+ // MERGE is commutative (CRDT): contribute order doesn't change the registry
186
+ const a = contributeFingerprint(contributeFingerprint([], fpRug, 0.8, 0.35), fpSmo, 0.1, 0.1);
187
+ const b = contributeFingerprint(contributeFingerprint([], fpSmo, 0.1, 0.1), fpRug, 0.8, 0.35);
188
+ const merge = canonical(a) === canonical(b);
189
+ // a registry of rugged priors recommends explore-heavy for a new rugged fingerprint
190
+ const reg = contributeFingerprint(contributeFingerprint([], fpRug, 0.82, 0.4), fpRug, 0.78, 0.38);
191
+ const learnsFromRegistry = recommendProfile(fpRug, reg).exploreWeight > 0.6 && recommendProfile(fpRug, reg).note.indexOf("similar prior") >= 0;
192
+ const det = canonical(landscapeFingerprint(ro, space, "maximize")) === canonical(landscapeFingerprint(ro, space, "maximize"));
193
+ const total = (() => { try {
194
+ landscapeFingerprint([], space);
195
+ recommendProfile(fpRug, null);
196
+ contributeFingerprint(null, fpRug, 0.5, 0.3);
197
+ profiledSearch(space, () => 0, 3, DEFAULT_PROFILE);
198
+ return true;
199
+ }
200
+ catch {
201
+ return false;
202
+ } })();
203
+ const checks = [
204
+ { name: "PRIVACY-INVARIANT", pass: privacy, detail: "fingerprint = {dims,ruggedness,smoothness,effectiveDimsFrac,concentration} only — NO raw value or optimum coordinate" },
205
+ { name: "RECOGNIZES-LANDSCAPE-CLASS", pass: recognizes, detail: `rugged ruggedness ${fpRug.ruggedness} > smooth ${fpSmo.ruggedness}` },
206
+ { name: "PROFILE-MATCHES-CLASS", pass: profileMatches, detail: `rugged → explore ${pRug.exploreWeight} > smooth → explore ${pSmo.exploreWeight}` },
207
+ { name: "MEASURED-BENEFIT", pass: measuredBenefit, detail: `on rugged: explore-profile best ${exploreRun.best.value.toFixed(3)} > exploit-profile ${exploitRun.best.value.toFixed(3)} (same budget)` },
208
+ { name: "LEARNS-FROM-REGISTRY", pass: learnsFromRegistry, detail: "a registry of rugged priors → recommends explore-heavy, cites the priors" },
209
+ { name: "MERGE-COMMUTATIVE", pass: merge, detail: "CRDT: contribute order doesn't change the registry" },
210
+ { name: "DETERMINISTIC", pass: det, detail: "same data → same fingerprint" },
211
+ { name: "TOTAL", pass: total, detail: "empty / null never throws" },
212
+ ];
213
+ return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
214
+ }
215
+ //# sourceMappingURL=metabrain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metabrain.js","sourceRoot":"","sources":["../src/metabrain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { type Goal } from "./engine.js";
2
+ export type MixedType = "real" | "int" | "categorical";
3
+ export interface MixedDim {
4
+ name: string;
5
+ type: MixedType;
6
+ min?: number;
7
+ max?: number;
8
+ choices?: string[];
9
+ activeWhen?: {
10
+ dim: string;
11
+ equals: string;
12
+ };
13
+ }
14
+ export interface MixedSpace {
15
+ dims: MixedDim[];
16
+ }
17
+ export type MixedExperiment = Record<string, number | string>;
18
+ export interface MixedComboResult {
19
+ combo: Record<string, string>;
20
+ best: MixedExperiment;
21
+ value: number;
22
+ evaluations: number;
23
+ }
24
+ export interface MixedResult {
25
+ best: {
26
+ experiment: MixedExperiment;
27
+ value: number;
28
+ };
29
+ bestCombo: Record<string, string>;
30
+ byCombo: MixedComboResult[];
31
+ evaluations: number;
32
+ comboCount: number;
33
+ sampledCombos: boolean;
34
+ }
35
+ /**
36
+ * Optimize a mixed (real + int + categorical, with conditional) space. DISCRETE dims (categoricals + small
37
+ * integers) are ENUMERATED as a combo grid (never interpolated); within each live combo, the active REAL /
38
+ * large-int dims get a deterministic continuous search (space-filling seeds → golden-section coordinate
39
+ * descent that PINPOINTS a smooth optimum, incl. the right integer). Budget is split fairly across combos
40
+ * (a harder higher-dim combo seeds low and must NOT be discarded early), each search returns budget the moment
41
+ * it converges, and any remainder concentrates on the current leader. Cost is BOUNDED and roughly linear in
42
+ * the number of combos (≈ combos × sub-budget) — not an exponential explosion. Inactive conditional dims are
43
+ * FROZEN (never searched), so no budget is wasted on a knob that does nothing right now. Honest: optimizing K
44
+ * genuinely-distinct discrete configurations takes ~K× the continuous cost — the win is bounded + correct.
45
+ */
46
+ export declare function mixedDiscover(opts: {
47
+ space: MixedSpace;
48
+ oracle: (e: MixedExperiment) => number;
49
+ budget: number;
50
+ goal?: Goal;
51
+ seed?: number;
52
+ }): MixedResult;
53
+ export declare function mixedGauntlet(): {
54
+ score: 0 | 100;
55
+ checks: Array<{
56
+ name: string;
57
+ pass: boolean;
58
+ detail: string;
59
+ }>;
60
+ };
61
+ //# sourceMappingURL=mixedspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixedspace.d.ts","sourceRoot":"","sources":["../src/mixedspace.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;AACvD,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAAE;AAC1J,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE;AAChD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;CAAE;AAC/H,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AA0BD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAsE1J;AAQD,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,CA4ClH"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * 🧩 MIXED-SPACE DISCOVERY — optimize when the knobs aren't all continuous.
3
+ *
4
+ * Real systems don't only have dials. A database has a STORAGE ENGINE (InnoDB | MyISAM | RocksDB), a model has
5
+ * an ACTIVATION (relu | gelu | tanh), a kernel has a SCHEDULER — categorical switches with no numeric order,
6
+ * mixed with integers (thread count ∈ {1,2,4,8}) and continuous reals. And some knobs only matter in a certain
7
+ * mode (a "compression level" that exists only when compression is ON = a CONDITIONAL parameter). A pure
8
+ * continuous optimizer is blind here: it interpolates "1.5 storage engines", wastes budget tuning a knob that
9
+ * is currently switched off, and its tries-count explodes.
10
+ *
11
+ * MIXED-SPACE handles all three honestly:
12
+ * • CATEGORICAL dims are chosen, never interpolated — each category-combination is its own sub-problem.
13
+ * • CONDITIONAL dims (active only when another dim equals a value) are FROZEN when inactive, so no budget is
14
+ * wasted tuning a knob that does nothing right now.
15
+ * • For each live combination it runs a deterministic continuous sub-search (space-filling + local refine)
16
+ * on the active real/int dims, and returns the globally best full recipe + a per-combination leaderboard.
17
+ *
18
+ * Honest by construction (DIAKRISIS): this is correct mixed-type search with conditional masking and a bounded
19
+ * budget across category-combinations (capped; sampled when the categorical product is huge) — NOT a magic
20
+ * "graph-neural" solver for 100 conflicting dimensions (that claim would be a lie). The gauntlet proves it on a
21
+ * mixed objective whose optimum requires the RIGHT category AND the right continuous values AND respects a
22
+ * conditional knob: it reaches ≥97.5% of the true optimum (Wilson lower bound across seeds), picks the right
23
+ * category, and never wastes budget on an inactive conditional dim.
24
+ */
25
+ import { lcg } from "./space.js";
26
+ const HB = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37];
27
+ const hal = (k, b) => { let f = 1, r = 0, i = k + 1; while (i > 0) {
28
+ f /= b;
29
+ r += f * (i % b);
30
+ i = Math.floor(i / b);
31
+ } return r; };
32
+ const MAX_COMBOS = 32;
33
+ const DISC_INT_MAX = 12; // integers with ≤12 levels are enumerated as discrete (vs searched continuously)
34
+ const isDiscrete = (d) => d.type === "categorical" || (d.type === "int" && (((d.max ?? 0) - (d.min ?? 0)) + 1) <= DISC_INT_MAX);
35
+ const valuesOf = (d) => { if (d.type === "categorical")
36
+ return (d.choices || []).slice(); const out = []; for (let v = (d.min ?? 0); v <= (d.max ?? 0); v++)
37
+ out.push(v); return out; };
38
+ /** Cartesian product of the DISCRETE dims' values (deterministically sampled if it exceeds MAX_COMBOS). */
39
+ function comboList(disc, seed) {
40
+ if (!disc.length)
41
+ return { combos: [{}], sampled: false };
42
+ let total = 1;
43
+ for (const d of disc)
44
+ total *= Math.max(1, valuesOf(d).length);
45
+ if (total <= MAX_COMBOS) {
46
+ let combos = [{}];
47
+ for (const d of disc) {
48
+ const vs = valuesOf(d);
49
+ const next = [];
50
+ for (const base of combos)
51
+ for (const v of vs)
52
+ next.push({ ...base, [d.name]: v });
53
+ combos = next;
54
+ }
55
+ return { combos, sampled: false };
56
+ }
57
+ const rnd = lcg((seed >>> 0) || 1);
58
+ const seen = new Set();
59
+ const combos = [];
60
+ let guard = 0;
61
+ while (combos.length < MAX_COMBOS && guard++ < MAX_COMBOS * 60) {
62
+ const c = {};
63
+ for (const d of disc) {
64
+ const vs = valuesOf(d);
65
+ c[d.name] = vs[Math.floor(rnd() * vs.length)] ?? vs[0];
66
+ }
67
+ const key = JSON.stringify(c);
68
+ if (!seen.has(key)) {
69
+ seen.add(key);
70
+ combos.push(c);
71
+ }
72
+ }
73
+ return { combos, sampled: true };
74
+ }
75
+ /**
76
+ * Optimize a mixed (real + int + categorical, with conditional) space. DISCRETE dims (categoricals + small
77
+ * integers) are ENUMERATED as a combo grid (never interpolated); within each live combo, the active REAL /
78
+ * large-int dims get a deterministic continuous search (space-filling seeds → golden-section coordinate
79
+ * descent that PINPOINTS a smooth optimum, incl. the right integer). Budget is split fairly across combos
80
+ * (a harder higher-dim combo seeds low and must NOT be discarded early), each search returns budget the moment
81
+ * it converges, and any remainder concentrates on the current leader. Cost is BOUNDED and roughly linear in
82
+ * the number of combos (≈ combos × sub-budget) — not an exponential explosion. Inactive conditional dims are
83
+ * FROZEN (never searched), so no budget is wasted on a knob that does nothing right now. Honest: optimizing K
84
+ * genuinely-distinct discrete configurations takes ~K× the continuous cost — the win is bounded + correct.
85
+ */
86
+ export function mixedDiscover(opts) {
87
+ const goal = opts.goal ?? "maximize";
88
+ const sgn = goal === "minimize" ? -1 : 1;
89
+ const budget = Math.max(8, Math.floor(opts.budget));
90
+ const seed = (opts.seed ?? 1) | 0;
91
+ const dims = opts.space.dims;
92
+ const disc = dims.filter(isDiscrete);
93
+ const cont = dims.filter((d) => !isDiscrete(d)); // true reals + large-range ints
94
+ const { combos, sampled } = comboList(disc, seed);
95
+ const isActive = (d, combo) => !d.activeWhen || String(combo[d.activeWhen.dim]) === d.activeWhen.equals;
96
+ const lo = (d) => d.min ?? 0, hi = (d) => d.max ?? 1;
97
+ let evals = 0;
98
+ const states = combos.map((combo) => { const act = cont.filter((d) => isActive(d, combo)); return { combo, act, D: act.length, bestVec: [], bestV: -Infinity, bestE: null, seeded: 0, step: 0.3 }; });
99
+ const build = (st, vec) => {
100
+ const e = {};
101
+ for (const d of disc)
102
+ e[d.name] = st.combo[d.name];
103
+ let k = 0;
104
+ for (const d of cont) {
105
+ if (isActive(d, st.combo)) {
106
+ let x = lo(d) + (vec[k++] ?? 0.5) * (hi(d) - lo(d));
107
+ if (d.type === "int")
108
+ x = Math.round(x);
109
+ e[d.name] = x;
110
+ }
111
+ else {
112
+ e[d.name] = d.type === "int" ? Math.round(lo(d)) : lo(d);
113
+ }
114
+ }
115
+ return e;
116
+ };
117
+ // one measurement (counts a try, updates the combo's best); returns the score in sgn-space
118
+ const probe = (st, vec) => { if (evals >= budget)
119
+ return -Infinity; const e = build(st, vec); const v = opts.oracle(e); evals++; const sv = sgn * v; if (sv > st.bestV) {
120
+ st.bestV = sv;
121
+ st.bestE = e;
122
+ st.bestVec = vec.slice();
123
+ } return sv; };
124
+ const considerSt = probe;
125
+ const GR = 0.6180339887;
126
+ // golden-section line search along ONE coordinate (others fixed) — pinpoints a smooth unimodal dim fast
127
+ const lineSearch = (st, d, cap) => {
128
+ const start = evals;
129
+ const base = st.bestVec.slice();
130
+ const at = (t) => { const v = base.slice(); v[d] = Math.max(0, Math.min(1, t)); return probe(st, v); };
131
+ let a = 0, b = 1, c = b - GR * (b - a), e = a + GR * (b - a);
132
+ let fc = at(c), fe = at(e);
133
+ while (evals - start < cap && evals < budget && (b - a) > 1e-3) {
134
+ if (fc > fe) {
135
+ b = e;
136
+ e = c;
137
+ fe = fc;
138
+ c = b - GR * (b - a);
139
+ fc = at(c);
140
+ }
141
+ else {
142
+ a = c;
143
+ c = e;
144
+ fc = fe;
145
+ e = a + GR * (b - a);
146
+ fe = at(e);
147
+ }
148
+ }
149
+ };
150
+ // run up to `add` more measurements on ONE combo (resumable: space-filling seeds → coordinate-descent golden
151
+ // section; returns early once a full sweep yields no improvement = converged, handing budget back).
152
+ const runSearch = (st, add) => {
153
+ const start = evals;
154
+ if (st.D === 0) {
155
+ if (st.bestE === null)
156
+ probe(st, []);
157
+ return;
158
+ }
159
+ const seedTarget = Math.max(5, st.D * 3);
160
+ while (st.seeded < seedTarget && evals - start < add && evals < budget) {
161
+ const p = [];
162
+ for (let d = 0; d < st.D; d++)
163
+ p.push(hal(st.seeded * 5 + 1, HB[d % HB.length]));
164
+ probe(st, p);
165
+ st.seeded++;
166
+ }
167
+ while (evals - start < add && evals < budget) {
168
+ const before = st.bestV;
169
+ for (let d = 0; d < st.D && evals - start < add && evals < budget; d++)
170
+ lineSearch(st, d, Math.min(18, add - (evals - start)));
171
+ if (st.bestV <= before + 1e-9)
172
+ break; // a full coordinate sweep didn't improve → converged
173
+ }
174
+ };
175
+ // EQUAL SUB-BUDGET PER COMBO — to KNOW which discrete combo is best you must optimise each one enough; a
176
+ // harder (higher-dim) combo seeds low and would be wrongly discarded by early concentration. Each combo gets
177
+ // a fair continuous optimisation (seeds → compass, which converges and then stops consuming). Cost is bounded
178
+ // and linear in the number of combos (≈ combos × sub-budget) — not an exponential explosion.
179
+ const perCombo = Math.max(10, Math.floor(budget / states.length));
180
+ for (const st of states) {
181
+ if (evals >= budget)
182
+ break;
183
+ runSearch(st, Math.min(perCombo, budget - evals));
184
+ }
185
+ // any budget left (combos that converged early returned it) → concentrate on the current leader
186
+ let guard = 0;
187
+ while (evals < budget && guard++ < 10000) {
188
+ const top = states.slice().sort((a, b) => b.bestV - a.bestV)[0];
189
+ const before = evals;
190
+ runSearch(top, budget - evals);
191
+ if (evals === before)
192
+ break;
193
+ }
194
+ const results = states.filter((s) => s.bestE).map((s) => { const c = {}; for (const k in s.combo)
195
+ c[k] = String(s.combo[k]); return { combo: c, best: s.bestE, value: +(sgn * s.bestV).toFixed(6), evaluations: 0 }; });
196
+ results.sort((a, b) => sgn * (b.value - a.value));
197
+ const top = results[0] ?? { combo: {}, best: {}, value: 0 };
198
+ return {
199
+ best: { experiment: top.best, value: top.value },
200
+ bestCombo: top.combo, byCombo: results, evaluations: evals,
201
+ comboCount: combos.length, sampledCombos: sampled,
202
+ };
203
+ }
204
+ // ── gauntlet ──────────────────────────────────────────────────────────────────
205
+ // A mixed objective: categorical `engine` ∈ {A,B,C} sets the ceiling (B is best); continuous `x` peaks at 0.7;
206
+ // integer `n` peaks at 5; and a CONDITIONAL `tune` matters ONLY when engine=B (peaks at 0.3). True optimum:
207
+ // engine=B, x=0.7, n=5, tune=0.3 → 100. A blind continuous optimizer interpolates the category and wastes
208
+ // budget on `tune` when engine≠B. MIXED-SPACE must reach ≥97.5% of 100, pick engine=B, and ignore the
209
+ // inactive `tune` when engine≠B.
210
+ export function mixedGauntlet() {
211
+ const space = { dims: [
212
+ { name: "engine", type: "categorical", choices: ["A", "B", "C"] },
213
+ { name: "x", type: "real", min: 0, max: 1 },
214
+ { name: "n", type: "int", min: 3, max: 7 },
215
+ { name: "tune", type: "real", min: 0, max: 1, activeWhen: { dim: "engine", equals: "B" } },
216
+ ] };
217
+ const ceil = { A: 0.62, B: 1.0, C: 0.71 };
218
+ const f = (e) => {
219
+ const eng = String(e.engine);
220
+ const x = +e.x, n = +e.n;
221
+ let s = (ceil[eng] ?? 0.5) * Math.exp(-(((x - 0.7) ** 2) / 0.04)) * Math.exp(-(((n - 5) ** 2) / 6));
222
+ if (eng === "B")
223
+ s *= Math.exp(-(((+e.tune - 0.3) ** 2) / 0.05)); // tune only matters for engine B
224
+ return 100 * s;
225
+ };
226
+ const SEEDS = 200;
227
+ let hits = 0, pickedB = 0;
228
+ for (let s = 1; s <= SEEDS; s++) {
229
+ const r = mixedDiscover({ space, oracle: f, budget: 500, goal: "maximize", seed: s });
230
+ if (r.best.value >= 97.5)
231
+ hits++;
232
+ if (r.bestCombo.engine === "B")
233
+ pickedB++;
234
+ }
235
+ const rate = hits / SEEDS;
236
+ const wilsonLB = (p, n) => { const z = 1.96; const d = 1 + z * z / n; return (p + z * z / (2 * n) - z * Math.sqrt(p * (1 - p) / n + z * z / (4 * n * n))) / d; };
237
+ const lb = wilsonLB(rate, SEEDS);
238
+ // CONDITIONAL correctness: when engine≠B, `tune` must be frozen (not searched) — so two runs that only
239
+ // differ in where `tune` *would* go still land at the same A/C recipe, and the A/C best never depends on tune.
240
+ const rA = mixedDiscover({ space: { dims: space.dims.filter((d) => d.name !== "engine").concat([{ name: "engine", type: "categorical", choices: ["A"] }]) }, oracle: f, budget: 60, seed: 3 });
241
+ const tuneFrozen = +rA.best.experiment.tune === (space.dims.find((d) => d.name === "tune").min ?? 0);
242
+ const det = (() => { const a = mixedDiscover({ space, oracle: f, budget: 90, seed: 9 }); const b = mixedDiscover({ space, oracle: f, budget: 90, seed: 9 }); return a.best.value === b.best.value && JSON.stringify(a.best.experiment) === JSON.stringify(b.best.experiment); })();
243
+ const enumeratedAll = mixedDiscover({ space, oracle: f, budget: 500, seed: 1 }).comboCount === 15 && !mixedDiscover({ space, oracle: f, budget: 180, seed: 1 }).sampledCombos;
244
+ // big categorical product → sampled, capped, still returns a valid best
245
+ const bigSpace = { dims: [{ name: "a", type: "categorical", choices: ["1", "2", "3", "4", "5", "6"] }, { name: "b", type: "categorical", choices: ["1", "2", "3", "4", "5", "6"] }, { name: "x", type: "real", min: 0, max: 1 }] };
246
+ const big = mixedDiscover({ space: bigSpace, oracle: (e) => +e.x, budget: 120, seed: 2 });
247
+ const capsBig = big.comboCount <= MAX_COMBOS && big.sampledCombos === true && Number.isFinite(big.best.value);
248
+ const total = (() => { try {
249
+ mixedDiscover({ space, oracle: () => 0, budget: 8 });
250
+ mixedDiscover({ space: { dims: [{ name: "x", type: "real", min: 0, max: 1 }] }, oracle: () => 1, budget: 10 });
251
+ return true;
252
+ }
253
+ catch {
254
+ return false;
255
+ } })();
256
+ const checks = [
257
+ { name: "REACHES-≥97.5%-OF-OPTIMUM(Wilson-LB)", pass: lb >= 0.975, detail: `reached ≥97.5% of the true optimum in ${hits}/${SEEDS} seeds = ${(rate * 100).toFixed(1)}% · Wilson-95%-LB ${(lb * 100).toFixed(1)}%` },
258
+ { name: "PICKS-THE-RIGHT-CATEGORY", pass: pickedB === SEEDS, detail: `chose the winning categorical engine=B in ${pickedB}/${SEEDS} seeds` },
259
+ { name: "CONDITIONAL-DIM-FROZEN-WHEN-INACTIVE", pass: tuneFrozen, detail: `with engine=A the conditional 'tune' is frozen to its min (not searched) → no wasted budget` },
260
+ { name: "ENUMERATES-SMALL-PRODUCTS", pass: enumeratedAll, detail: "engine×n = 15 discrete combos enumerated exactly (not sampled)" },
261
+ { name: "CAPS+SAMPLES-HUGE-PRODUCTS", pass: capsBig, detail: `36-combo product capped to ≤${MAX_COMBOS} and sampled, still returns a valid best` },
262
+ { name: "DETERMINISTIC", pass: det, detail: "same seed → identical mixed recipe" },
263
+ { name: "TOTAL", pass: total, detail: "flat oracle / single-dim / tiny budget never throws" },
264
+ ];
265
+ return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
266
+ }
267
+ //# sourceMappingURL=mixedspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixedspace.js","sourceRoot":"","sources":["../src/mixedspace.ts"],"names":[],"mappings":"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"}