@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.
- package/.github/agents/boundary-mapper.agent.md +31 -0
- package/.github/agents/docs-scout.agent.md +29 -0
- package/.github/agents/plan-scout.agent.md +31 -0
- package/.github/agents/solid-split.agent.md +143 -0
- package/.github/copilot-instructions.md +119 -0
- package/.github/skills/solid-split-playbook/SKILL.md +220 -0
- package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
- package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
- package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
- package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
- package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
- package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
- package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
- package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
- package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
- package/package.json +7 -3
- package/plans/ES2023 migration +13 -8
- package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
- package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
- package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
- package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
- package/plans/Memory_Optimization.md +3 -3
- package/plans/README.md +63 -0
- package/plans/Roadmap.md +15 -3
- package/plans/asciiMaze_SOLID_split.done.md +130 -0
- package/plans/flappy_bird_SOLID_split.done.md +67 -0
- package/scripts/analyze-trace.ts +590 -0
- package/scripts/assets/theme.css +221 -34
- package/scripts/copy-examples.mjs +9 -5
- package/scripts/export-onnx.mjs +3 -3
- package/scripts/generate-bench-tables.mjs +10 -10
- package/scripts/generate-bench-tables.ts +10 -10
- package/scripts/generate-docs.ts +1415 -449
- package/scripts/render-docs-html.ts +15 -8
- package/src/README.md +127 -222
- package/src/architecture/README.md +117 -184
- package/src/architecture/architect.ts +6 -0
- package/src/architecture/layer/README.md +38 -38
- package/src/architecture/network/README.md +49 -31
- package/src/architecture/network/activate/README.md +77 -77
- package/src/architecture/network/connect/README.md +15 -13
- package/src/architecture/network/deterministic/README.md +7 -7
- package/src/architecture/network/evolve/README.md +44 -44
- package/src/architecture/network/gating/README.md +20 -20
- package/src/architecture/network/genetic/README.md +51 -51
- package/src/architecture/network/mutate/README.md +97 -97
- package/src/architecture/network/network.types.ts +39 -0
- package/src/architecture/network/onnx/README.md +264 -264
- package/src/architecture/network/prune/README.md +39 -39
- package/src/architecture/network/remove/README.md +26 -26
- package/src/architecture/network/serialize/README.md +56 -56
- package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
- package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
- package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
- package/src/architecture/network/slab/README.md +61 -61
- package/src/architecture/network/standalone/README.md +24 -24
- package/src/architecture/network/stats/README.md +9 -9
- package/src/architecture/network/topology/README.md +46 -46
- package/src/architecture/network/training/README.md +21 -21
- package/src/architecture/network.ts +114 -10
- package/src/methods/README.md +9 -87
- package/src/multithreading/README.md +8 -77
- package/src/multithreading/workers/README.md +2 -2
- package/src/multithreading/workers/browser/README.md +0 -6
- package/src/multithreading/workers/node/README.md +0 -3
- package/src/neat/README.md +623 -568
- package/src/neat/neat.evolve.population.utils.ts +29 -5
- package/src/neat/neat.helpers.ts +16 -0
- package/src/neat/neat.topology-intent.utils.ts +160 -0
- package/src/utils/README.md +18 -18
- package/test/examples/asciiMaze/README.md +59 -59
- package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
- package/test/examples/asciiMaze/browser-entry/README.md +196 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
- package/test/examples/asciiMaze/browser-entry.ts +10 -576
- package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
- package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
- package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
- package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
- package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
- package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
- package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
- package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
- package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
- package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
- package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
- package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
- package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
- package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
- package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
- package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
- package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
- package/test/examples/asciiMaze/fitness.ts +2 -2
- package/test/examples/asciiMaze/fitness.types.ts +65 -0
- package/test/examples/asciiMaze/interfaces.ts +64 -1352
- package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
- package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
- package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
- package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
- package/test/examples/flappy_bird/README.md +193 -88
- package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
- package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
- package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
- package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
- package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
- package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
- package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
- package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
- package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
- package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
- package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
- package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
- package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
- package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
- package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
- package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
- package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
- package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
- package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
- package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
- package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
- package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
- package/test/examples/flappy_bird/constants/README.md +1163 -0
- package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
- package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
- package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
- package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
- package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
- package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
- package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
- package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
- package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
- package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
- package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
- package/test/examples/flappy_bird/constants/constants.ts +6 -0
- package/test/examples/flappy_bird/environment/README.md +182 -0
- package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
- package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
- package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
- package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
- package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
- package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
- package/test/examples/flappy_bird/evaluation/README.md +155 -0
- package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
- package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
- package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
- package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
- package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
- package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
- package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
- package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
- package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
- package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
- package/test/examples/flappy_bird/index.ts +8 -2
- package/test/examples/flappy_bird/rng.ts +10 -0
- package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
- package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
- package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
- package/test/examples/flappy_bird/trainer/README.md +676 -0
- package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
- package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
- package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
- package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
- package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
- package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
- package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
- package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
- package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
- package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
- package/test/neat/neat.topology-intent.test.ts +129 -0
- package/test/network/network.topology-intent.test.ts +44 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
- package/test/examples/flappy_bird/environment/environment.ts +0 -7
- package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
- 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.
|