@reicek/neataptic-ts 0.1.21 → 0.1.23

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 (361) hide show
  1. package/.github/agents/boundary-mapper.agent.md +31 -0
  2. package/.github/agents/docs-scout.agent.md +29 -0
  3. package/.github/agents/plan-scout.agent.md +31 -0
  4. package/.github/agents/solid-split.agent.md +143 -0
  5. package/.github/copilot-instructions.md +119 -0
  6. package/.github/skills/solid-split-playbook/SKILL.md +220 -0
  7. package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
  8. package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
  9. package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
  10. package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
  11. package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
  12. package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
  13. package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
  14. package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
  15. package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
  16. package/package.json +7 -3
  17. package/plans/ES2023 migration +13 -8
  18. package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
  19. package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
  20. package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
  21. package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
  22. package/plans/Memory_Optimization.md +3 -3
  23. package/plans/README.md +63 -0
  24. package/plans/Roadmap.md +15 -3
  25. package/plans/asciiMaze_SOLID_split.done.md +130 -0
  26. package/plans/flappy_bird_SOLID_split.done.md +67 -0
  27. package/scripts/analyze-trace.ts +590 -0
  28. package/scripts/assets/theme.css +221 -34
  29. package/scripts/copy-examples.mjs +9 -5
  30. package/scripts/export-onnx.mjs +3 -3
  31. package/scripts/generate-bench-tables.mjs +10 -10
  32. package/scripts/generate-bench-tables.ts +10 -10
  33. package/scripts/generate-docs.ts +1415 -449
  34. package/scripts/render-docs-html.ts +15 -8
  35. package/src/README.md +127 -222
  36. package/src/architecture/README.md +117 -184
  37. package/src/architecture/architect.ts +6 -0
  38. package/src/architecture/layer/README.md +38 -38
  39. package/src/architecture/network/README.md +49 -31
  40. package/src/architecture/network/activate/README.md +77 -77
  41. package/src/architecture/network/connect/README.md +15 -13
  42. package/src/architecture/network/deterministic/README.md +7 -7
  43. package/src/architecture/network/evolve/README.md +44 -44
  44. package/src/architecture/network/gating/README.md +20 -20
  45. package/src/architecture/network/genetic/README.md +51 -51
  46. package/src/architecture/network/mutate/README.md +97 -97
  47. package/src/architecture/network/network.types.ts +39 -0
  48. package/src/architecture/network/onnx/README.md +264 -264
  49. package/src/architecture/network/prune/README.md +39 -39
  50. package/src/architecture/network/remove/README.md +26 -26
  51. package/src/architecture/network/serialize/README.md +56 -56
  52. package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
  53. package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
  54. package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
  55. package/src/architecture/network/slab/README.md +61 -61
  56. package/src/architecture/network/standalone/README.md +24 -24
  57. package/src/architecture/network/stats/README.md +9 -9
  58. package/src/architecture/network/topology/README.md +46 -46
  59. package/src/architecture/network/training/README.md +21 -21
  60. package/src/architecture/network.ts +114 -10
  61. package/src/methods/README.md +9 -87
  62. package/src/multithreading/README.md +8 -77
  63. package/src/multithreading/workers/README.md +2 -2
  64. package/src/multithreading/workers/browser/README.md +0 -6
  65. package/src/multithreading/workers/node/README.md +0 -3
  66. package/src/neat/README.md +623 -568
  67. package/src/neat/neat.evolve.population.utils.ts +29 -5
  68. package/src/neat/neat.helpers.ts +16 -0
  69. package/src/neat/neat.topology-intent.utils.ts +160 -0
  70. package/src/utils/README.md +18 -18
  71. package/test/examples/asciiMaze/README.md +59 -59
  72. package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
  73. package/test/examples/asciiMaze/browser-entry/README.md +196 -0
  74. package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
  75. package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
  76. package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
  77. package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
  78. package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
  79. package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
  80. package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
  81. package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
  82. package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
  83. package/test/examples/asciiMaze/browser-entry.ts +10 -576
  84. package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
  85. package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
  86. package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
  87. package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
  88. package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
  89. package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
  90. package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
  91. package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
  92. package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
  93. package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
  94. package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
  95. package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
  96. package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
  97. package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
  98. package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
  99. package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
  100. package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
  101. package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
  102. package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
  103. package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
  104. package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
  105. package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
  106. package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
  107. package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
  108. package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
  109. package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
  110. package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
  111. package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
  112. package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
  113. package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
  114. package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
  115. package/test/examples/asciiMaze/fitness.ts +2 -2
  116. package/test/examples/asciiMaze/fitness.types.ts +65 -0
  117. package/test/examples/asciiMaze/interfaces.ts +64 -1352
  118. package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
  119. package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
  120. package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
  121. package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
  122. package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
  123. package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
  124. package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
  125. package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
  126. package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
  127. package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
  128. package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
  129. package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
  130. package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
  131. package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
  132. package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
  133. package/test/examples/flappy_bird/README.md +193 -88
  134. package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
  135. package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
  136. package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
  137. package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
  138. package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
  139. package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
  140. package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
  141. package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
  142. package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
  143. package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
  144. package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
  145. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
  146. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
  147. package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
  148. package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
  149. package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
  150. package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
  151. package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
  152. package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
  153. package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
  154. package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
  155. package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
  156. package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
  157. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
  158. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
  159. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
  160. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
  161. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
  162. package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
  163. package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
  164. package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
  165. package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
  166. package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
  167. package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
  168. package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
  169. package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
  170. package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
  171. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
  172. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
  173. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
  174. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
  175. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
  176. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
  177. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
  178. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
  179. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
  180. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
  181. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
  182. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
  183. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
  184. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
  185. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
  186. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
  187. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
  188. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
  189. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
  190. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
  191. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
  192. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
  193. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
  194. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
  195. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
  196. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
  197. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
  198. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
  199. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
  200. package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
  201. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
  202. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
  203. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
  204. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
  205. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
  206. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
  207. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
  208. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
  209. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
  210. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
  211. package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
  212. package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
  213. package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
  214. package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
  215. package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
  216. package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
  217. package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
  218. package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
  219. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
  220. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
  221. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
  222. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
  223. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
  224. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
  225. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
  226. package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
  227. package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
  228. package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
  229. package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
  230. package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
  231. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
  232. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
  233. package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
  234. package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
  235. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
  236. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
  237. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
  238. package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
  239. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
  240. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
  241. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
  242. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
  243. package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
  244. package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
  245. package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
  246. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
  247. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
  248. package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
  249. package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
  250. package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
  251. package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
  252. package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
  253. package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
  254. package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
  255. package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
  256. package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
  257. package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
  258. package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
  259. package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
  260. package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
  261. package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
  262. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
  263. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
  264. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
  265. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
  266. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
  267. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
  268. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
  269. package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
  270. package/test/examples/flappy_bird/constants/README.md +1163 -0
  271. package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
  272. package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
  273. package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
  274. package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
  275. package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
  276. package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
  277. package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
  278. package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
  279. package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
  280. package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
  281. package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
  282. package/test/examples/flappy_bird/constants/constants.ts +6 -0
  283. package/test/examples/flappy_bird/environment/README.md +182 -0
  284. package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
  285. package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
  286. package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
  287. package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
  288. package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
  289. package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
  290. package/test/examples/flappy_bird/evaluation/README.md +155 -0
  291. package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
  292. package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
  293. package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
  294. package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
  295. package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
  296. package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
  297. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
  298. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
  299. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
  300. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
  301. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
  302. package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
  303. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
  304. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
  305. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
  306. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
  307. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
  308. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
  309. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
  310. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
  311. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
  312. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
  313. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
  314. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
  315. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
  316. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
  317. package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
  318. package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
  319. package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
  320. package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
  321. package/test/examples/flappy_bird/index.ts +8 -2
  322. package/test/examples/flappy_bird/rng.ts +10 -0
  323. package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
  324. package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
  325. package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
  326. package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
  327. package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
  328. package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
  329. package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
  330. package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
  331. package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
  332. package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
  333. package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
  334. package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
  335. package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
  336. package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
  337. package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
  338. package/test/examples/flappy_bird/trainer/README.md +676 -0
  339. package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
  340. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
  341. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
  342. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
  343. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
  344. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
  345. package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
  346. package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
  347. package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
  348. package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
  349. package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
  350. package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
  351. package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
  352. package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
  353. package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
  354. package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
  355. package/test/neat/neat.topology-intent.test.ts +129 -0
  356. package/test/network/network.topology-intent.test.ts +44 -0
  357. package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
  358. package/test/examples/flappy_bird/environment/environment.ts +0 -7
  359. package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
  360. package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
  361. package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
