@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
@@ -0,0 +1,95 @@
1
+ # mazeMovement/runtime
2
+
3
+ ## mazeMovement/runtime/mazeMovement.runtime.ts
4
+
5
+ ### mazeMovement.runtime
6
+
7
+ Runtime/environment helpers for the dedicated mazeMovement module.
8
+
9
+ This file owns the low-level simulation primitives that do not define maze
10
+ policy: cell-open checks, distance lookup, run-state creation, visit-ring
11
+ bookkeeping, and perception-state updates.
12
+
13
+ ### buildMazeMovementVisionAndDistance
14
+
15
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, encodedMaze: number[][], exitPos: readonly [number, number], distanceMap: number[][] | undefined) => void`
16
+
17
+ Build the current perception vector and update distance-tracking state.
18
+
19
+ Parameters:
20
+ - `state` - - Mutable simulation state for the active run.
21
+ - `encodedMaze` - - Maze grid used for perception and distance lookup.
22
+ - `exitPos` - - Goal coordinate for the current run.
23
+ - `distanceMap` - - Optional precomputed distance map.
24
+
25
+ ### createMazeMovementRunState
26
+
27
+ `(encodedMaze: number[][], startPos: readonly [number, number], distanceMap: number[][] | undefined, maxSteps: number) => import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState`
28
+
29
+ Create the initial run-state object for one simulation episode.
30
+
31
+ Parameters:
32
+ - `encodedMaze` - - Maze grid used by the run.
33
+ - `startPos` - - Starting coordinate.
34
+ - `distanceMap` - - Optional precomputed distance map.
35
+ - `maxSteps` - - Maximum number of allowed simulation steps.
36
+
37
+ Returns: Fresh simulation state backed by the shared buffer pools.
38
+
39
+ ### getMazeMovementDistance
40
+
41
+ `(encodedMaze: readonly (readonly number[])[], __1: readonly [number, number], distanceMap: number[][] | undefined) => number`
42
+
43
+ Resolve the current distance value for a maze coordinate.
44
+
45
+ Parameters:
46
+ - `encodedMaze` - - Maze grid aligned with the optional distance map.
47
+ - `coordinates` - - Zero-based `[x, y]` coordinate tuple.
48
+ - `distanceMap` - - Optional precomputed distance map.
49
+
50
+ Returns: Finite distance when present, otherwise `Infinity`.
51
+
52
+ ### getMazeMovementHistoryFromEnd
53
+
54
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, nth: number) => number | undefined`
55
+
56
+ Return the `nth` most recent cell index from the visit-history ring.
57
+
58
+ Parameters:
59
+ - `state` - - Mutable simulation state containing the ring buffer.
60
+ - `nth` - - One-based index from the history tail.
61
+
62
+ Returns: The requested cell index or `undefined` when out of range.
63
+
64
+ ### isMazeMovementCellOpen
65
+
66
+ `(encodedMaze: readonly (readonly number[])[], x: number, y: number, coordinateScratch: Int32Array<ArrayBufferLike>) => boolean`
67
+
68
+ Determine whether a maze cell is inside bounds and not a wall.
69
+
70
+ Parameters:
71
+ - `encodedMaze` - - Maze grid to inspect.
72
+ - `x` - - Zero-based maze column.
73
+ - `y` - - Zero-based maze row.
74
+ - `coordinateScratch` - - Reused integer scratch buffer for coordinate coercion.
75
+
76
+ Returns: True when the target cell is within bounds and open.
77
+
78
+ ### pushMazeMovementHistory
79
+
80
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, cellIndex: number) => void`
81
+
82
+ Push a cell index into the circular visit-history ring.
83
+
84
+ Parameters:
85
+ - `state` - - Mutable simulation state containing the ring buffer.
86
+ - `cellIndex` - - Linearized cell index to append.
87
+
88
+ ### recordMazeMovementVisitAndPenalties
89
+
90
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState) => void`
91
+
92
+ Record the current cell visit and update visit-driven penalties.
93
+
94
+ Parameters:
95
+ - `state` - - Mutable simulation state for the active run.
@@ -0,0 +1,354 @@
1
+ /**
2
+ * Runtime/environment helpers for the dedicated mazeMovement module.
3
+ *
4
+ * This file owns the low-level simulation primitives that do not define maze
5
+ * policy: cell-open checks, distance lookup, run-state creation, visit-ring
6
+ * bookkeeping, and perception-state updates.
7
+ */
8
+
9
+ import { MAZE_MOVEMENT_CONSTANTS } from '../mazeMovement.constants';
10
+ import {
11
+ getMazeMovementBufferMetadata,
12
+ getMazeMovementRunServiceState,
13
+ indexMazeMovementCell,
14
+ initializeMazeMovementBufferPools,
15
+ requireMazeMovementBufferPools,
16
+ resetMazeMovementRunServiceState,
17
+ } from '../mazeMovement.services';
18
+ import type { SimulationState } from '../mazeMovement.types';
19
+ import { MazeVision } from '../../mazeVision';
20
+
21
+ const C = MAZE_MOVEMENT_CONSTANTS;
22
+
23
+ /**
24
+ * Determine whether a maze cell is inside bounds and not a wall.
25
+ *
26
+ * @param encodedMaze - Maze grid to inspect.
27
+ * @param x - Zero-based maze column.
28
+ * @param y - Zero-based maze row.
29
+ * @param coordinateScratch - Reused integer scratch buffer for coordinate coercion.
30
+ * @returns True when the target cell is within bounds and open.
31
+ */
32
+ export function isMazeMovementCellOpen(
33
+ encodedMaze: ReadonlyArray<ReadonlyArray<number>>,
34
+ x: number,
35
+ y: number,
36
+ coordinateScratch: Int32Array,
37
+ ): boolean {
38
+ const providedRowCount = encodedMaze?.length ?? 0;
39
+ const firstRow = encodedMaze?.[0];
40
+ const providedColumnCount = firstRow?.length ?? 0;
41
+ const { cachedWidth: cachedColumnCount, cachedHeight: cachedRowCount } =
42
+ getMazeMovementBufferMetadata();
43
+
44
+ const mazeColumnCount =
45
+ cachedColumnCount > 0 &&
46
+ cachedRowCount === providedRowCount &&
47
+ cachedColumnCount === providedColumnCount
48
+ ? cachedColumnCount
49
+ : providedColumnCount;
50
+ const mazeRowCount =
51
+ cachedRowCount > 0 &&
52
+ cachedColumnCount === providedColumnCount &&
53
+ cachedRowCount === providedRowCount
54
+ ? cachedRowCount
55
+ : providedRowCount;
56
+
57
+ coordinateScratch[0] = x | 0;
58
+ coordinateScratch[1] = y | 0;
59
+ const columnIndex = coordinateScratch[0];
60
+ const rowIndex = coordinateScratch[1];
61
+
62
+ if (rowIndex < 0 || rowIndex >= mazeRowCount) return false;
63
+ if (columnIndex < 0 || columnIndex >= mazeColumnCount) return false;
64
+
65
+ const targetRow = encodedMaze[rowIndex];
66
+ if (!targetRow) return false;
67
+ const cellValue = targetRow[columnIndex];
68
+ return cellValue !== -1;
69
+ }
70
+
71
+ /**
72
+ * Resolve the current distance value for a maze coordinate.
73
+ *
74
+ * @param encodedMaze - Maze grid aligned with the optional distance map.
75
+ * @param coordinates - Zero-based `[x, y]` coordinate tuple.
76
+ * @param distanceMap - Optional precomputed distance map.
77
+ * @returns Finite distance when present, otherwise `Infinity`.
78
+ */
79
+ export function getMazeMovementDistance(
80
+ encodedMaze: ReadonlyArray<ReadonlyArray<number>>,
81
+ [x, y]: readonly [number, number],
82
+ distanceMap?: number[][],
83
+ ): number {
84
+ const xCoordinate = x | 0;
85
+ const yCoordinate = y | 0;
86
+
87
+ if (
88
+ distanceMap &&
89
+ distanceMap[yCoordinate] !== undefined &&
90
+ Number.isFinite(distanceMap[yCoordinate][xCoordinate])
91
+ ) {
92
+ return distanceMap[yCoordinate][xCoordinate];
93
+ }
94
+
95
+ const providedHeight = encodedMaze?.length ?? 0;
96
+ const firstRow = encodedMaze?.[0];
97
+ const providedWidth = firstRow?.length ?? 0;
98
+ const { cachedWidth, cachedHeight } = getMazeMovementBufferMetadata();
99
+
100
+ const mazeWidth =
101
+ cachedWidth > 0 &&
102
+ cachedHeight === providedHeight &&
103
+ cachedWidth === providedWidth
104
+ ? cachedWidth
105
+ : providedWidth;
106
+ const mazeHeight =
107
+ cachedHeight > 0 &&
108
+ cachedWidth === providedWidth &&
109
+ cachedHeight === providedHeight
110
+ ? cachedHeight
111
+ : providedHeight;
112
+
113
+ if (xCoordinate < 0 || xCoordinate >= mazeWidth) return Infinity;
114
+ if (yCoordinate < 0 || yCoordinate >= mazeHeight) return Infinity;
115
+
116
+ return Infinity;
117
+ }
118
+
119
+ /**
120
+ * Create the initial run-state object for one simulation episode.
121
+ *
122
+ * @param encodedMaze - Maze grid used by the run.
123
+ * @param startPos - Starting coordinate.
124
+ * @param distanceMap - Optional precomputed distance map.
125
+ * @param maxSteps - Maximum number of allowed simulation steps.
126
+ * @returns Fresh simulation state backed by the shared buffer pools.
127
+ */
128
+ export function createMazeMovementRunState(
129
+ encodedMaze: number[][],
130
+ startPos: readonly [number, number],
131
+ distanceMap: number[][] | undefined,
132
+ maxSteps: number,
133
+ ): SimulationState {
134
+ resetMazeMovementRunServiceState();
135
+ const mazeHeight = encodedMaze.length;
136
+ const mazeWidth = encodedMaze[0].length;
137
+ const hasDistanceMap =
138
+ Array.isArray(distanceMap) && distanceMap.length === mazeHeight;
139
+ const bufferPools = initializeMazeMovementBufferPools(
140
+ mazeWidth,
141
+ mazeHeight,
142
+ maxSteps,
143
+ );
144
+
145
+ const position: [number, number] = [startPos[0], startPos[1]];
146
+ bufferPools.pathX[0] = position[0];
147
+ bufferPools.pathY[0] = position[1];
148
+ const historyCapacity = C.MOVE_HISTORY_LENGTH;
149
+
150
+ return {
151
+ position,
152
+ steps: 0,
153
+ pathLength: 1,
154
+ visitedUniqueCount: 0,
155
+ hasDistanceMap,
156
+ distanceMap,
157
+ minDistanceToExit: hasDistanceMap
158
+ ? (distanceMap![position[1]]?.[position[0]] ?? Infinity)
159
+ : getMazeMovementDistance(encodedMaze, position, distanceMap),
160
+ progressReward: 0,
161
+ newCellExplorationBonus: 0,
162
+ invalidMovePenalty: 0,
163
+ prevAction: C.NO_MOVE,
164
+ stepsSinceImprovement: 0,
165
+ lastDistanceGlobal: getMazeMovementDistance(
166
+ encodedMaze,
167
+ position,
168
+ distanceMap,
169
+ ),
170
+ saturatedSteps: 0,
171
+ recentPositions: [],
172
+ localAreaPenalty: 0,
173
+ directionCounts: [0, 0, 0, 0],
174
+ moveHistoryRing: new Int32Array(historyCapacity),
175
+ moveHistoryLength: 0,
176
+ moveHistoryHead: 0,
177
+ currentCellIndex: 0,
178
+ loopPenalty: 0,
179
+ memoryPenalty: 0,
180
+ revisitPenalty: 0,
181
+ visitsAtCurrent: 0,
182
+ distHere: Infinity,
183
+ vision: [],
184
+ actionStats: null,
185
+ direction: C.NO_MOVE,
186
+ moved: false,
187
+ prevDistance: Infinity,
188
+ earlyTerminate: false,
189
+ };
190
+ }
191
+
192
+ /**
193
+ * Push a cell index into the circular visit-history ring.
194
+ *
195
+ * @param state - Mutable simulation state containing the ring buffer.
196
+ * @param cellIndex - Linearized cell index to append.
197
+ */
198
+ export function pushMazeMovementHistory(
199
+ state: SimulationState,
200
+ cellIndex: number,
201
+ ): void {
202
+ const ring = state.moveHistoryRing;
203
+ let headIndex = state.moveHistoryHead | 0;
204
+ const currentLength = state.moveHistoryLength;
205
+ const ringCapacity = ring.length;
206
+ if (ringCapacity === 0) return;
207
+
208
+ ring[headIndex] = cellIndex;
209
+ headIndex = (headIndex + 1) % ringCapacity;
210
+ state.moveHistoryHead = headIndex;
211
+ if (currentLength < ringCapacity) state.moveHistoryLength = currentLength + 1;
212
+ }
213
+
214
+ /**
215
+ * Return the `nth` most recent cell index from the visit-history ring.
216
+ *
217
+ * @param state - Mutable simulation state containing the ring buffer.
218
+ * @param nth - One-based index from the history tail.
219
+ * @returns The requested cell index or `undefined` when out of range.
220
+ */
221
+ export function getMazeMovementHistoryFromEnd(
222
+ state: SimulationState,
223
+ nth: number,
224
+ ): number | undefined {
225
+ const requested = nth | 0;
226
+ const historyLength = state.moveHistoryLength | 0;
227
+ if (requested <= 0 || requested > historyLength) return undefined;
228
+
229
+ const ring = state.moveHistoryRing;
230
+ const ringCapacity = ring.length;
231
+ if (ringCapacity === 0) return undefined;
232
+ const headIndex = state.moveHistoryHead | 0;
233
+
234
+ let rawIndex = headIndex - requested;
235
+ rawIndex = ((rawIndex % ringCapacity) + ringCapacity) % ringCapacity;
236
+ return ring[rawIndex];
237
+ }
238
+
239
+ /**
240
+ * Record the current cell visit and update visit-driven penalties.
241
+ *
242
+ * @param state - Mutable simulation state for the active run.
243
+ */
244
+ export function recordMazeMovementVisitAndPenalties(
245
+ state: SimulationState,
246
+ ): void {
247
+ const bufferPools = requireMazeMovementBufferPools();
248
+ const visitedFlags = bufferPools.visitedFlags;
249
+ const visitCounts = bufferPools.visitCounts;
250
+ const rewardScale = C.REWARD_SCALE;
251
+
252
+ const cellIndex = indexMazeMovementCell(state.position[0], state.position[1]);
253
+ state.currentCellIndex = cellIndex;
254
+ if (!visitedFlags[cellIndex]) {
255
+ visitedFlags[cellIndex] = 1;
256
+ state.visitedUniqueCount++;
257
+ }
258
+
259
+ visitCounts[cellIndex] = (visitCounts[cellIndex] + 1) as number;
260
+ pushMazeMovementHistory(state, cellIndex);
261
+ const visitsAtCell = (state.visitsAtCurrent = visitCounts[cellIndex]);
262
+
263
+ state.loopPenalty = 0;
264
+ if (state.moveHistoryLength >= C.OSCILLATION_DETECT_LENGTH) {
265
+ const last = getMazeMovementHistoryFromEnd(state, 1)!;
266
+ const secondLast = getMazeMovementHistoryFromEnd(state, 2);
267
+ const thirdLast = getMazeMovementHistoryFromEnd(state, 3);
268
+ const fourthLast = getMazeMovementHistoryFromEnd(state, 4);
269
+ if (
270
+ last === thirdLast &&
271
+ secondLast !== undefined &&
272
+ fourthLast !== undefined &&
273
+ secondLast === fourthLast
274
+ ) {
275
+ state.loopPenalty = -C.LOOP_PENALTY * rewardScale;
276
+ }
277
+ }
278
+
279
+ state.memoryPenalty = 0;
280
+ if (state.moveHistoryLength > 1) {
281
+ for (
282
+ let historyOffset = 2;
283
+ historyOffset <= state.moveHistoryLength;
284
+ historyOffset++
285
+ ) {
286
+ const recentIndex = getMazeMovementHistoryFromEnd(state, historyOffset);
287
+ if (recentIndex === cellIndex) {
288
+ state.memoryPenalty = -C.MEMORY_RETURN_PENALTY * rewardScale;
289
+ break;
290
+ }
291
+ }
292
+ }
293
+
294
+ state.revisitPenalty = 0;
295
+ if (visitsAtCell > 1) {
296
+ state.revisitPenalty =
297
+ -C.REVISIT_PENALTY_PER_VISIT * (visitsAtCell - 1) * rewardScale;
298
+ }
299
+
300
+ if (visitsAtCell > C.VISIT_TERMINATION_THRESHOLD) {
301
+ state.invalidMovePenalty -= C.INVALID_MOVE_PENALTY_HARSH * rewardScale;
302
+ state.earlyTerminate = true;
303
+ }
304
+ }
305
+
306
+ /**
307
+ * Build the current perception vector and update distance-tracking state.
308
+ *
309
+ * @param state - Mutable simulation state for the active run.
310
+ * @param encodedMaze - Maze grid used for perception and distance lookup.
311
+ * @param exitPos - Goal coordinate for the current run.
312
+ * @param distanceMap - Optional precomputed distance map.
313
+ */
314
+ export function buildMazeMovementVisionAndDistance(
315
+ state: SimulationState,
316
+ encodedMaze: number[][],
317
+ exitPos: readonly [number, number],
318
+ distanceMap?: number[][],
319
+ ): void {
320
+ if (state.earlyTerminate) return;
321
+
322
+ const currentPosition = state.position;
323
+ const positionX = currentPosition[0] | 0;
324
+ const positionY = currentPosition[1] | 0;
325
+ const hasPrecomputedDistances = state.hasDistanceMap;
326
+ const runServices = getMazeMovementRunServiceState();
327
+
328
+ const preMoveDistance = hasPrecomputedDistances
329
+ ? (distanceMap![positionY]?.[positionX] ?? undefined)
330
+ : getMazeMovementDistance(encodedMaze, currentPosition, distanceMap);
331
+
332
+ const visionInputs = MazeVision.buildInputs6(
333
+ encodedMaze,
334
+ currentPosition,
335
+ exitPos,
336
+ distanceMap,
337
+ runServices.prevDistanceStep,
338
+ preMoveDistance,
339
+ state.prevAction,
340
+ );
341
+
342
+ state.vision = (
343
+ Array.isArray(visionInputs)
344
+ ? visionInputs
345
+ : Array.from(visionInputs as Iterable<number>)
346
+ ) as number[];
347
+
348
+ runServices.prevDistanceStep = preMoveDistance;
349
+ state.distHere = hasPrecomputedDistances
350
+ ? (distanceMap![positionY]?.[positionX] ?? Infinity)
351
+ : getMazeMovementDistance(encodedMaze, currentPosition, distanceMap);
352
+ }
353
+
354
+ export {};
@@ -0,0 +1,124 @@
1
+ # mazeMovement/shaping
2
+
3
+ ## mazeMovement/shaping/mazeMovement.shaping.ts
4
+
5
+ ### mazeMovement.shaping
6
+
7
+ Reward-shaping helpers for the dedicated mazeMovement module.
8
+
9
+ This file owns movement reward shaping, stagnation penalties, entropy-guided
10
+ bonuses, and other post-action fitness adjustments.
11
+
12
+ ### applyMazeMovementEntropyGuidanceShaping
13
+
14
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, rewardScale: number, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
15
+
16
+ Apply entropy-guided shaping based on confidence and perceptual guidance.
17
+
18
+ Parameters:
19
+ - `state` - - Mutable simulation state for the active run.
20
+ - `rewardScale` - - Global reward scale used by the penalties and bonuses.
21
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
22
+
23
+ ### applyMazeMovementExplorationVisitAdjustment
24
+
25
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, rewardScale: number, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
26
+
27
+ Apply the per-cell exploration bonus or revisit penalty.
28
+
29
+ Parameters:
30
+ - `state` - - Mutable simulation state for the active run.
31
+ - `rewardScale` - - Global reward scale used by the adjustment.
32
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
33
+
34
+ ### applyMazeMovementGlobalDistanceImprovementBonus
35
+
36
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, encodedMaze: number[][], rewardScale: number, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
37
+
38
+ Apply the long-horizon global-distance improvement bonus.
39
+
40
+ Parameters:
41
+ - `state` - - Mutable simulation state for the active run.
42
+ - `encodedMaze` - - Maze grid used for distance lookup.
43
+ - `rewardScale` - - Global reward scale used by the bonus magnitude.
44
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
45
+
46
+ ### applyMazeMovementLocalAreaPenalty
47
+
48
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, rewardScale: number, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
49
+
50
+ Apply a local-area stagnation penalty when the run oscillates in a tight window.
51
+
52
+ Parameters:
53
+ - `state` - - Mutable simulation state for the active run.
54
+ - `rewardScale` - - Global reward scale used for the penalty magnitude.
55
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
56
+
57
+ ### applyMazeMovementPostActionPenalties
58
+
59
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
60
+
61
+ Apply the post-action shaping and penalty aggregation phase.
62
+
63
+ Parameters:
64
+ - `state` - - Mutable simulation state for the active run.
65
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
66
+
67
+ ### applyMazeMovementProgressShaping
68
+
69
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, distanceDelta: number, improved: boolean, worsened: boolean, rewardScale: number) => void`
70
+
71
+ Apply progress and away-from-goal shaping after a move.
72
+
73
+ Parameters:
74
+ - `state` - - Mutable simulation state for the active run.
75
+ - `distanceDelta` - - Positive when the agent moved closer to the goal.
76
+ - `improved` - - True when the move improved distance to the goal.
77
+ - `worsened` - - True when the move increased distance to the goal.
78
+ - `rewardScale` - - Global reward scale used by the shaping terms.
79
+
80
+ ### applyMazeMovementRepetitionAndBacktrackPenalties
81
+
82
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, rewardScale: number, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
83
+
84
+ Apply repetition and immediate-backtrack penalties.
85
+
86
+ Parameters:
87
+ - `state` - - Mutable simulation state for the active run.
88
+ - `rewardScale` - - Global reward scale used by the penalties.
89
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
90
+
91
+ ### applyMazeMovementSaturationPenaltyCycle
92
+
93
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, rewardScale: number, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
94
+
95
+ Apply the periodic saturation penalty cycle.
96
+
97
+ Parameters:
98
+ - `state` - - Mutable simulation state for the active run.
99
+ - `rewardScale` - - Global reward scale used by the penalties.
100
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
101
+
102
+ ### executeMazeMovementAndRewards
103
+
104
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, encodedMaze: number[][], distanceMap: number[][] | undefined, coordinateScratch: Int32Array<ArrayBufferLike>) => void`
105
+
106
+ Execute the chosen move and apply the shaping terms tied to that move.
107
+
108
+ Parameters:
109
+ - `state` - - Mutable simulation state for the active run.
110
+ - `encodedMaze` - - Maze grid used for move validity and distance lookup.
111
+ - `distanceMap` - - Optional precomputed distance map.
112
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
113
+
114
+ ### maybeTerminateMazeMovementDeepStagnation
115
+
116
+ `(state: import("test/examples/asciiMaze/mazeMovement/mazeMovement.types").SimulationState, coordinateScratch: Int32Array<ArrayBufferLike>) => boolean`
117
+
118
+ Apply the deep-stagnation termination penalty when appropriate.
119
+
120
+ Parameters:
121
+ - `state` - - Mutable simulation state for the active run.
122
+ - `coordinateScratch` - - Reused coordinate scratch buffer.
123
+
124
+ Returns: True when the run should terminate early.