@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
@@ -1,3 +1,10 @@
1
1
  /// <reference lib="webworker" />
2
2
 
3
+ /**
4
+ * Browser-worker entrypoint for the Flappy Bird example.
5
+ *
6
+ * This file is intentionally tiny. Its job is only to establish the Web Worker
7
+ * bundle boundary and delegate all real protocol, evolution, and playback logic
8
+ * to the dedicated `flappy-evolution-worker/` folder.
9
+ */
3
10
  import './flappy-evolution-worker/flappy-evolution-worker';
@@ -1,8 +1,14 @@
1
1
  /**
2
2
  * Flappy Bird example exports.
3
3
  *
4
- * This folder contains a minimal Flappy Bird–style environment and a NEAT
5
- * training script that uses NeatapticTS (this repo) as the neuroevolution engine.
4
+ * This folder contains a Flappy Bird control environment, a deterministic
5
+ * evaluation pipeline, and a browser/worker playback stack built on top of this
6
+ * repository's NeatapticTS implementation.
7
+ *
8
+ * Educational note:
9
+ * Treat this file as the example's "public shelf." It re-exports the pieces a
10
+ * learner is most likely to reach for first: constants, random utilities,
11
+ * environment stepping, and evaluation helpers.
6
12
  */
7
13
 
8
14
  export * from './constants/constants';
@@ -3,6 +3,9 @@
3
3
  *
4
4
  * Using a local RNG keeps evaluations reproducible regardless of global
5
5
  * `Math.random()` state and makes comparisons between genomes more stable.
6
+ *
7
+ * If you want background reading, the Wikipedia article on "Xorshift" explains
8
+ * the family of lightweight PRNGs this file uses.
6
9
  */
7
10
 
8
11
  /** Minimal interface needed by the simulation to sample randomness. */