@@ -3,13 +3,26 @@ import {
3
3
  FLAPPY_MAX_FRAMES_PER_EPISODE,
4
4
  } from '../constants/constants';
5
5
 
6
- /** Default curriculum difficulty scale used by environment stepping. */
6
+ /**
7
+ * Default curriculum difficulty scale used by environment stepping.
8
+ *
9
+ * A value of `1` means the environment uses the full adaptive difficulty ramp.
10
+ */
7
11
  export const FLAPPY_ENVIRONMENT_DEFAULT_DIFFICULTY_SCALE = 1;
8
12
 
9
- /** Default number of control/physics substeps executed per simulation frame. */
13
+ /**
14
+ * Default number of control/physics substeps executed per simulation frame.
15
+ *
16
+ * Reusing the shared control-substep count keeps the environment and browser
17
+ * playback aligned on the same stepping granularity.
18
+ */
10
19
  export const FLAPPY_ENVIRONMENT_DEFAULT_CONTROL_SUBSTEPS_PER_FRAME =
11
20
  FLAPPY_CONTROL_SUBSTEPS_PER_FRAME;
12
21
 
13
- /** Maximum frame budget before the environment forces timeout termination. */
22
+ /**
23
+ * Maximum frame budget before the environment forces timeout termination.
24
+ *
25
+ * Timeouts stop extremely long survival loops from dominating evaluation cost.
26
+ */
14
27
  export const FLAPPY_ENVIRONMENT_MAX_FRAMES_PER_EPISODE =
