@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,459 @@
1
+ /**
2
+ * Reward-shaping helpers for the dedicated mazeMovement module.
3
+ *
4
+ * This file owns movement reward shaping, stagnation penalties, entropy-guided
5
+ * bonuses, and other post-action fitness adjustments.
6
+ */
7
+
8
+ import { MAZE_MOVEMENT_CONSTANTS } from '../mazeMovement.constants';
9
+ import {
10
+ getMazeMovementRunServiceState,
11
+ requireMazeMovementBufferPools,
12
+ } from '../mazeMovement.services';
13
+ import type { SimulationState } from '../mazeMovement.types';
14
+ import { sumVisionGroup } from '../mazeMovement.utils';
15
+ import {
16
+ getMazeMovementDistance,
17
+ isMazeMovementCellOpen,
18
+ } from '../runtime/mazeMovement.runtime';
19
+ import { MazeUtils } from '../../mazeUtils';
20
+
21
+ const C = MAZE_MOVEMENT_CONSTANTS;
22
+ const SHAPING_VISION_SUM_SCRATCH = new Float64Array(4);
23
+
24
+ /**
25
+ * Execute the chosen move and apply the shaping terms tied to that move.
26
+ *
27
+ * @param state - Mutable simulation state for the active run.
28
+ * @param encodedMaze - Maze grid used for move validity and distance lookup.
29
+ * @param distanceMap - Optional precomputed distance map.
30
+ * @param coordinateScratch - Reused coordinate scratch buffer.
31
+ */
32
+ export function executeMazeMovementAndRewards(
33
+ state: SimulationState,
34
+ encodedMaze: number[][],
35
+ distanceMap: number[][] | undefined,
36
+ coordinateScratch: Int32Array,
37
+ ): void {
38
+ if (state.earlyTerminate) return;
39
+
40
+ const previousDistance = getMazeMovementDistance(
41
+ encodedMaze,
42
+ state.position,
43
+ distanceMap,
44
+ );
45
+ state.prevDistance = previousDistance;
46
+ state.moved = false;
47
+
48
+ const chosenAction = state.direction;
49
+ if (chosenAction >= 0 && chosenAction < C.ACTION_DIM) {
50
+ const [deltaX, deltaY] = C.DIRECTION_DELTAS[chosenAction];
51
+ const candidateX = (state.position[0] + deltaX) | 0;
52
+ const candidateY = (state.position[1] + deltaY) | 0;
53
+ coordinateScratch[0] = candidateX;
54
+ coordinateScratch[1] = candidateY;
55
+
56
+ if (
57
+ isMazeMovementCellOpen(
58
+ encodedMaze,
59
+ candidateX,
60
+ candidateY,
61
+ coordinateScratch,
62
+ )
63
+ ) {
64
+ state.position[0] = candidateX;
65
+ state.position[1] = candidateY;
66
+ state.moved = true;
67
+ }
68
+ }
69
+
70
+ const rewardScale = C.REWARD_SCALE;
71
+ const bufferPools = requireMazeMovementBufferPools();
72
+ if (state.moved) {
73
+ const writeIndex = state.pathLength | 0;
74
+ bufferPools.pathX[writeIndex] = state.position[0];
75
+ bufferPools.pathY[writeIndex] = state.position[1];
76
+ state.pathLength = writeIndex + 1;
77
+
78
+ MazeUtils.pushHistory(
79
+ state.recentPositions,
80
+ [state.position[0], state.position[1]],
81
+ C.LOCAL_WINDOW,
82
+ );
83
+
84
+ applyMazeMovementLocalAreaPenalty(state, rewardScale, coordinateScratch);
85
+
86
+ const currentDistance = state.hasDistanceMap
87
+ ? (state.distanceMap?.[state.position[1]]?.[state.position[0]] ??
88
+ Infinity)
89
+ : getMazeMovementDistance(encodedMaze, state.position, state.distanceMap);
90
+ const distanceDelta = previousDistance - currentDistance;
91
+ const improved = distanceDelta > 0;
92
+ const worsened = !improved && currentDistance > previousDistance;
93
+ applyMazeMovementProgressShaping(
94
+ state,
95
+ distanceDelta,
96
+ improved,
97
+ worsened,
98
+ rewardScale,
99
+ );
100
+ applyMazeMovementExplorationVisitAdjustment(
101
+ state,
102
+ rewardScale,
103
+ coordinateScratch,
104
+ );
105
+
106
+ if (state.direction >= 0) state.directionCounts[state.direction]++;
107
+ state.minDistanceToExit = Math.min(
108
+ state.minDistanceToExit,
109
+ currentDistance,
110
+ );
111
+ } else {
112
+ state.invalidMovePenalty -= C.INVALID_MOVE_PENALTY_MILD * rewardScale;
113
+ }
114
+
115
+ applyMazeMovementGlobalDistanceImprovementBonus(
116
+ state,
117
+ encodedMaze,
118
+ rewardScale,
119
+ coordinateScratch,
120
+ );
121
+ }
122
+
123
+ /**
124
+ * Apply the post-action shaping and penalty aggregation phase.
125
+ *
126
+ * @param state - Mutable simulation state for the active run.
127
+ * @param coordinateScratch - Reused coordinate scratch buffer.
128
+ */
129
+ export function applyMazeMovementPostActionPenalties(
130
+ state: SimulationState,
131
+ coordinateScratch: Int32Array,
132
+ ): void {
133
+ if (state.earlyTerminate) return;
134
+
135
+ const rewardScale = C.REWARD_SCALE;
136
+ applyMazeMovementRepetitionAndBacktrackPenalties(
137
+ state,
138
+ rewardScale,
139
+ coordinateScratch,
140
+ );
141
+ if (state.moved) state.prevAction = state.direction;
142
+ applyMazeMovementEntropyGuidanceShaping(
143
+ state,
144
+ rewardScale,
145
+ coordinateScratch,
146
+ );
147
+ applyMazeMovementSaturationPenaltyCycle(
148
+ state,
149
+ rewardScale,
150
+ coordinateScratch,
151
+ );
152
+
153
+ coordinateScratch[0] =
154
+ (state.loopPenalty || 0) +
155
+ (state.memoryPenalty || 0) +
156
+ (state.revisitPenalty || 0);
157
+ state.invalidMovePenalty += coordinateScratch[0];
158
+ }
159
+
160
+ /**
161
+ * Apply a local-area stagnation penalty when the run oscillates in a tight window.
162
+ *
163
+ * @param state - Mutable simulation state for the active run.
164
+ * @param rewardScale - Global reward scale used for the penalty magnitude.
165
+ * @param coordinateScratch - Reused coordinate scratch buffer.
166
+ */
167
+ export function applyMazeMovementLocalAreaPenalty(
168
+ state: SimulationState,
169
+ rewardScale: number,
170
+ coordinateScratch: Int32Array,
171
+ ): void {
172
+ const recentWindow = state.recentPositions;
173
+ if (recentWindow.length !== C.LOCAL_WINDOW) return;
174
+
175
+ let minX = Number.POSITIVE_INFINITY;
176
+ let maxX = Number.NEGATIVE_INFINITY;
177
+ let minY = Number.POSITIVE_INFINITY;
178
+ let maxY = Number.NEGATIVE_INFINITY;
179
+
180
+ for (let recentIndex = 0; recentIndex < recentWindow.length; recentIndex++) {
181
+ const [positionX, positionY] = recentWindow[recentIndex];
182
+ const coercedX = positionX | 0;
183
+ const coercedY = positionY | 0;
184
+ if (coercedX < minX) minX = coercedX;
185
+ if (coercedX > maxX) maxX = coercedX;
186
+ if (coercedY < minY) minY = coercedY;
187
+ if (coercedY > maxY) maxY = coercedY;
188
+ }
189
+
190
+ coordinateScratch[0] = minX;
191
+ coordinateScratch[1] = minY;
192
+ const span = maxX - minX + (maxY - minY);
193
+ if (
194
+ span <= C.LOCAL_AREA_SPAN_THRESHOLD &&
195
+ state.stepsSinceImprovement > C.LOCAL_AREA_STAGNATION_STEPS
196
+ ) {
197
+ state.localAreaPenalty -= C.LOCAL_AREA_PENALTY_AMOUNT * rewardScale;
198
+ }
199
+ }
200
+
201
+ /**
202
+ * Apply progress and away-from-goal shaping after a move.
203
+ *
204
+ * @param state - Mutable simulation state for the active run.
205
+ * @param distanceDelta - Positive when the agent moved closer to the goal.
206
+ * @param improved - True when the move improved distance to the goal.
207
+ * @param worsened - True when the move increased distance to the goal.
208
+ * @param rewardScale - Global reward scale used by the shaping terms.
209
+ */
210
+ export function applyMazeMovementProgressShaping(
211
+ state: SimulationState,
212
+ distanceDelta: number,
213
+ improved: boolean,
214
+ worsened: boolean,
215
+ rewardScale: number,
216
+ ): void {
217
+ const currentConfidence = state.actionStats?.maxProb ?? (improved ? 1 : 0.5);
218
+ if (improved) {
219
+ const confidenceScaledBase =
220
+ (C.PROGRESS_REWARD_BASE +
221
+ C.PROGRESS_REWARD_CONF_SCALE * currentConfidence) *
222
+ rewardScale;
223
+ if (state.stepsSinceImprovement > 0) {
224
+ const stepBonus = Math.min(
225
+ state.stepsSinceImprovement * C.PROGRESS_STEPS_MULT * rewardScale,
226
+ C.PROGRESS_STEPS_MAX * rewardScale,
227
+ );
228
+ state.progressReward += stepBonus;
229
+ }
230
+ state.progressReward += confidenceScaledBase;
231
+ state.stepsSinceImprovement = 0;
232
+ const distanceContribution =
233
+ distanceDelta *
234
+ C.DISTANCE_DELTA_SCALE *
235
+ (C.DISTANCE_DELTA_CONF_BASE +
236
+ C.DISTANCE_DELTA_CONF_SCALE * currentConfidence);
237
+ state.progressReward += distanceContribution;
238
+ return;
239
+ }
240
+
241
+ if (worsened) {
242
+ const awayPenalty =
243
+ (C.PROGRESS_AWAY_BASE_PENALTY +
244
+ C.PROGRESS_AWAY_CONF_SCALE * currentConfidence) *
245
+ rewardScale;
246
+ state.progressReward -= awayPenalty;
247
+ state.stepsSinceImprovement++;
248
+ return;
249
+ }
250
+
251
+ state.stepsSinceImprovement++;
252
+ }
253
+
254
+ /**
255
+ * Apply the per-cell exploration bonus or revisit penalty.
256
+ *
257
+ * @param state - Mutable simulation state for the active run.
258
+ * @param rewardScale - Global reward scale used by the adjustment.
259
+ * @param coordinateScratch - Reused coordinate scratch buffer.
260
+ */
261
+ export function applyMazeMovementExplorationVisitAdjustment(
262
+ state: SimulationState,
263
+ rewardScale: number,
264
+ coordinateScratch: Int32Array,
265
+ ): void {
266
+ const visitsAtThisCell = state.visitsAtCurrent | 0;
267
+ const positiveBonus = C.NEW_CELL_EXPLORATION_BONUS * rewardScale;
268
+ const revisitPenalty = C.REVISIT_PENALTY_STRONG * rewardScale;
269
+ coordinateScratch[0] =
270
+ visitsAtThisCell === 1 ? positiveBonus : -revisitPenalty;
271
+ state.newCellExplorationBonus += coordinateScratch[0];
272
+ }
273
+
274
+ /**
275
+ * Apply the long-horizon global-distance improvement bonus.
276
+ *
277
+ * @param state - Mutable simulation state for the active run.
278
+ * @param encodedMaze - Maze grid used for distance lookup.
279
+ * @param rewardScale - Global reward scale used by the bonus magnitude.
280
+ * @param coordinateScratch - Reused coordinate scratch buffer.
281
+ */
282
+ export function applyMazeMovementGlobalDistanceImprovementBonus(
283
+ state: SimulationState,
284
+ encodedMaze: number[][],
285
+ rewardScale: number,
286
+ coordinateScratch: Int32Array,
287
+ ): void {
288
+ const positionX = state.position[0] | 0;
289
+ const positionY = state.position[1] | 0;
290
+ const currentGlobalDistance = state.hasDistanceMap
291
+ ? (state.distanceMap?.[positionY]?.[positionX] ?? Infinity)
292
+ : getMazeMovementDistance(encodedMaze, state.position, state.distanceMap);
293
+ coordinateScratch[0] = currentGlobalDistance as number;
294
+
295
+ const previousGlobalDistance = state.lastDistanceGlobal ?? Infinity;
296
+ if (currentGlobalDistance < previousGlobalDistance) {
297
+ const stagnationSteps = state.stepsSinceImprovement | 0;
298
+ if (stagnationSteps > C.GLOBAL_BREAK_BONUS_START) {
299
+ const bonusSteps = stagnationSteps - C.GLOBAL_BREAK_BONUS_START;
300
+ const uncappedBonus =
301
+ bonusSteps * C.GLOBAL_BREAK_BONUS_PER_STEP * rewardScale;
302
+ const cappedBonus = Math.min(
303
+ uncappedBonus,
304
+ C.GLOBAL_BREAK_BONUS_CAP * rewardScale,
305
+ );
306
+ state.progressReward += cappedBonus;
307
+ }
308
+ state.stepsSinceImprovement = 0;
309
+ }
310
+
311
+ state.lastDistanceGlobal = currentGlobalDistance;
312
+ }
313
+
314
+ /**
315
+ * Apply repetition and immediate-backtrack penalties.
316
+ *
317
+ * @param state - Mutable simulation state for the active run.
318
+ * @param rewardScale - Global reward scale used by the penalties.
319
+ * @param coordinateScratch - Reused coordinate scratch buffer.
320
+ */
321
+ export function applyMazeMovementRepetitionAndBacktrackPenalties(
322
+ state: SimulationState,
323
+ rewardScale: number,
324
+ coordinateScratch: Int32Array,
325
+ ): void {
326
+ if (state.earlyTerminate) return;
327
+
328
+ const previousAction = state.prevAction;
329
+ const currentAction = state.direction;
330
+ const stagnationSteps = state.stepsSinceImprovement | 0;
331
+
332
+ if (
333
+ previousAction === currentAction &&
334
+ stagnationSteps > C.REPETITION_PENALTY_START
335
+ ) {
336
+ const repetitionMultiplier = stagnationSteps - C.REPETITION_PENALTY_START;
337
+ const computedRepetitionPenalty =
338
+ C.REPETITION_PENALTY_BASE * repetitionMultiplier * rewardScale;
339
+ coordinateScratch[0] = -computedRepetitionPenalty;
340
+ state.invalidMovePenalty += coordinateScratch[0];
341
+ }
342
+
343
+ if (
344
+ previousAction >= 0 &&
345
+ currentAction >= 0 &&
346
+ stagnationSteps > 0 &&
347
+ currentAction === C.OPPOSITE_DIR[previousAction]
348
+ ) {
349
+ coordinateScratch[1] = -C.BACK_MOVE_PENALTY * rewardScale;
350
+ state.invalidMovePenalty += coordinateScratch[1];
351
+ }
352
+ }
353
+
354
+ /**
355
+ * Apply entropy-guided shaping based on confidence and perceptual guidance.
356
+ *
357
+ * @param state - Mutable simulation state for the active run.
358
+ * @param rewardScale - Global reward scale used by the penalties and bonuses.
359
+ * @param coordinateScratch - Reused coordinate scratch buffer.
360
+ */
361
+ export function applyMazeMovementEntropyGuidanceShaping(
362
+ state: SimulationState,
363
+ rewardScale: number,
364
+ coordinateScratch: Int32Array,
365
+ ): void {
366
+ if (state.earlyTerminate || !state.actionStats) return;
367
+
368
+ const { entropy, maxProb, secondProb } = state.actionStats;
369
+ const hasLineOfSightGuidance =
370
+ sumVisionGroup(
371
+ state.vision,
372
+ C.VISION_LOS_START,
373
+ C.VISION_GROUP_LEN,
374
+ SHAPING_VISION_SUM_SCRATCH,
375
+ ) > 0;
376
+ const hasGradientGuidance =
377
+ sumVisionGroup(
378
+ state.vision,
379
+ C.VISION_GRAD_START,
380
+ C.VISION_GROUP_LEN,
381
+ SHAPING_VISION_SUM_SCRATCH,
382
+ ) > 0;
383
+
384
+ if (entropy > C.ENTROPY_HIGH_THRESHOLD) {
385
+ coordinateScratch[0] = -C.ENTROPY_PENALTY * rewardScale;
386
+ state.invalidMovePenalty += coordinateScratch[0];
387
+ return;
388
+ }
389
+
390
+ const maxMinusSecond = (maxProb ?? 0) - (secondProb ?? 0);
391
+ if (
392
+ (hasLineOfSightGuidance || hasGradientGuidance) &&
393
+ entropy < C.ENTROPY_CONFIDENT_THRESHOLD &&
394
+ maxMinusSecond > C.ENTROPY_CONFIDENT_DIFF
395
+ ) {
396
+ coordinateScratch[0] = C.EXPLORATION_BONUS_SMALL * rewardScale;
397
+ state.newCellExplorationBonus += coordinateScratch[0];
398
+ }
399
+ }
400
+
401
+ /**
402
+ * Apply the periodic saturation penalty cycle.
403
+ *
404
+ * @param state - Mutable simulation state for the active run.
405
+ * @param rewardScale - Global reward scale used by the penalties.
406
+ * @param coordinateScratch - Reused coordinate scratch buffer.
407
+ */
408
+ export function applyMazeMovementSaturationPenaltyCycle(
409
+ state: SimulationState,
410
+ rewardScale: number,
411
+ coordinateScratch: Int32Array,
412
+ ): void {
413
+ const saturations = getMazeMovementRunServiceState().saturations;
414
+ if (saturations < C.SATURATION_PENALTY_TRIGGER) return;
415
+
416
+ coordinateScratch[0] = -C.SATURATION_PENALTY_BASE * rewardScale;
417
+ state.invalidMovePenalty += coordinateScratch[0];
418
+
419
+ const period = C.SATURATION_PENALTY_PERIOD;
420
+ if (period > 0 && saturations % period === 0) {
421
+ coordinateScratch[1] = -C.SATURATION_PENALTY_ESCALATE * rewardScale;
422
+ state.invalidMovePenalty += coordinateScratch[1];
423
+ }
424
+ }
425
+
426
+ /**
427
+ * Apply the deep-stagnation termination penalty when appropriate.
428
+ *
429
+ * @param state - Mutable simulation state for the active run.
430
+ * @param coordinateScratch - Reused coordinate scratch buffer.
431
+ * @returns True when the run should terminate early.
432
+ */
433
+ export function maybeTerminateMazeMovementDeepStagnation(
434
+ state: SimulationState,
435
+ coordinateScratch: Int32Array,
436
+ ): boolean {
437
+ const stagnationSteps = state.stepsSinceImprovement | 0;
438
+ if (stagnationSteps <= C.DEEP_STAGNATION_THRESHOLD) {
439
+ return state.earlyTerminate;
440
+ }
441
+
442
+ const rewardScale = C.REWARD_SCALE;
443
+ try {
444
+ const runningOutsideBrowser = typeof window === 'undefined';
445
+ if (runningOutsideBrowser) {
446
+ coordinateScratch[0] = -C.DEEP_STAGNATION_PENALTY * rewardScale;
447
+ state.invalidMovePenalty += coordinateScratch[0];
448
+ return true;
449
+ }
450
+ } catch {
451
+ coordinateScratch[0] = -C.DEEP_STAGNATION_PENALTY * rewardScale;
452
+ state.invalidMovePenalty += coordinateScratch[0];
453
+ return true;
454
+ }
455
+
456
+ return state.earlyTerminate;
457
+ }
458
+
459
+ export {};