@@ -21,12 +24,19 @@ export interface FlappyRng {
21
24
  /**
22
25
  * Create a deterministic xorshift32 RNG.
23
26
  *
27
+ * Educational note:
28
+ * A tiny local PRNG is enough for this example because the main requirement is
29
+ * repeatability, not cryptographic security. The same seed produces the same
30
+ * pipe sequence, which makes training runs and regression debugging comparable.
31
+ *
24
32
  * @param seed - Unsigned 32-bit seed.
25
33
  * @returns RNG instance.
26
34
  *
27
35
  * @example
36
+ * ```ts
28
37
  * const rng = createXorshift32(123);
29
38
  * rng.nextFloat01();
39
+ * ```
30
40
  */
31
41
  export function createXorshift32(seed: number): FlappyRng {
32
42
  let state = toUint32(seed) || 0x6d2b79f5;
@@ -0,0 +1,518 @@
1
+ # simulation-shared
2
+
3
+ ## simulation-shared/simulation-shared.types.ts
4
+
5
+ ### simulation-shared.types
6
+
7
+ Minimal deterministic random contract used by shared spawn helpers.
8
+
9
+ The shared layer keeps its RNG contract intentionally small so the same spawn
10
+ helpers can work with both Node-side and browser-side deterministic sources.
11
+
12
+ ### SharedDifficultyProfile
13
+
14
+ Shared runtime difficulty profile used by browser and environment simulators.
15
+
16
+ By projecting difficulty into one plain object, the example can keep
17
+ curriculum logic independent from rendering, evaluation, and worker runtime
18
+ concerns.
19
+
20
+ ### SharedObservationFeatures
21
+
22
+ Structured observation features for network input.
23
+
24
+ Educational note:
25
+ These features make the policy input interpretable. The example does not feed
26
+ raw pixels into NEAT; it feeds geometric signals such as distance to the next
27
+ pipe, corridor clearance, and urgency of recovering to the gap center.
28
+
29
+ ### SharedObservationInput
30
+
31
+ Input shape for observation-feature synthesis.
32
+
33
+ This object is the raw world snapshot from which normalized features are
34
+ derived. It intentionally separates world geometry from the later feature
35
+ projection step.
36
+
37
+ ### SharedObservationMemoryState
38
+
39
+ Mutable temporal memory attached to one policy-controlled bird.
40
+
41
+ The memory stores recent core observation frames and recent action history,
42
+ allowing feedforward policies to consume short-term context without adding
43
+ recurrent connections.
44
+
45
+ If you want background reading, the Wikipedia article on "frame stacking"
46
+ captures the basic idea of giving a feed-forward policy a short motion trail
47
+ instead of full recurrent state.
48
+
49
+ ### SharedPipeLike
50
+
51
+ Common pipe shape consumed by observation helpers.
52
+
53
+ This is the narrowest useful pipe contract for feature synthesis: horizontal
54
+ position plus the vertical gap geometry seen by the bird.
55
+
56
+ ### SharedRngLike
57
+
58
+ Minimal deterministic random contract used by shared spawn helpers.
59
+
60
+ The shared layer keeps its RNG contract intentionally small so the same spawn
61
+ helpers can work with both Node-side and browser-side deterministic sources.
62
+
63
+ ## simulation-shared/simulation-shared.errors.ts
64
+
65
+ ### simulation-shared.errors
66
+
67
+ Prefix used when formatting unexpected shared-simulation errors.
68
+
69
+ A stable prefix makes logs easier to scan when multiple Flappy subsystems are
70
+ emitting diagnostics.
71
+
72
+ ### FLAPPY_SHARED_SIMULATION_ERROR_PREFIX
73
+
74
+ ### formatSharedSimulationErrorMessage
75
+
76
+ `(error: unknown) => string`
77
+
78
+ Formats unknown shared-simulation errors for stable logs.
79
+
80
+ Shared utilities are used from several runtime contexts, so this helper keeps
81
+ the error surface human-readable even when the thrown value is not an
82
+ `Error` instance.
83
+
84
+ Parameters:
85
+ - `error` - - Unknown error value.
86
+
87
+ Returns: Readable error message.
88
+
89
+ ## simulation-shared/simulation-shared.constants.ts
90
+
91
+ ### simulation-shared.constants
92
+
93
+ Default curriculum scale used when callers do not provide one.
94
+
95
+ A value of `1` means full adaptive difficulty behavior is enabled.
96
+
97
+ ### FLAPPY_SHARED_DEFAULT_DIFFICULTY_SCALE
98
+
99
+ ### FLAPPY_SHARED_DEFAULT_NORMALIZATION_EPSILON
100
+
101
+ ## simulation-shared/simulation-shared.math.utils.ts
102
+
103
+ ### simulation-shared.math.utils
104
+
105
+ Clamps a numeric value to the inclusive `[min, max]` interval.
106
+
107
+ @param value - Candidate value.
108
+ @param min - Inclusive lower bound.
109
+ @param max - Inclusive upper bound.
110
+ @returns Clamped value.
111
+
112
+ ### clamp
113
+
114
+ `(value: number, min: number, max: number) => number`
115
+
116
+ Internal clamp primitive.
117
+
118
+ Parameters:
119
+ - `value` - - Candidate value.
120
+ - `min` - - Inclusive lower bound.
121
+ - `max` - - Inclusive upper bound.
122
+
123
+ Returns: Clamped value.
124
+
125
+ ### clamp01
126
+
127
+ `(value: number) => number`
128
+
129
+ Clamps a numeric value to the inclusive `[0, 1]` interval.
130
+
131
+ Parameters:
132
+ - `value` - - Candidate value.
133
+
134
+ Returns: Value clamped between 0 and 1.
135
+
136
+ ### clampValue
137
+
138
+ `(value: number, min: number, max: number) => number`
139
+
140
+ Clamps a numeric value to the inclusive `[min, max]` interval.
141
+
142
+ Parameters:
143
+ - `value` - - Candidate value.
144
+ - `min` - - Inclusive lower bound.
145
+ - `max` - - Inclusive upper bound.
146
+
147
+ Returns: Clamped value.
148
+
149
+ ### interpolateValue
150
+
151
+ `(startValue: number, endValue: number, progress: number) => number`
152
+
153
+ Linear interpolation helper.
154
+
155
+ Parameters:
156
+ - `startValue` - - Start value at progress `0`.
157
+ - `endValue` - - End value at progress `1`.
158
+ - `progress` - - Normalized interpolation progress.
159
+
160
+ Returns: Interpolated value.
161
+
162
+ ## simulation-shared/simulation-shared.spawn.utils.ts
163
+
164
+ ### resolveNextSpawnGapCenterY
165
+
166
+ `(previousGapCenterYPx: number, rng: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedRngLike, maximumGapCenterYPx: number) => number`
167
+
168
+ Resolves next gap center with bounded per-pipe delta.
169
+
170
+ Educational note:
171
+ Consecutive gaps are deliberately constrained to avoid unfair zig-zag jumps.
172
+ The environment should still be challenging, but it should not demand an
173
+ impossible vertical correction from one pipe to the next.
174
+
175
+ Parameters:
176
+ - `previousGapCenterYPx` - - Previous spawn gap center.
177
+ - `rng` - - Deterministic RNG.
178
+ - `maximumGapCenterYPx` - - Optional inclusive upper bound for smaller viewports.
179
+
180
+ Returns: Next gap center y-position.
181
+
182
+ ### resolveNextSpawnGapSize
183
+
184
+ `(previousSpawnGapPx: number | undefined, difficultyProfile: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedDifficultyProfile, rng: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedRngLike) => number`
185
+
186
+ Resolves next spawn gap size using progressive shrink and jitter.
187
+
188
+ The gap starts wider than the current hardest target, then shrinks toward the
189
+ active difficulty profile with a small amount of deterministic jitter so runs
190
+ do not feel mechanically repetitive.
191
+
192
+ Parameters:
193
+ - `previousSpawnGapPx` - - Previous spawn gap size.
194
+ - `difficultyProfile` - - Active difficulty profile.
195
+ - `rng` - - Deterministic RNG.
196
+
197
+ Returns: Next spawn gap size.
198
+
199
+ ### resolveNextSpawnIntervalFrames
200
+
201
+ `(previousSpawnIntervalFrames: number | undefined, difficultyProfile: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedDifficultyProfile) => number`
202
+
203
+ Resolves next spawn interval using progressive shrink.
204
+
205
+ This mirrors the gap-size logic: early pipes are spaced more generously, then
206
+ spacing contracts toward the current difficulty target as the episode settles
207
+ into its harder rhythm.
208
+
209
+ Parameters:
210
+ - `previousSpawnIntervalFrames` - - Previous spawn interval.
211
+ - `difficultyProfile` - - Active difficulty profile.
212
+
213
+ Returns: Next spawn interval in frames.
214
+
215
+ ### sampleGapCenterY
216
+
217
+ `(rng: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedRngLike, maximumGapCenterYPx: number) => number`
218
+
219
+ Samples a random gap center y-position.
220
+
221
+ The sampled center is bounded so the resulting pipe gap always remains inside
222
+ the visible play area.
223
+
224
+ Parameters:
225
+ - `rng` - - Deterministic RNG.
226
+ - `maximumGapCenterYPx` - - Optional inclusive upper bound for smaller viewports.
227
+
228
+ Returns: Sampled y-position.
229
+
230
+ ## simulation-shared/simulation-shared.memory.utils.ts
231
+
232
+ ### commitSharedObservationMemoryStep
233
+
234
+ `(observationMemoryState: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationMemoryState, features: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures, didFlap: boolean) => void`
235
+
236
+ Commits one observation-action step into temporal memory.
237
+
238
+ The memory update happens after the decision is made so the next step can see
239
+ both the recent observation context and the action history that produced the
240
+ current trajectory.
241
+
242
+ Parameters:
243
+ - `observationMemoryState` - - Mutable temporal memory for the active bird.
244
+ - `features` - - Structured observation features used for the decision.
245
+ - `didFlap` - - Decision taken at this step.
246
+
247
+ Returns: Nothing.
248
+
249
+ ### createSharedObservationMemoryState
250
+
251
+ `() => import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationMemoryState`
252
+
253
+ Creates an empty temporal observation memory state.
254
+
255
+ Returns: Fresh mutable memory buffers for one bird/controller.
256
+
257
+ ### resolvePreviousCoreFramesWithPadding
258
+
259
+ `(observationMemoryState: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationMemoryState) => number[][]`
260
+
261
+ Resolves previous core frames (newest-first) with deterministic zero padding.
262
+
263
+ Zero padding keeps the policy input width stable during the first few frames
264
+ of an episode before enough history has accumulated.
265
+
266
+ Parameters:
267
+ - `observationMemoryState` - - Mutable temporal memory for the active bird.
268
+
269
+ Returns: Previous core frame list with fixed target length.
270
+
271
+ ### resolveTemporalObservationVector
272
+
273
+ `(features: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures, observationMemoryState: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationMemoryState) => number[]`
274
+
275
+ Builds the temporal policy input vector (stacked observation + action memory).
276
+
277
+ Educational note:
278
+ This helper turns an interpretable feature object into the exact flat vector a
279
+ feed-forward network consumes. That is why the output layout is documented so
280
+ explicitly: changing the order would change the meaning of every trained
281
+ weight in the policy.
282
+
283
+ Output layout:
284
+ 1) current core observation frame
285
+ 2) previous core frames (newest to oldest) with zero padding
286
+ 3) last-action channel
287
+ 4) recent flap-rate channel over a fixed window
288
+
289
+ Parameters:
290
+ - `features` - - Structured observation features for the current decision step.
291
+ - `observationMemoryState` - - Mutable temporal memory for the active bird.
292
+
293
+ Returns: Ordered temporal input vector for policy activation.
294
+
295
+ ### resolveZeroCoreObservationFrame
296
+
297
+ `() => number[]`
298
+
299
+ Builds a zero-valued core frame with canonical length.
300
+
301
+ Returns: Zero core frame.
302
+
303
+ ## simulation-shared/simulation-shared.control.utils.ts
304
+
305
+ ### simulation-shared.control.utils
306
+
307
+ Resolves flap/no-flap decision from network outputs.
308
+
309
+ Educational note:
310
+ The shared control layer accepts both two-output competitive policies
311
+ (`no flap` vs `flap`) and simpler single-output thresholded policies. That
312
+ flexibility makes the helper reusable across experiments without forcing every
313
+ caller to reshape its outputs first.
314
+
315
+ @param rawOutputs - Activation output payload.
316
+ @param flapThreshold - Scalar threshold for single-output policies.
317
+ @returns True when flap should trigger.
318
+
319
+ ### resolveFlapDecision
320
+
321
+ `(rawOutputs: unknown, flapThreshold: number) => boolean`
322
+
323
+ Resolves flap/no-flap decision from network outputs.
324
+
325
+ Educational note:
326
+ The shared control layer accepts both two-output competitive policies
327
+ (`no flap` vs `flap`) and simpler single-output thresholded policies. That
328
+ flexibility makes the helper reusable across experiments without forcing every
329
+ caller to reshape its outputs first.
330
+
331
+ Parameters:
332
+ - `rawOutputs` - - Activation output payload.
333
+ - `flapThreshold` - - Scalar threshold for single-output policies.
334
+
335
+ Returns: True when flap should trigger.
336
+
337
+ ## simulation-shared/simulation-shared.difficulty.utils.ts
338
+
339
+ ### resolveAdaptiveDifficultyProfile
340
+
341
+ `(pipesPassed: number, difficultyScale: number) => import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedDifficultyProfile`
342
+
343
+ Resolves adaptive difficulty profile from passed-pipe progress.
344
+
345
+ Educational note:
346
+ Difficulty is ramped as a smooth profile rather than as a sequence of hard
347
+ level jumps. That keeps the task readable for humans and less noisy for
348
+ evolution.
349
+
350
+ The idea is closely related to curriculum learning: easier versions of the
351
+ task dominate early, then the example interpolates toward the harder target
352
+ settings as progress increases.
353
+
354
+ Parameters:
355
+ - `pipesPassed` - - Number of passed pipes.
356
+ - `difficultyScale` - - Curriculum scale in `[0, 1]`.
357
+
358
+ Returns: Active difficulty profile.
359
+
360
+ ## simulation-shared/simulation-shared.statistics.utils.ts
361
+
362
+ ### compareNumbersAscending
363
+
364
+ `(leftValue: number, rightValue: number) => number`
365
+
366
+ Compares two numeric values in ascending order.
367
+
368
+ Parameters:
369
+ - `leftValue` - - Left numeric value.
370
+ - `rightValue` - - Right numeric value.
371
+
372
+ Returns: Comparator delta for `Array.prototype.toSorted`.
373
+
374
+ ### computeMean
375
+
376
+ `(values: readonly number[]) => number`
377
+
378
+ Computes arithmetic mean for numeric samples.
379
+
380
+ Parameters:
381
+ - `values` - - Numeric samples.
382
+
383
+ Returns: Arithmetic mean.
384
+
385
+ ### computePercentile
386
+
387
+ `(values: readonly number[], percentile: number) => number`
388
+
389
+ Computes percentile value via linear interpolation between nearest ranks.
390
+
391
+ Percentiles are useful in the trainer because they reveal whether strong
392
+ performance is broad across the population or concentrated in a single outlier.
393
+
394
+ Parameters:
395
+ - `values` - - Numeric samples.
396
+ - `percentile` - - Percentile in [0, 1].
397
+
398
+ Returns: Percentile value, or `Number.NaN` when `values` is empty.
399
+
400
+ ### computePopulationStandardDeviation
401
+
402
+ `(values: readonly number[], meanValue: number) => number`
403
+
404
+ Computes population standard deviation.
405
+
406
+ This uses population variance rather than sample variance because the trainer
407
+ is summarizing the whole evolved population for that generation, not estimating
408
+ a larger hidden distribution from a subsample.
409
+
410
+ Parameters:
411
+ - `values` - - Numeric samples.
412
+ - `meanValue` - - Precomputed mean.
413
+
414
+ Returns: Population standard deviation.
415
+
416
+ ## simulation-shared/simulation-shared.observation.utils.ts
417
+
418
+ ### simulation-shared.observation.utils
419
+
420
+ Shared observation compatibility façade.
421
+
422
+ The observation implementation now lives under `simulation-shared/observation/`
423
+ so feature synthesis and vector projection can evolve behind a focused module
424
+ boundary. This file stays as the stable import path for existing callers.
425
+
426
+ That split keeps the high-level import path simple while allowing the
427
+ observation subsystem to grow into its own documented folder.
428
+
429
+ ### resolveCoreObservationVectorFromFeatures
430
+
431
+ `(features: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures) => number[]`
432
+
433
+ Resolves the compact core vector used for temporal stacking.
434
+
435
+ The core intentionally keeps directly observed kinematic and geometric
436
+ channels while dropping derived one-step predictors that become redundant
437
+ once short-term temporal memory is available.
438
+
439
+ This is the representation used when the example wants a short history of raw
440
+ observation slices. The idea is similar to frame stacking in reinforcement
441
+ learning: a feed-forward policy can recover some sense of motion by looking
442
+ at several recent compact frames at once.
443
+
444
+ The Wikipedia article on "frame stacking" is a useful conceptual reference.
445
+
446
+ Parameters:
447
+ - `features` - - Structured observation features.
448
+
449
+ Returns: Core per-frame vector.
450
+
451
+ ### resolveObservationFeatures
452
+
453
+ `(input: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationInput) => import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures`
454
+
455
+ Builds the shared normalized observation feature set consumed by policies.
456
+
457
+ Educational note:
458
+ This helper stays focused on semantic feature assembly only. Projection into
459
+ the canonical network vectors now lives in the neighboring vector module so
460
+ observation policy and network-shape concerns can evolve independently.
461
+
462
+ The features deliberately mix three kinds of signal:
463
+ 1. Current state, such as bird height and vertical velocity.
464
+ 2. Near-term geometry, such as gap bounds and upcoming-pipe distances.
465
+ 3. Simple forward-looking control hints, such as urgency and one-flap
466
+ reachability.
467
+
468
+ This is a compact example of feature engineering for control. Instead of
469
+ asking NEAT to rediscover basic geometry from raw sensory input, the example
470
+ hands the network semantically meaningful signals and lets evolution focus on
471
+ policy search.
472
+
473
+ For broader context, the Wikipedia article on "feature engineering" is a
474
+ good companion reference.
475
+
476
+ Parameters:
477
+ - `input` - - Observation input bundle.
478
+
479
+ Returns: Structured observation features.
480
+
481
+ ### resolveObservationVectorFromFeatures
482
+
483
+ `(features: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures) => number[]`
484
+
485
+ Converts observation features to the canonical 12-value network input vector.
486
+
487
+ Educational note:
488
+ This module owns the network-shape projection so feature semantics can change
489
+ independently from how the policy input is ordered.
490
+
491
+ The 12-value vector is the compact feed-forward policy input used by the main
492
+ evaluation and training flow. Its ordering is stable on purpose: once a
493
+ network topology has evolved against one input layout, silent channel
494
+ reshuffles would invalidate learned behavior.
495
+
496
+ Parameters:
497
+ - `features` - - Structured feature object.
498
+
499
+ Returns: Ordered feature vector.
500
+
501
+ ### resolveUpcomingPipes
502
+
503
+ `(pipes: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedPipeLike[], birdCenterXPx: number, birdRadiusPx: number, pipeWidthPx: number) => [import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedPipeLike | undefined, import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedPipeLike | undefined]`
504
+
505
+ Resolves the next two upcoming pipes in front of the bird.
506
+
507
+ The observation pipeline only cares about the immediate near future, because
508
+ Flappy Bird decisions are dominated by the next gap and the transition after
509
+ it. Looking further ahead adds noise faster than it adds useful control
510
+ signal.
511
+
512
+ Parameters:
513
+ - `pipes` - - Current pipe list.
514
+ - `birdCenterXPx` - - Bird center x-position.
515
+ - `birdRadiusPx` - - Bird radius.
516
+ - `pipeWidthPx` - - Pipe width.
517
+
518
+ Returns: Tuple of first and second upcoming pipes.