15
28
  FLAPPY_MAX_FRAMES_PER_EPISODE;
@@ -23,6 +23,12 @@ import type {
23
23
  /**
24
24
  * Generate the network observation vector for the current state.
25
25
  *
26
+ * Educational note:
27
+ * This helper is the environment-facing bridge into the shared observation
28
+ * system. It keeps the environment API simple while ensuring evaluation,
29
+ * training, and browser playback all derive their policy inputs from the same
30
+ * feature definitions.
31
+ *
26
32
  * Observation (12 numbers):
27
33
  * 1) bird y position normalized to [0, 1]
28
34
  * 2) bird vertical velocity normalized to [-1, 1]
@@ -53,6 +59,11 @@ export function getFlappyObservation(
53
59
  /**
54
60
  * Resolve structured observation features for policy input and reward shaping.
55
61
  *
62
+ * @example
63
+ * ```ts
64
+ * const features = getFlappyObservationFeatures(state, 1);
65
+ * ```
66
+ *
56
67
  * @param state - Current state.
57
68
  * @param difficultyScale - Curriculum difficulty scale in [0, 1].
58
69
  * @returns Named feature object.
@@ -61,7 +72,7 @@ export function getFlappyObservationFeatures(
61
72
  state: FlappyGameState,
62
73
  difficultyScale: FlappyDifficultyScale = FLAPPY_ENVIRONMENT_DEFAULT_DIFFICULTY_SCALE,
63
74
  ): FlappyObservationFeatures {
64
- const difficultyProfile = resolveDifficultyProfile(
75
+ const difficultyProfile = resolveAdaptiveDifficultyProfile(
65
76
  state.pipesPassed,
66
77
  difficultyScale,
67
78
  );
@@ -84,21 +95,3 @@ export function getFlappyObservationFeatures(
84
95
  normalizationEpsilon: FLAPPY_NORMALIZATION_EPSILON,
85
96
  });
86
97
  }
87
-
88
- /**
89
- * Resolves adaptive difficulty parameters from current progress.
90
- *
91
- * @param pipesPassed - Number of pipes passed by the active bird.
92
- * @param difficultyScale - Curriculum difficulty scale in [0, 1].
93
- * @returns Runtime difficulty profile.
94
- */
95
- function resolveDifficultyProfile(
96
- pipesPassed: number,
97
- difficultyScale: FlappyDifficultyScale = FLAPPY_ENVIRONMENT_DEFAULT_DIFFICULTY_SCALE,
98
- ): {
99
- pipeGapPx: number;
100
- pipeSpeedPxPerFrame: number;
101
- pipeSpawnIntervalFrames: number;
102
- } {
103
- return resolveAdaptiveDifficultyProfile(pipesPassed, difficultyScale);
104
- }
@@ -16,6 +16,16 @@ import type { FlappyGameState } from './environment.types';
16
16
  /**
17
17
  * Create a fresh Flappy Bird episode state.
18
18
  *
19
+ * Educational note:
20
+ * A new episode starts with one initial pipe already materialized so the first
21
+ * observation is meaningful immediately. That avoids a cold-start phase where a
22
+ * policy would receive mostly empty-space inputs.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const state = createInitialFlappyState(rng);
27
+ * ```
28
+ *
19
29
  * @param rng - Random source used to generate initial pipe configuration.
20
30
  * @returns Initial state for one deterministic rollout.
21
31
  */
@@ -28,10 +28,14 @@ import type {
28
28
  /**
29
29
  * Advance the simulation by one frame.
30
30
  *
31
+ * This is the simplest stepping surface: one logical frame and one flap choice.
32
+ * More advanced callers can use the control-substep variant below.
33
+ *
31
34
  * @param state - Mutable state object to update in-place.
32
35
  * @param rng - Random source used to spawn pipes.
33
36
  * @param flap - If true, applies an upward velocity impulse.
34
37
  * @param difficultyScale - Curriculum difficulty scale in [0, 1].
38
+ * @returns Nothing.
35
39
  */
36
40
  export function stepFlappyState(
37
41
  state: FlappyGameState,
@@ -54,6 +58,14 @@ export function stepFlappyState(
54
58
  * This allows policies to react multiple times before `frameIndex` advances,
55
59
  * improving responsiveness in high-difficulty scenarios.
56
60
  *
61
+ * Educational note:
62
+ * Splitting a logical frame into smaller control steps is a simple numerical
63
+ * stability trick. It reduces the chance that fast pipes or large velocity
64
+ * updates make the environment feel artificially coarse.
65
+ *
66
+ * For background reading, the Wikipedia article on "numerical integration"
67
+ * provides the general idea behind updating continuous motion in small steps.
68
+ *
57
69
  * @param state - Mutable state object to update in-place.
58
70
  * @param rng - Random source used to spawn pipes.
59
71
  * @param shouldFlapForSubstep - Callback deciding flap action per substep.
@@ -70,7 +82,7 @@ export function stepFlappyStateWithControlSubsteps(
70
82
  ): void {
71
83
  if (state.done) return;
72
84
 
73
- const difficultyProfile = resolveDifficultyProfile(
85
+ const difficultyProfile = resolveAdaptiveDifficultyProfile(
74
86
  state.pipesPassed,
75
87
  difficultyScale,
76
88
  );
@@ -105,12 +117,12 @@ export function stepFlappyStateWithControlSubsteps(
105
117
 
106
118
  state.framesUntilNextPipeSpawn -= substepDelta;
107
119
  if (state.framesUntilNextPipeSpawn <= 0) {
108
- const nextGapSizePx = resolveLocalNextSpawnGapSize(
120
+ const nextGapSizePx = resolveNextSpawnGapSize(
109
121
  state.lastSpawnedPipeGapPx,
110
122
  difficultyProfile,
111
123
  rng,
112
124
  );
113
- const nextSpawnIntervalFrames = resolveLocalNextSpawnIntervalFrames(
125
+ const nextSpawnIntervalFrames = resolveNextSpawnIntervalFrames(
114
126
  state.lastSpawnedPipeSpawnIntervalFrames,
115
127
  difficultyProfile,
116
128
  );
@@ -145,66 +157,3 @@ export function stepFlappyStateWithControlSubsteps(
145
157
  state.doneReason = 'timeout';
146
158
  }
147
159
  }
148
-
149
- /**
150
- * Resolves adaptive difficulty parameters from current progress.
151
- *
152
- * @param pipesPassed - Number of pipes passed by the active bird.
153
- * @param difficultyScale - Curriculum difficulty scale in [0, 1].
154
- * @returns Runtime difficulty profile.
155
- */
156
- function resolveDifficultyProfile(
157
- pipesPassed: number,
158
- difficultyScale: FlappyDifficultyScale = FLAPPY_ENVIRONMENT_DEFAULT_DIFFICULTY_SCALE,
159
- ): {
160
- pipeGapPx: number;
161
- pipeSpeedPxPerFrame: number;
162
- pipeSpawnIntervalFrames: number;
163
- } {
164
- return resolveAdaptiveDifficultyProfile(pipesPassed, difficultyScale);
165
- }
166
-
167
- /**
168
- * Resolve the next spawned pipe gap with progressive wide-to-hard shrink and jitter.
169
- *
170
- * @param previousSpawnGapPx - Most recently spawned gap size.
171
- * @param difficultyProfile - Current adaptive profile.
172
- * @param rng - Random source.
173
- * @returns Gap size for the next pipe.
174
- */
175
- function resolveLocalNextSpawnGapSize(
176
- previousSpawnGapPx: number | undefined,
177
- difficultyProfile: {
178
- pipeGapPx: number;
179
- pipeSpeedPxPerFrame: number;
180
- pipeSpawnIntervalFrames: number;
181
- },
182
- rng: FlappyRng,
183
- ): number {
184
- return resolveNextSpawnGapSize(
185
- previousSpawnGapPx,
186
- difficultyProfile as SharedDifficultyProfile,
187
- rng,
188
- );
189
- }
190
-
191
- /**
192
- * Resolve the next spawned pipe interval with progressive wide-to-hard shrink.
193
- *
194
- * @param previousSpawnIntervalFrames - Most recently spawned interval.
195
- * @param difficultyProfile - Current adaptive profile.
196
- * @returns Spawn interval for the next pipe.
197
- */
198
- function resolveLocalNextSpawnIntervalFrames(
199
- previousSpawnIntervalFrames: number | undefined,
200
- difficultyProfile: {
201
- pipeGapPx: number;
202
- pipeSpeedPxPerFrame: number;
203
- pipeSpawnIntervalFrames: number;
204
- },
205
- ): number {
206
- return resolveNextSpawnIntervalFrames(
207
- previousSpawnIntervalFrames,
208
- difficultyProfile as SharedDifficultyProfile,
209
- );
210
- }
@@ -5,6 +5,9 @@ import type { SharedObservationFeatures } from '../flappy.simulation.shared.util
5
5
  *
6
6
  * Pipes move from right to left. The bird scores once per pipe when the pipe
7
7
  * completely crosses the bird x-position.
8
+ *
9
+ * This is the environment-owned pipe state, distinct from the packed snapshot
10
+ * transport shapes used by the browser worker.
8
11
  */
9
12
  export interface FlappyPipe {
10
13
  /** Horizontal position of the left edge (pixels). */
@@ -22,6 +25,9 @@ export interface FlappyPipe {
22
25
 
23
26
  /**
24
27
  * Bird kinematic state for one simulation frame.
28
+ *
29
+ * The environment keeps only the minimum physics state needed to advance the
30
+ * episode: vertical position and vertical velocity.
25
31
  */
26
32
  export interface FlappyBird {
27
33
  /** Vertical position (pixels). */
@@ -33,6 +39,11 @@ export interface FlappyBird {
33
39
 
34
40
  /**
35
41
  * Full simulation state for one Flappy episode.
42
+ *
43
+ * Educational note:
44
+ * This is the canonical single-episode world state used by evaluation and some
45
+ * trainer-facing helpers. It is intentionally compact so stepping the world is
46
+ * deterministic and easy to inspect.
36
47
  */
37
48
  export interface FlappyGameState {
38
49
  /** Current frame counter (0-based). */
@@ -84,5 +95,8 @@ export type FlappyObservationFeatures = SharedObservationFeatures;
84
95
  *
85
96
  * - `0` means easiest profile (wide gaps, slower pipes).
86
97
  * - `1` means fully adaptive profile based on passed pipes.
98
+ *
99
+ * Values between `0` and `1` interpolate between those extremes, which lets the
100
+ * trainer or environment caller dial curriculum strength continuously.
87
101
  */
88
102
  export type FlappyDifficultyScale = number;
@@ -0,0 +1,155 @@
1
+ # evaluation
2
+
3
+ ## evaluation/evaluation.types.ts
4
+
5
+ ### FlappyEpisodeResult
6
+
7
+ Summary metrics for a single Flappy episode rollout.
8
+
9
+ The result intentionally keeps both a single scalar `fitness` and the channel
10
+ breakdown that produced it, which makes reward debugging much easier.
11
+
12
+ ### FlappyNetworkLike
13
+
14
+ Minimal network contract required by Flappy evaluation.
15
+
16
+ The evaluation layer depends only on activation plus an optional stable id
17
+ used for deterministic seed mixing.
18
+
19
+ ### FlappyRolloutOptions
20
+
21
+ Runtime controls for one rollout evaluation.
22
+
23
+ This is the public control surface for evaluation callers. The rollout layer
24
+ later normalizes these options into execution-safe context values.
25
+
26
+ ### FlappySeedBatchEvaluation
27
+
28
+ Aggregate statistics from evaluating one network across shared seeds.
29
+
30
+ These statistics are the trainer-facing view of evaluation quality: mean,
31
+ median, $p90$, stability, and average gameplay progress.
32
+
33
+ ## evaluation/evaluation.constants.ts
34
+
35
+ ### evaluation.constants
36
+
37
+ Default difficulty scale for rollouts when caller does not provide one.
38
+
39
+ A value of `1` means full adaptive difficulty is enabled during evaluation.
40
+
41
+ ### FLAPPY_EVALUATION_DEFAULT_DIFFICULTY_SCALE
42
+
43
+ ### FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_CONSECUTIVE_FRAMES
44
+
45
+ ### FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_GRACE_FRAMES
46
+
47
+ ### FLAPPY_EVALUATION_DEFAULT_PIPE_PROGRESS_TARGET
48
+
49
+ ### FLAPPY_EVALUATION_DENSE_SHAPING_FRAMES_NORMALIZER
50
+
51
+ ### FLAPPY_EVALUATION_NORMALIZED_DENSE_WEIGHT
52
+
53
+ ### FLAPPY_EVALUATION_NORMALIZED_PROGRESS_WEIGHT
54
+
55
+ ### FLAPPY_EVALUATION_NORMALIZED_SURVIVAL_WEIGHT
56
+
57
+ ### FLAPPY_EVALUATION_NORMALIZED_TERMINAL_WEIGHT
58
+
59
+ ### FLAPPY_EVALUATION_ROBUST_STDDEV_PENALTY
60
+
61
+ ### FLAPPY_EVALUATION_SEED_MIX_MULTIPLIER_A
62
+
63
+ ### FLAPPY_EVALUATION_SEED_MIX_MULTIPLIER_B
64
+
65
+ ### FLAPPY_EVALUATION_SEED_MIX_XOR_SALT
66
+
67
+ ### FLAPPY_EVALUATION_UNRECOVERABLE_ABOVE_GAP_DELTA
68
+
69
+ ### FLAPPY_EVALUATION_UNRECOVERABLE_BELOW_GAP_DELTA
70
+
71
+ ### FLAPPY_EVALUATION_UNRECOVERABLE_CLEARANCE_THRESHOLD
72
+
73
+ ### FLAPPY_EVALUATION_UNRECOVERABLE_FALLING_VELOCITY
74
+
75
+ ### FLAPPY_EVALUATION_UNRECOVERABLE_RISING_VELOCITY
76
+
77
+ ## evaluation/evaluation.rollout.service.ts
78
+
79
+ ### evaluation.rollout.service
80
+
81
+ Public rollout compatibility facade.
82
+
83
+ Keeping this file at the evaluation layer preserves the established import
84
+ path while the actual rollout orchestration lives behind the dedicated
85
+ rollout-owned module boundary.
86
+
87
+ This is the public evaluation-layer shelf for callers that should not need to
88
+ know about the rollout subfolder layout.
89
+
90
+ ### rolloutEpisode
91
+
92
+ `(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, rolloutOptions: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyRolloutOptions) => import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyEpisodeResult`
93
+
94
+ Roll out an episode and return details.
95
+
96
+ Parameters:
97
+ - `network` - - Genome/network to evaluate.
98
+ - `rolloutOptions` - - Optional rollout controls.
99
+
100
+ Returns: Episode result details.
101
+
102
+ ## evaluation/evaluation.seed.utils.ts
103
+
104
+ ### mixGenomeEvaluationSeed
105
+
106
+ `(genomeId: number) => number`
107
+
108
+ Mixes a genome identifier into a stable uint32 rollout seed.
109
+
110
+ This keeps evaluation deterministic per genome while still spreading nearby
111
+ genome ids across the RNG state space to reduce correlated rollouts.
112
+
113
+ If you want background reading, the Wikipedia article on "hash function"
114
+ gives a reasonable intuition for why a few avalanche-style mixing steps help
115
+ nearby ids map to less-correlated seed values.
116
+
117
+ Parameters:
118
+ - `genomeId` - - Genome id from NEAT bookkeeping.
119
+
120
+ Returns: Mixed uint32 seed.
121
+
122
+ ## evaluation/evaluation.fitness.utils.ts
123
+
124
+ ### evaluateFlappyFitness
125
+
126
+ `(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, rolloutOptions: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyRolloutOptions) => number`
127
+
128
+ Evaluate a network on a single deterministic Flappy Bird episode.
129
+
130
+ This is the simplest evaluation entrypoint: one policy, one rollout, one
131
+ scalar fitness.
132
+
133
+ Parameters:
134
+ - `network` - - Genome/network to evaluate.
135
+ - `rolloutOptions` - - Optional rollout controls.
136
+
137
+ Returns: Fitness score (higher is better).
138
+
139
+ ### evaluateFlappyFitnessAcrossSeeds
140
+
141
+ `(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, sharedSeeds: readonly number[], rolloutOptions: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyRolloutOptions) => import("test/examples/flappy_bird/evaluation/evaluation.types").FlappySeedBatchEvaluation`
142
+
143
+ Evaluate a network on a shared batch of deterministic seeds.
144
+
145
+ Educational note:
146
+ Shared-seed evaluation reduces luck. Every genome in the same comparison set
147
+ sees the same rollout seeds, which makes the aggregate statistics much more
148
+ useful for selection than a single lucky episode.
149
+
150
+ Parameters:
151
+ - `network` - - Genome/network to evaluate.
152
+ - `sharedSeeds` - - Shared deterministic seeds used for all genomes.
153
+ - `rolloutOptions` - - Optional rollout controls.
154
+
155
+ Returns: Robust aggregate metrics for selection/ranking.
@@ -1,4 +1,8 @@
1
- /** Default difficulty scale for rollouts when caller does not provide one. */
1
+ /**
2
+ * Default difficulty scale for rollouts when caller does not provide one.
3
+ *
4
+ * A value of `1` means full adaptive difficulty is enabled during evaluation.
5
+ */
2
6
  export const FLAPPY_EVALUATION_DEFAULT_DIFFICULTY_SCALE = 1;
3
7
 
4
8
  /** Default grace period (frames) before early termination checks begin. */
@@ -7,7 +11,12 @@ export const FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_GRACE_FRAMES = 160;
7
11
  /** Default consecutive unrecoverable frames required for early termination. */
8
12
  export const FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_CONSECUTIVE_FRAMES = 24;
9
13
 
10
- /** Default pipe-progress target used when normalizing rollout fitness. */
14
+ /**
15
+ * Default pipe-progress target used when normalizing rollout fitness.
16
+ *
17
+ * This target anchors the progress channel so normalization remains meaningful
18
+ * even when individual episodes vary widely in difficulty and duration.
19
+ */
11
20
  export const FLAPPY_EVALUATION_DEFAULT_PIPE_PROGRESS_TARGET = 20;
12
21
 
13
22
  /** Dense shaping normalization factor per survived frame. */
@@ -25,7 +34,12 @@ export const FLAPPY_EVALUATION_NORMALIZED_DENSE_WEIGHT = 1_200;
25
34
  /** Terminal-shaping channel weight in normalized fitness composition. */
26
35
  export const FLAPPY_EVALUATION_NORMALIZED_TERMINAL_WEIGHT = 600;
27
36
 
28
- /** Robust fitness penalty multiplier applied to standard deviation. */
37
+ /**
38
+ * Robust fitness penalty multiplier applied to standard deviation.
39
+ *
40
+ * A higher value penalizes instability more strongly when computing robust
41
+ * fitness from a shared-seed batch.
42
+ */
29
43
  export const FLAPPY_EVALUATION_ROBUST_STDDEV_PENALTY = 0.35;
30
44
 
31
45
  /** Unrecoverable clearance threshold used by early termination heuristic. */
@@ -43,7 +57,12 @@ export const FLAPPY_EVALUATION_UNRECOVERABLE_ABOVE_GAP_DELTA = -0.45;
43
57
  /** Rising-speed threshold used by early termination heuristic. */
44
58
  export const FLAPPY_EVALUATION_UNRECOVERABLE_RISING_VELOCITY = -0.5;
45
59
 
46
- /** Seed-mix additive constant used to decorrelate nearby genome ids. */
60
+ /**
61
+ * Seed-mix additive constant used to decorrelate nearby genome ids.
62
+ *
63
+ * Together with the multiplicative constants below, this creates a small
64
+ * avalanche-style mixing pipeline for deterministic seed derivation.
65
+ */
47
66
  export const FLAPPY_EVALUATION_SEED_MIX_XOR_SALT = 0x9e3779b9;
48
67
 
49
68
  /** Seed-mix first multiplicative avalanche constant. */
@@ -9,11 +9,14 @@ import {
9
9
  computeMean,
10
10
  computePercentile,
11
11
  computePopulationStandardDeviation,
12
- } from './evaluation.statistics.utils';
12
+ } from '../flappy.simulation.shared.utils';
13
13
 
14
14
  /**
15
15
  * Evaluate a network on a single deterministic Flappy Bird episode.
16
16
  *
17
+ * This is the simplest evaluation entrypoint: one policy, one rollout, one
18
+ * scalar fitness.
19
+ *
17
20
  * @param network - Genome/network to evaluate.
18
21
  * @param rolloutOptions - Optional rollout controls.
19
22
  * @returns Fitness score (higher is better).
@@ -28,6 +31,18 @@ export function evaluateFlappyFitness(
28
31
  /**
29
32
  * Evaluate a network on a shared batch of deterministic seeds.
30
33
  *
34
+ * Educational note:
35
+ * Shared-seed evaluation reduces luck. Every genome in the same comparison set
36
+ * sees the same rollout seeds, which makes the aggregate statistics much more
37
+ * useful for selection than a single lucky episode.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const aggregate = evaluateFlappyFitnessAcrossSeeds(network, [11, 22, 33], {
42
+ * normalizeFitness: true,
43
+ * });
44
+ * ```
45
+ *
31
46
  * @param network - Genome/network to evaluate.
32
47
  * @param sharedSeeds - Shared deterministic seeds used for all genomes.
33
48
  * @param rolloutOptions - Optional rollout controls.