@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
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
/** Maximum number of trail points retained per bird trail polyline. */
|
|
9
9
|
export const FLAPPY_TRAIL_MAX_POINTS = 40;
|
|
10
10
|
|
|
11
|
+
/** Maximum number of trail points retained for the champion-only short trail. */
|
|
12
|
+
export const FLAPPY_CHAMPION_TRAIL_MAX_POINTS = 12;
|
|
13
|
+
|
|
11
14
|
/** Stroke width used for per-bird trail line rendering. */
|
|
12
15
|
export const FLAPPY_TRAIL_LINE_WIDTH_PX = 1.5;
|
|
13
16
|
|
|
@@ -17,30 +20,12 @@ export const FLAPPY_TRAIL_EDGE_FADE_DISTANCE_PX = 48;
|
|
|
17
20
|
/** Opacity used for non-champion bird fills and trails. */
|
|
18
21
|
export const FLAPPY_NON_CHAMPION_OPACITY = 0.1;
|
|
19
22
|
|
|
20
|
-
/** Ratio of bird side length used for top-left shine square. */
|
|
21
|
-
export const FLAPPY_BIRD_SHINE_SIZE_RATIO = 0.42;
|
|
22
|
-
|
|
23
|
-
/** Ratio of bird side length used to inset shine from top-left corner. */
|
|
24
|
-
export const FLAPPY_BIRD_SHINE_INSET_RATIO = 0.2;
|
|
25
|
-
|
|
26
|
-
/** Fill style used for the bird shine highlight. */
|
|
27
|
-
export const FLAPPY_BIRD_SHINE_FILL_STYLE = 'rgba(255, 255, 255, 0.7)';
|
|
28
|
-
|
|
29
|
-
/** Fill style used for the champion bird shine highlight (xterm 196 red). */
|
|
30
|
-
export const FLAPPY_BIRD_CHAMPION_SHINE_FILL_STYLE = 'rgba(255, 0, 0, 0.7)';
|
|
31
|
-
|
|
32
|
-
/** Neon glow color used for the condensed white highlight shine. */
|
|
33
|
-
export const FLAPPY_BIRD_WHITE_SHINE_GLOW_COLOR = '#ffffff';
|
|
34
|
-
|
|
35
|
-
/** Neon glow color used for the champion shine highlight (xterm 196 red). */
|
|
36
|
-
export const FLAPPY_BIRD_CHAMPION_SHINE_GLOW_COLOR = '#ff0000';
|
|
37
|
-
|
|
38
|
-
/** Neon blur radius used for the condensed white highlight shine. */
|
|
39
|
-
export const FLAPPY_BIRD_WHITE_SHINE_GLOW_BLUR_PX = 2;
|
|
40
|
-
|
|
41
23
|
/** Base neon blur radius used for bird body glow. */
|
|
42
24
|
export const FLAPPY_BIRD_BODY_GLOW_BLUR_PX = 10;
|
|
43
25
|
|
|
26
|
+
/** Glow blur radius used for simplified non-champion bird bodies. */
|
|
27
|
+
export const FLAPPY_NON_CHAMPION_BODY_GLOW_BLUR_PX = 0;
|
|
28
|
+
|
|
44
29
|
/**
|
|
45
30
|
* Opacity used for the extra Radiant-style aura around each bird.
|
|
46
31
|
*
|
|
@@ -55,26 +40,19 @@ export const FLAPPY_BIRD_AURA_EXPAND_PX = 3;
|
|
|
55
40
|
/** Blur multiplier used for the Radiant-style bird aura plate. */
|
|
56
41
|
export const FLAPPY_BIRD_AURA_BLUR_MULTIPLIER = 2.6;
|
|
57
42
|
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
export const
|
|
43
|
+
/**
|
|
44
|
+
* Additional blur radius applied to the champion red body glow.
|
|
45
|
+
*
|
|
46
|
+
* This keeps the champion body bloom aligned with the same neon blur
|
|
47
|
+
* intensity used by the pipe outline glow, so the leader reads with
|
|
48
|
+
* comparable visual weight.
|
|
49
|
+
*/
|
|
50
|
+
export const FLAPPY_BIRD_CHAMPION_EXTRA_GLOW_BLUR_PX =
|
|
51
|
+
Math.max(24, Math.round(FLAPPY_BIRD_BODY_GLOW_BLUR_PX * 3.2)) -
|
|
52
|
+
FLAPPY_BIRD_BODY_GLOW_BLUR_PX;
|
|
66
53
|
|
|
67
54
|
/** Minimum horizontal segment length used by stepped trail rendering. */
|
|
68
55
|
export const FLAPPY_TRAIL_MIN_HORIZONTAL_SEGMENT_PX = 2;
|
|
69
56
|
|
|
70
57
|
/** Minimum vertical segment length used by stepped trail rendering. */
|
|
71
58
|
export const FLAPPY_TRAIL_MIN_VERTICAL_SEGMENT_PX = 2;
|
|
72
|
-
|
|
73
|
-
/** Additional radius applied when drawing champion leader ring. */
|
|
74
|
-
export const FLAPPY_LEADER_RING_RADIUS_OFFSET_PX = 2;
|
|
75
|
-
|
|
76
|
-
/** Stroke width used when drawing champion leader ring. */
|
|
77
|
-
export const FLAPPY_LEADER_RING_LINE_WIDTH_PX = 2;
|
|
78
|
-
|
|
79
|
-
/** Neon blur radius used when drawing the champion outline stroke. */
|
|
80
|
-
export const FLAPPY_LEADER_RING_GLOW_BLUR_PX = 10;
|
|
@@ -69,6 +69,27 @@ export const FLAPPY_PIPE_SPAWN_INTERVAL_MIN_FRAMES = Math.max(
|
|
|
69
69
|
),
|
|
70
70
|
);
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Actual edge-to-edge spacing produced at peak adaptive difficulty.
|
|
74
|
+
*
|
|
75
|
+
* The recovery target above is a lower bound, but the runtime cadence is
|
|
76
|
+
* ultimately quantized by whole frames. This value is the real rendered pipe
|
|
77
|
+
* spacing once the minimum spawn interval has been rounded to an integer.
|
|
78
|
+
*/
|
|
79
|
+
export const FLAPPY_MAX_DIFFICULTY_EDGE_TO_EDGE_PIPE_SPACING_PX =
|
|
80
|
+
FLAPPY_PIPE_SPAWN_INTERVAL_MIN_FRAMES * FLAPPY_PIPE_SPEED_MAX_PX_PER_FRAME -
|
|
81
|
+
FLAPPY_PIPE_WIDTH_PX;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Full pipe-to-pipe pitch produced at peak adaptive difficulty.
|
|
85
|
+
*
|
|
86
|
+
* This is the distance from one pipe's leading edge to the next pipe's leading
|
|
87
|
+
* edge at the hardest steady-state cadence. It is the periodicity the ground
|
|
88
|
+
* grid must match if each spawned pipe should land on the same grid phase.
|
|
89
|
+
*/
|
|
90
|
+
export const FLAPPY_MAX_DIFFICULTY_PIPE_PITCH_PX =
|
|
91
|
+
FLAPPY_PIPE_SPAWN_INTERVAL_MIN_FRAMES * FLAPPY_PIPE_SPEED_MAX_PX_PER_FRAME;
|
|
92
|
+
|
|
72
93
|
/** Initial spawn-interval multiplier relative to the current hardest interval target. */
|
|
73
94
|
export const FLAPPY_PIPE_SPAWN_INTERVAL_START_MULTIPLIER = 2.35;
|
|
74
95
|
|
|
@@ -41,9 +41,15 @@ export const FLAPPY_NETWORK_GRAPH_RIGHT_PADDING_PX = 20;
|
|
|
41
41
|
/** Graph-bottom padding for network visualization content. */
|
|
42
42
|
export const FLAPPY_NETWORK_GRAPH_BOTTOM_PADDING_PX = 18;
|
|
43
43
|
|
|
44
|
+
/** Minimum drawable graph dimension after padding is removed. */
|
|
45
|
+
export const FLAPPY_NETWORK_MIN_DRAWABLE_SIZE_PX = 1;
|
|
46
|
+
|
|
44
47
|
/** Gap between graph body and floating legend panel. */
|
|
45
48
|
export const FLAPPY_NETWORK_LEGEND_GRAPH_GAP_PX = 10;
|
|
46
49
|
|
|
50
|
+
/** Ratio used to decide whether the legend occupies the right half of the canvas. */
|
|
51
|
+
export const FLAPPY_NETWORK_LEGEND_RIGHT_SIDE_THRESHOLD_RATIO = 0.5;
|
|
52
|
+
|
|
47
53
|
/** Inner node-layout padding inside drawable network region. */
|
|
48
54
|
export const FLAPPY_NETWORK_NODE_LAYOUT_PADDING_PX = 2;
|
|
49
55
|
|
|
@@ -161,6 +167,9 @@ export const FLAPPY_NETWORK_HEADER_FONT_SIZE_PX = 11;
|
|
|
161
167
|
/** Extra pixel allowance above label baseline for minimum node-height readability. */
|
|
162
168
|
export const FLAPPY_NETWORK_MIN_NODE_HEIGHT_LABEL_EXTRA_PX = 4;
|
|
163
169
|
|
|
170
|
+
/** Minimum fit-based node height before width and label constraints are applied. */
|
|
171
|
+
export const FLAPPY_NETWORK_MIN_NODE_FIT_HEIGHT_PX = 4;
|
|
172
|
+
|
|
164
173
|
/**
|
|
165
174
|
* Layer-fit divisor used when deriving max node height from dense layer stacks.
|
|
166
175
|
*
|
|
@@ -215,3 +224,18 @@ export const FLAPPY_NETWORK_INPUT_GROUP_LABEL_FONT_WEIGHT = 700;
|
|
|
215
224
|
|
|
216
225
|
/** Text color for vertical input-group labels on neon backgrounds. */
|
|
217
226
|
export const FLAPPY_NETWORK_INPUT_GROUP_LABEL_TEXT_COLOR = '#000000';
|
|
227
|
+
|
|
228
|
+
/** Placeholder label used when the network has no hidden layers. */
|
|
229
|
+
export const FLAPPY_NETWORK_EMPTY_HIDDEN_LAYER_LABEL = '-';
|
|
230
|
+
|
|
231
|
+
/** Prefix used when hidden-layer counts are inferred rather than declared. */
|
|
232
|
+
export const FLAPPY_NETWORK_INFERRED_HIDDEN_LAYER_PREFIX = '~';
|
|
233
|
+
|
|
234
|
+
/** Separator used between hidden-layer sizes inside architecture labels. */
|
|
235
|
+
export const FLAPPY_NETWORK_HIDDEN_LAYER_SEPARATOR = ' - ';
|
|
236
|
+
|
|
237
|
+
/** Separator used between architecture columns in the compact header label. */
|
|
238
|
+
export const FLAPPY_NETWORK_ARCHITECTURE_COLUMN_SEPARATOR = ' | ';
|
|
239
|
+
|
|
240
|
+
/** Line separator used by the two-line architecture label block. */
|
|
241
|
+
export const FLAPPY_NETWORK_ARCHITECTURE_LINE_SEPARATOR = '\n';
|
|
@@ -27,4 +27,4 @@ export const FLAPPY_NETWORK_OUTPUT_SIZE = 2;
|
|
|
27
27
|
* Using at least two hidden layers improves representational flexibility for
|
|
28
28
|
* precise vertical control near narrow, fast-changing pipe targets.
|
|
29
29
|
*/
|
|
30
|
-
export const FLAPPY_NETWORK_HIDDEN_LAYER_SIZES = [8, 6, 4] as const;
|
|
30
|
+
export const FLAPPY_NETWORK_HIDDEN_LAYER_SIZES = [10, 8, 6, 4] as const;
|
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* These values are used by both browser playback and headless environment
|
|
5
5
|
* simulation when building normalized feature vectors.
|
|
6
|
+
*
|
|
7
|
+
* Keeping normalization constants shared is important because even tiny drift in
|
|
8
|
+
* feature scaling would make trainer, worker, and browser policies "see"
|
|
9
|
+
* different worlds.
|
|
6
10
|
*/
|
|
7
11
|
|
|
8
12
|
/**
|
|
@@ -10,5 +14,8 @@
|
|
|
10
14
|
*
|
|
11
15
|
* Prevents division by near-zero values when view-dependent scales are very
|
|
12
16
|
* small, keeping feature values numerically stable.
|
|
17
|
+
*
|
|
18
|
+
* If you want a quick refresher on why feature scaling matters, the Wikipedia
|
|
19
|
+
* article on "feature scaling" is a useful background reference.
|
|
13
20
|
*/
|
|
14
21
|
export const FLAPPY_NORMALIZATION_EPSILON = 0.001;
|
|
@@ -11,8 +11,8 @@ export const FLAPPY_NEON_PALETTE = {
|
|
|
11
11
|
pipeFill: '#00ff66',
|
|
12
12
|
pipeEdgeOuter: '#2dff78',
|
|
13
13
|
pipeEdgeInner: '#bfffd4',
|
|
14
|
-
championBird: '#
|
|
15
|
-
nonChampionBird: '#
|
|
14
|
+
championBird: '#ff4a8d',
|
|
15
|
+
nonChampionBird: '#00e5ff',
|
|
16
16
|
leaderRing: '#ffffff',
|
|
17
17
|
trail: '#875fff',
|
|
18
18
|
currentRunText: '#00ff66',
|
|
@@ -22,6 +22,13 @@ export const FLAPPY_NEON_PALETTE = {
|
|
|
22
22
|
hudAccent: '#ff9a2e',
|
|
23
23
|
hudPanelBackground: '#000000',
|
|
24
24
|
hudPanelBorder: '#0fb5ff',
|
|
25
|
+
horizonLine: '#0a8ea0',
|
|
26
|
+
horizonGlow: 'rgba(10, 142, 160, 0.95)',
|
|
27
|
+
groundGridLine: '#0a8ea0',
|
|
28
|
+
groundGridGlow: 'rgba(10, 142, 160, 0.9)',
|
|
29
|
+
groundGridFog: 'rgba(10, 142, 160, 0.55)',
|
|
30
|
+
groundGridPulseFill: '#fff14a',
|
|
31
|
+
groundGridPulseGlow: 'rgba(255, 241, 74, 0.92)',
|
|
25
32
|
} as const;
|
|
26
33
|
|
|
27
34
|
/** Neon bird palette for per-agent render color assignment. */
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Values in this module shape how quickly the bird falls, how strongly a flap
|
|
5
5
|
* responds, and how often a policy can react inside each visible frame.
|
|
6
|
+
*
|
|
7
|
+
* Small changes here have outsized behavioral impact because they reshape the
|
|
8
|
+
* control problem the policy is trying to solve.
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
11
|
/**
|
|
@@ -33,6 +36,9 @@ export const FLAPPY_MAX_FALL_SPEED_PX_PER_FRAME = 7;
|
|
|
33
36
|
*
|
|
34
37
|
* Values > 1 give agents finer temporal control in tight scenarios by allowing
|
|
35
38
|
* multiple react-and-integrate passes before the frame counter advances.
|
|
39
|
+
*
|
|
40
|
+
* This is one of the main levers that keeps high-speed play numerically stable
|
|
41
|
+
* without forcing the visible frame rate to explode.
|
|
36
42
|
*/
|
|
37
43
|
export const FLAPPY_CONTROL_SUBSTEPS_PER_FRAME = 4;
|
|
38
44
|
|
|
@@ -41,5 +47,8 @@ export const FLAPPY_CONTROL_SUBSTEPS_PER_FRAME = 4;
|
|
|
41
47
|
*
|
|
42
48
|
* A smaller value means the policy is expected to correct more frequently
|
|
43
49
|
* (effectively "jumping more often"), which supports narrower endgame gaps.
|
|
50
|
+
*
|
|
51
|
+
* The value is used analytically when estimating whether a late recovery is
|
|
52
|
+
* still plausible, not as the direct execution cadence of the simulation loop.
|
|
44
53
|
*/
|
|
45
54
|
export const FLAPPY_TARGET_FLAP_INTERVAL_FRAMES = 2;
|
|
@@ -30,6 +30,9 @@ export const FLAPPY_PIPE_OUTLINE_GLOW_ALPHA = 0.68;
|
|
|
30
30
|
/** Stroke width used for the soft pipe glow stroke pass (pixels). */
|
|
31
31
|
export const FLAPPY_PIPE_OUTLINE_GLOW_STROKE_WIDTH_PX = 8;
|
|
32
32
|
|
|
33
|
+
/** Inset used for the pipe entrance rim line measured from the gap-facing edge. */
|
|
34
|
+
export const FLAPPY_PIPE_ENTRY_RIM_INSET_PX = 10;
|
|
35
|
+
|
|
33
36
|
/**
|
|
34
37
|
* Cyan neon glow used for pipe outline shadow.
|
|
35
38
|
*
|
|
@@ -5,6 +5,11 @@ import { FLAPPY_WORLD_HEIGHT_PX } from './constants.world';
|
|
|
5
5
|
*
|
|
6
6
|
* These values describe the canonical pipe body size, opening geometry, visual
|
|
7
7
|
* outline offsets, and default leftward movement cadence.
|
|
8
|
+
*
|
|
9
|
+
* Educational note:
|
|
10
|
+
* Pipe constants do double duty: some values describe actual gameplay geometry,
|
|
11
|
+
* while others are chosen so the visible pipe outline and the collision envelope
|
|
12
|
+
* feel aligned to a human viewer.
|
|
8
13
|
*/
|
|
9
14
|
|
|
10
15
|
/** Pipe width (pixels). */
|
|
@@ -40,13 +45,27 @@ export const FLAPPY_PIPE_COLLISION_ENTRANCE_EXPAND_PX = Math.round(
|
|
|
40
45
|
FLAPPY_PIPE_OUTLINE_STROKE_WIDTH_PX * 0.5,
|
|
41
46
|
);
|
|
42
47
|
|
|
43
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Vertical opening size of each pipe gap (pixels).
|
|
50
|
+
*
|
|
51
|
+
* This is the nominal baseline gap before adaptive difficulty narrows it.
|
|
52
|
+
*/
|
|
44
53
|
export const FLAPPY_PIPE_GAP_PX = 150;
|
|
45
54
|
|
|
46
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* Pipe horizontal speed (pixels/frame).
|
|
57
|
+
*
|
|
58
|
+
* Higher values shrink reaction time, which makes the same gap geometry much
|
|
59
|
+
* harder even before the adaptive curriculum starts tightening gaps.
|
|
60
|
+
*/
|
|
47
61
|
export const FLAPPY_PIPE_SPEED_PX_PER_FRAME = 5;
|
|
48
62
|
|
|
49
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* Frames between spawning new pipes.
|
|
65
|
+
*
|
|
66
|
+
* Together with pipe speed, this controls horizontal pacing and how much time a
|
|
67
|
+
* policy has to recover between obstacles.
|
|
68
|
+
*/
|
|
50
69
|
export const FLAPPY_PIPE_SPAWN_INTERVAL_FRAMES = 50;
|
|
51
70
|
|
|
52
71
|
/** Minimum allowed gap center height (pixels). */
|
|
@@ -5,6 +5,10 @@ import { FLAPPY_NORMALIZATION_EPSILON as SHARED_FLAPPY_NORMALIZATION_EPSILON } f
|
|
|
5
5
|
*
|
|
6
6
|
* These values control startup defaults, emulation cadence, and common
|
|
7
7
|
* placeholder/status values rendered by the UI.
|
|
8
|
+
*
|
|
9
|
+
* This module is less about game physics and more about operator experience:
|
|
10
|
+
* what the browser shows while loading, how frequently HUD numbers refresh, and
|
|
11
|
+
* which defaults the demo uses when bootstrapping the worker.
|
|
8
12
|
*/
|
|
9
13
|
|
|
10
14
|
/** Default host container id for the browser demo mount point. */
|
|
@@ -13,16 +17,36 @@ export const DEFAULT_CONTAINER_ID = 'flappy-bird-output';
|
|
|
13
17
|
/** Emulation speed multiplier for browser playback (1.5 => 50% faster). */
|
|
14
18
|
export const FLAPPY_EMULATION_SPEED_MULTIPLIER = 1.5;
|
|
15
19
|
|
|
16
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Update HUD counters every N simulation frames to reduce DOM churn.
|
|
22
|
+
*
|
|
23
|
+
* The value trades freshness for stability. Updating every frame would make the
|
|
24
|
+
* numbers twitchier and force more frequent DOM work on the main thread.
|
|
25
|
+
*/
|
|
17
26
|
export const FLAPPY_HUD_UPDATE_INTERVAL_FRAMES = 10;
|
|
18
27
|
|
|
19
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Default population size for browser playback worker initialization.
|
|
30
|
+
*
|
|
31
|
+
* The browser default is intentionally smaller than the long-running trainer so
|
|
32
|
+
* the interactive demo remains responsive.
|
|
33
|
+
*/
|
|
20
34
|
export const FLAPPY_BROWSER_POPULATION_SIZE = 10;
|
|
21
35
|
|
|
22
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Default elitism count for browser playback worker initialization.
|
|
38
|
+
*
|
|
39
|
+
* Keeping elitism small in the browser demo emphasizes visible variety over raw
|
|
40
|
+
* training efficiency.
|
|
41
|
+
*/
|
|
23
42
|
export const FLAPPY_BROWSER_ELITISM_COUNT = 1;
|
|
24
43
|
|
|
25
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Deterministic default RNG seed shared by browser runtime and trainer flows.
|
|
46
|
+
*
|
|
47
|
+
* Reusing one canonical seed makes debugging and README examples more
|
|
48
|
+
* repeatable.
|
|
49
|
+
*/
|
|
26
50
|
export const FLAPPY_DEFAULT_RNG_SEED = 0x1234abcd;
|
|
27
51
|
|
|
28
52
|
/** Normalized decision threshold used for scalar output flap policies. */
|
|
@@ -10,6 +10,42 @@ import { FLAPPY_WORLD_HEIGHT_PX } from './constants.world';
|
|
|
10
10
|
/** Width of one repeated starfield tile (pixels). */
|
|
11
11
|
export const FLAPPY_STARFIELD_TILE_WIDTH_PX = 512;
|
|
12
12
|
|
|
13
|
+
/** Minimum positive dimension allowed for generated starfield canvases. */
|
|
14
|
+
export const FLAPPY_STARFIELD_MIN_DIMENSION_PX = 1;
|
|
15
|
+
|
|
16
|
+
/** Zero pixel origin used for starfield canvas clears and draws. */
|
|
17
|
+
export const FLAPPY_STARFIELD_ORIGIN_PX = 0;
|
|
18
|
+
|
|
19
|
+
/** Canvas rendering context identifier used for starfield tile generation. */
|
|
20
|
+
export const FLAPPY_STARFIELD_CANVAS_CONTEXT_ID = '2d';
|
|
21
|
+
|
|
22
|
+
/** Composite mode used for normal starfield canvas drawing passes. */
|
|
23
|
+
export const FLAPPY_STARFIELD_COMPOSITE_SOURCE_OVER = 'source-over';
|
|
24
|
+
|
|
25
|
+
/** Transparent shadow reset value used after glow drawing. */
|
|
26
|
+
export const FLAPPY_STARFIELD_TRANSPARENT_SHADOW_COLOR = 'transparent';
|
|
27
|
+
|
|
28
|
+
/** Default fully opaque alpha restored after tile generation. */
|
|
29
|
+
export const FLAPPY_STARFIELD_FULL_ALPHA = 1;
|
|
30
|
+
|
|
31
|
+
/** Blur reset value used after the star glow pass. */
|
|
32
|
+
export const FLAPPY_STARFIELD_NO_BLUR_PX = 0;
|
|
33
|
+
|
|
34
|
+
/** Inclusive range offset used when converting size bounds into random spans. */
|
|
35
|
+
export const FLAPPY_STARFIELD_INCLUSIVE_RANGE_OFFSET = 1;
|
|
36
|
+
|
|
37
|
+
/** Divisor that normalizes unsigned 32-bit RNG state into the unit interval. */
|
|
38
|
+
export const FLAPPY_STARFIELD_UNSIGNED_NORMALIZATION_DIVISOR = 0x1_0000_0000;
|
|
39
|
+
|
|
40
|
+
/** Primary left-shift used by the xorshift32 random transition. */
|
|
41
|
+
export const FLAPPY_STARFIELD_XORSHIFT_LEFT_SHIFT_PRIMARY = 13;
|
|
42
|
+
|
|
43
|
+
/** Middle right-shift used by the xorshift32 random transition. */
|
|
44
|
+
export const FLAPPY_STARFIELD_XORSHIFT_RIGHT_SHIFT = 17;
|
|
45
|
+
|
|
46
|
+
/** Final left-shift used by the xorshift32 random transition. */
|
|
47
|
+
export const FLAPPY_STARFIELD_XORSHIFT_LEFT_SHIFT_FINAL = 5;
|
|
48
|
+
|
|
13
49
|
/** Height of one repeated starfield tile (pixels). */
|
|
14
50
|
export const FLAPPY_STARFIELD_TILE_HEIGHT_PX = FLAPPY_WORLD_HEIGHT_PX;
|
|
15
51
|
|
|
@@ -17,10 +53,49 @@ export const FLAPPY_STARFIELD_TILE_HEIGHT_PX = FLAPPY_WORLD_HEIGHT_PX;
|
|
|
17
53
|
export const FLAPPY_STARFIELD_CYAN_FILL_STYLE = 'rgba(95, 255, 255, 1)';
|
|
18
54
|
|
|
19
55
|
/** Horizontal scroll ratio for the farthest parallax layer. */
|
|
20
|
-
export const FLAPPY_STARFIELD_FAR_SCROLL_RATIO = 0.
|
|
56
|
+
export const FLAPPY_STARFIELD_FAR_SCROLL_RATIO = 0.03;
|
|
21
57
|
|
|
22
58
|
/** Horizontal scroll ratio for the middle parallax layer. */
|
|
23
|
-
export const FLAPPY_STARFIELD_MID_SCROLL_RATIO = 0.
|
|
59
|
+
export const FLAPPY_STARFIELD_MID_SCROLL_RATIO = 0.04;
|
|
24
60
|
|
|
25
61
|
/** Horizontal scroll ratio for the nearest parallax layer. */
|
|
26
|
-
export const FLAPPY_STARFIELD_NEAR_SCROLL_RATIO = 0.
|
|
62
|
+
export const FLAPPY_STARFIELD_NEAR_SCROLL_RATIO = 0.05;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Declarative layer specs for the default starfield parallax bands.
|
|
66
|
+
*
|
|
67
|
+
* Keeping the layer recipe in data form makes it easier to swap the lower
|
|
68
|
+
* segment to a different parallax family without changing the tile builder.
|
|
69
|
+
*/
|
|
70
|
+
export const FLAPPY_STARFIELD_LAYER_SPECS = [
|
|
71
|
+
{
|
|
72
|
+
seed: 1_337,
|
|
73
|
+
scrollRatio: FLAPPY_STARFIELD_FAR_SCROLL_RATIO,
|
|
74
|
+
starCount: 35,
|
|
75
|
+
minSizePx: 1,
|
|
76
|
+
maxSizePx: 2,
|
|
77
|
+
minAlpha: 0.08,
|
|
78
|
+
maxAlpha: 0.22,
|
|
79
|
+
blurPx: 4,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
seed: 2_777,
|
|
83
|
+
scrollRatio: FLAPPY_STARFIELD_MID_SCROLL_RATIO,
|
|
84
|
+
starCount: 28,
|
|
85
|
+
minSizePx: 1,
|
|
86
|
+
maxSizePx: 3,
|
|
87
|
+
minAlpha: 0.1,
|
|
88
|
+
maxAlpha: 0.28,
|
|
89
|
+
blurPx: 6,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
seed: 4_242,
|
|
93
|
+
scrollRatio: FLAPPY_STARFIELD_NEAR_SCROLL_RATIO,
|
|
94
|
+
starCount: 23,
|
|
95
|
+
minSizePx: 2,
|
|
96
|
+
maxSizePx: 4,
|
|
97
|
+
minAlpha: 0.12,
|
|
98
|
+
maxAlpha: 0.34,
|
|
99
|
+
blurPx: 8,
|
|
100
|
+
},
|
|
101
|
+
] as const;
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
* Constants are now organized into small, category-focused modules
|
|
5
5
|
* (`constants.*.ts`). This file remains as a compatibility export surface so
|
|
6
6
|
* existing imports continue to work while callers migrate gradually.
|
|
7
|
+
*
|
|
8
|
+
* Educational note:
|
|
9
|
+
* Treat this file as the folder map, not the best place to learn individual
|
|
10
|
+
* values. The category modules below are where the real documentation lives:
|
|
11
|
+
* physics, pipes, observation, runtime, rendering, network layout, and so on.
|
|
7
12
|
*/
|
|
8
13
|
|
|
9
14
|
export * from './constants.world';
|
|
@@ -41,6 +46,7 @@ export * from './constants.stats';
|
|
|
41
46
|
export * from './constants.network-view';
|
|
42
47
|
export * from './constants.birds';
|
|
43
48
|
export {
|
|
49
|
+
FLAPPY_PIPE_ENTRY_RIM_INSET_PX,
|
|
44
50
|
FLAPPY_PIPE_OUTLINE_GLOW_ALPHA,
|
|
45
51
|
FLAPPY_PIPE_OUTLINE_GLOW_STROKE_WIDTH_PX,
|
|
46
52
|
FLAPPY_PIPE_OUTLINE_CYAN_GLOW_COLOR,
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# environment
|
|
2
|
+
|
|
3
|
+
## environment/environment.types.ts
|
|
4
|
+
|
|
5
|
+
### FlappyBird
|
|
6
|
+
|
|
7
|
+
Bird kinematic state for one simulation frame.
|
|
8
|
+
|
|
9
|
+
The environment keeps only the minimum physics state needed to advance the
|
|
10
|
+
episode: vertical position and vertical velocity.
|
|
11
|
+
|
|
12
|
+
### FlappyDifficultyScale
|
|
13
|
+
|
|
14
|
+
Difficulty scale used by the curriculum scheduler.
|
|
15
|
+
|
|
16
|
+
- `0` means easiest profile (wide gaps, slower pipes).
|
|
17
|
+
- `1` means fully adaptive profile based on passed pipes.
|
|
18
|
+
|
|
19
|
+
Values between `0` and `1` interpolate between those extremes, which lets the
|
|
20
|
+
trainer or environment caller dial curriculum strength continuously.
|
|
21
|
+
|
|
22
|
+
### FlappyGameState
|
|
23
|
+
|
|
24
|
+
Full simulation state for one Flappy episode.
|
|
25
|
+
|
|
26
|
+
Educational note:
|
|
27
|
+
This is the canonical single-episode world state used by evaluation and some
|
|
28
|
+
trainer-facing helpers. It is intentionally compact so stepping the world is
|
|
29
|
+
deterministic and easy to inspect.
|
|
30
|
+
|
|
31
|
+
### FlappyObservationFeatures
|
|
32
|
+
|
|
33
|
+
Structured observation features used to build the neural-network input vector.
|
|
34
|
+
|
|
35
|
+
Re-exported from shared simulation utilities so trainer and browser paths
|
|
36
|
+
stay synchronized as the observation schema evolves.
|
|
37
|
+
|
|
38
|
+
### FlappyPipe
|
|
39
|
+
|
|
40
|
+
Pipe obstacle definition.
|
|
41
|
+
|
|
42
|
+
Pipes move from right to left. The bird scores once per pipe when the pipe
|
|
43
|
+
completely crosses the bird x-position.
|
|
44
|
+
|
|
45
|
+
This is the environment-owned pipe state, distinct from the packed snapshot
|
|
46
|
+
transport shapes used by the browser worker.
|
|
47
|
+
|
|
48
|
+
## environment/environment.constants.ts
|
|
49
|
+
|
|
50
|
+
### FLAPPY_ENVIRONMENT_DEFAULT_CONTROL_SUBSTEPS_PER_FRAME
|
|
51
|
+
|
|
52
|
+
### FLAPPY_ENVIRONMENT_DEFAULT_DIFFICULTY_SCALE
|
|
53
|
+
|
|
54
|
+
### FLAPPY_ENVIRONMENT_MAX_FRAMES_PER_EPISODE
|
|
55
|
+
|
|
56
|
+
## environment/environment.step.service.ts
|
|
57
|
+
|
|
58
|
+
### stepFlappyState
|
|
59
|
+
|
|
60
|
+
`(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, rng: import("test/examples/flappy_bird/rng").FlappyRng, flap: boolean, difficultyScale: number) => void`
|
|
61
|
+
|
|
62
|
+
Advance the simulation by one frame.
|
|
63
|
+
|
|
64
|
+
This is the simplest stepping surface: one logical frame and one flap choice.
|
|
65
|
+
More advanced callers can use the control-substep variant below.
|
|
66
|
+
|
|
67
|
+
Parameters:
|
|
68
|
+
- `state` - - Mutable state object to update in-place.
|
|
69
|
+
- `rng` - - Random source used to spawn pipes.
|
|
70
|
+
- `flap` - - If true, applies an upward velocity impulse.
|
|
71
|
+
- `difficultyScale` - - Curriculum difficulty scale in [0, 1].
|
|
72
|
+
|
|
73
|
+
Returns: Nothing.
|
|
74
|
+
|
|
75
|
+
### stepFlappyStateWithControlSubsteps
|
|
76
|
+
|
|
77
|
+
`(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, rng: import("test/examples/flappy_bird/rng").FlappyRng, shouldFlapForSubstep: () => boolean, difficultyScale: number, controlSubstepsPerFrame: number) => void`
|
|
78
|
+
|
|
79
|
+
Advance one logical frame using multiple control/physics substeps.
|
|
80
|
+
|
|
81
|
+
This allows policies to react multiple times before `frameIndex` advances,
|
|
82
|
+
improving responsiveness in high-difficulty scenarios.
|
|
83
|
+
|
|
84
|
+
Educational note:
|
|
85
|
+
Splitting a logical frame into smaller control steps is a simple numerical
|
|
86
|
+
stability trick. It reduces the chance that fast pipes or large velocity
|
|
87
|
+
updates make the environment feel artificially coarse.
|
|
88
|
+
|
|
89
|
+
For background reading, the Wikipedia article on "numerical integration"
|
|
90
|
+
provides the general idea behind updating continuous motion in small steps.
|
|
91
|
+
|
|
92
|
+
Parameters:
|
|
93
|
+
- `state` - - Mutable state object to update in-place.
|
|
94
|
+
- `rng` - - Random source used to spawn pipes.
|
|
95
|
+
- `shouldFlapForSubstep` - - Callback deciding flap action per substep.
|
|
96
|
+
- `difficultyScale` - - Curriculum difficulty scale in [0, 1].
|
|
97
|
+
- `controlSubstepsPerFrame` - - Number of substeps to run this frame.
|
|
98
|
+
|
|
99
|
+
Returns: Nothing.
|
|
100
|
+
|
|
101
|
+
## environment/environment.state.service.ts
|
|
102
|
+
|
|
103
|
+
### createInitialFlappyState
|
|
104
|
+
|
|
105
|
+
`(rng: import("test/examples/flappy_bird/rng").FlappyRng) => import("test/examples/flappy_bird/environment/environment.types").FlappyGameState`
|
|
106
|
+
|
|
107
|
+
Create a fresh Flappy Bird episode state.
|
|
108
|
+
|
|
109
|
+
Educational note:
|
|
110
|
+
A new episode starts with one initial pipe already materialized so the first
|
|
111
|
+
observation is meaningful immediately. That avoids a cold-start phase where a
|
|
112
|
+
policy would receive mostly empty-space inputs.
|
|
113
|
+
|
|
114
|
+
Parameters:
|
|
115
|
+
- `rng` - - Random source used to generate initial pipe configuration.
|
|
116
|
+
|
|
117
|
+
Returns: Initial state for one deterministic rollout.
|
|
118
|
+
|
|
119
|
+
## environment/environment.collision.utils.ts
|
|
120
|
+
|
|
121
|
+
### updateCollisionAndProgressState
|
|
122
|
+
|
|
123
|
+
`(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState) => void`
|
|
124
|
+
|
|
125
|
+
Apply out-of-bounds, pipe-collision, and pass-credit rules for one substep.
|
|
126
|
+
|
|
127
|
+
Educational note:
|
|
128
|
+
Collision resolution and progress credit live together because both depend on
|
|
129
|
+
the same bird-vs-pipe geometry for the current substep. Keeping them in one
|
|
130
|
+
place helps the environment avoid inconsistent "passed but also collided"
|
|
131
|
+
edge cases.
|
|
132
|
+
|
|
133
|
+
Parameters:
|
|
134
|
+
- `state` - - Mutable simulation state to update in-place.
|
|
135
|
+
|
|
136
|
+
Returns: Nothing.
|
|
137
|
+
|
|
138
|
+
## environment/environment.observation.utils.ts
|
|
139
|
+
|
|
140
|
+
### getFlappyObservation
|
|
141
|
+
|
|
142
|
+
`(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, difficultyScale: number) => number[]`
|
|
143
|
+
|
|
144
|
+
Generate the network observation vector for the current state.
|
|
145
|
+
|
|
146
|
+
Educational note:
|
|
147
|
+
This helper is the environment-facing bridge into the shared observation
|
|
148
|
+
system. It keeps the environment API simple while ensuring evaluation,
|
|
149
|
+
training, and browser playback all derive their policy inputs from the same
|
|
150
|
+
feature definitions.
|
|
151
|
+
|
|
152
|
+
Observation (12 numbers):
|
|
153
|
+
1) bird y position normalized to [0, 1]
|
|
154
|
+
2) bird vertical velocity normalized to [-1, 1]
|
|
155
|
+
3) distance to next pipe normalized to [0, 1]
|
|
156
|
+
4) delta (bird y - gap center y) normalized to [-1, 1]
|
|
157
|
+
5) next pipe gap top normalized to [0, 1]
|
|
158
|
+
6) next pipe gap bottom normalized to [0, 1]
|
|
159
|
+
7) distance to second pipe normalized to [0, 1]
|
|
160
|
+
8) delta to second gap center normalized to [-1, 1]
|
|
161
|
+
9) time-to-next-pipe closeness normalized to [0, 1]
|
|
162
|
+
10) signed clearance relative to next gap normalized to [-1, 1]
|
|
163
|
+
11) required vertical velocity toward next gap center normalized to [-1, 1]
|
|
164
|
+
12) gap-center transition (next to second) normalized to [-1, 1]
|
|
165
|
+
|
|
166
|
+
Parameters:
|
|
167
|
+
- `state` - - Current state.
|
|
168
|
+
- `difficultyScale` - - Curriculum difficulty scale in [0, 1].
|
|
169
|
+
|
|
170
|
+
Returns: Input vector for the neural network.
|
|
171
|
+
|
|
172
|
+
### getFlappyObservationFeatures
|
|
173
|
+
|
|
174
|
+
`(state: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, difficultyScale: number) => import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures`
|
|
175
|
+
|
|
176
|
+
Resolve structured observation features for policy input and reward shaping.
|
|
177
|
+
|
|
178
|
+
Parameters:
|
|
179
|
+
- `state` - - Current state.
|
|
180
|
+
- `difficultyScale` - - Curriculum difficulty scale in [0, 1].
|
|
181
|
+
|
|
182
|
+
Returns: Named feature object.
|
|
@@ -11,7 +11,14 @@ import type { FlappyGameState } from './environment.types';
|
|
|
11
11
|
/**
|
|
12
12
|
* Apply out-of-bounds, pipe-collision, and pass-credit rules for one substep.
|
|
13
13
|
*
|
|
14
|
+
* Educational note:
|
|
15
|
+
* Collision resolution and progress credit live together because both depend on
|
|
16
|
+
* the same bird-vs-pipe geometry for the current substep. Keeping them in one
|
|
17
|
+
* place helps the environment avoid inconsistent "passed but also collided"
|
|
18
|
+
* edge cases.
|
|
19
|
+
*
|
|
14
20
|
* @param state - Mutable simulation state to update in-place.
|
|
21
|
+
* @returns Nothing.
|
|
15
22
|
*/
|
|
16
23
|
export function updateCollisionAndProgressState(state: FlappyGameState): void {
|
|
17
24
|
// Step 1: Resolve world-bound collisions.
|