@reicek/neataptic-ts 0.1.21 → 0.1.22
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 +29 -0
- package/.github/agents/docs-scout.agent.md +29 -0
- package/.github/agents/plan-scout.agent.md +29 -0
- package/.github/agents/solid-split.agent.md +138 -0
- package/.github/copilot-instructions.md +103 -0
- package/package.json +6 -3
- package/plans/ES2023 migration +13 -8
- package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
- 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/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 +101 -223
- package/src/architecture/README.md +57 -185
- package/src/architecture/layer/README.md +38 -38
- package/src/architecture/network/README.md +33 -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/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/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/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 +562 -568
- 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/Trace-20260309T191949.json +24124 -0
- package/test/examples/flappy_bird/browser-entry/README.md +1129 -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 +6 -399
- package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +1 -717
- package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +15 -893
- package/test/examples/flappy_bird/browser-entry/host/README.md +307 -0
- package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
- package/test/examples/flappy_bird/browser-entry/host/host.ts +562 -6
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +274 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +31 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +360 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +117 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +63 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +250 -0
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +399 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +255 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +802 -7
- package/test/examples/flappy_bird/browser-entry/playback/README.md +684 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +277 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +770 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +178 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +107 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +518 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +117 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +233 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +211 -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 +212 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +81 -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 +62 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +244 -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 +68 -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 +310 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +39 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +493 -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 +4 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +44 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +39 -122
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +62 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
- package/test/examples/flappy_bird/browser-entry/playback/playback.ts +409 -8
- package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +4 -12
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +235 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +81 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +36 -0
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +557 -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 +957 -19
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +138 -3
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +3 -27
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +1 -23
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +156 -0
- package/test/examples/flappy_bird/constants/README.md +1179 -0
- package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
- package/test/examples/flappy_bird/constants/constants.palette.ts +7 -0
- package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
- package/test/examples/flappy_bird/environment/README.md +143 -0
- package/test/examples/flappy_bird/environment/environment.observation.utils.ts +1 -19
- package/test/examples/flappy_bird/environment/environment.step.service.ts +3 -66
- package/test/examples/flappy_bird/evaluation/README.md +130 -0
- package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +1 -1
- package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +5 -375
- package/test/examples/flappy_bird/evaluation/rollout/README.md +291 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +30 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +58 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +310 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +56 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +368 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +618 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +7 -7
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +364 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +14 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +4 -201
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +184 -345
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +291 -0
- package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +5 -0
- package/test/examples/flappy_bird/simulation-shared/README.md +417 -0
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +183 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +301 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +9 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +59 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +5 -403
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +20 -6
- package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +23 -8
- package/test/examples/flappy_bird/trainer/README.md +563 -0
- package/test/examples/flappy_bird/trainer/evaluation/README.md +199 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +9 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +73 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +165 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +25 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +161 -0
- package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.ts +126 -0
- package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
- package/test/examples/flappy_bird/trainer/trainer.ts +11 -553
- 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
|
@@ -1,378 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
FLAPPY_CONTROL_SUBSTEPS_PER_FRAME,
|
|
3
|
-
FLAPPY_FITNESS_ALIGNMENT_WEIGHT_PER_FRAME,
|
|
4
|
-
FLAPPY_FITNESS_APPROACH_PROGRESS_WEIGHT,
|
|
5
|
-
FLAPPY_FITNESS_BONUS_PER_PIPE,
|
|
6
|
-
FLAPPY_FITNESS_CENTERING_PROGRESS_WEIGHT,
|
|
7
|
-
FLAPPY_FITNESS_CLEARANCE_WEIGHT_PER_FRAME,
|
|
8
|
-
FLAPPY_FITNESS_SECOND_GAP_ALIGNMENT_WEIGHT_PER_FRAME,
|
|
9
|
-
FLAPPY_FITNESS_STABLE_VELOCITY_WEIGHT_PER_FRAME,
|
|
10
|
-
FLAPPY_FITNESS_SURVIVAL_WEIGHT,
|
|
11
|
-
FLAPPY_FITNESS_TERMINAL_ALIGNMENT_BONUS_WEIGHT,
|
|
12
|
-
FLAPPY_FITNESS_TERMINAL_PROGRESS_BONUS_WEIGHT,
|
|
13
|
-
FLAPPY_MAX_FRAMES_PER_EPISODE,
|
|
14
|
-
} from '../constants/constants';
|
|
15
|
-
import {
|
|
16
|
-
FLAPPY_EVALUATION_DEFAULT_DIFFICULTY_SCALE,
|
|
17
|
-
FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_CONSECUTIVE_FRAMES,
|
|
18
|
-
FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_GRACE_FRAMES,
|
|
19
|
-
FLAPPY_EVALUATION_DEFAULT_PIPE_PROGRESS_TARGET,
|
|
20
|
-
FLAPPY_EVALUATION_DENSE_SHAPING_FRAMES_NORMALIZER,
|
|
21
|
-
FLAPPY_EVALUATION_NORMALIZED_DENSE_WEIGHT,
|
|
22
|
-
FLAPPY_EVALUATION_NORMALIZED_PROGRESS_WEIGHT,
|
|
23
|
-
FLAPPY_EVALUATION_NORMALIZED_SURVIVAL_WEIGHT,
|
|
24
|
-
FLAPPY_EVALUATION_NORMALIZED_TERMINAL_WEIGHT,
|
|
25
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_ABOVE_GAP_DELTA,
|
|
26
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_BELOW_GAP_DELTA,
|
|
27
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_CLEARANCE_THRESHOLD,
|
|
28
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_FALLING_VELOCITY,
|
|
29
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_RISING_VELOCITY,
|
|
30
|
-
} from './evaluation.constants';
|
|
31
|
-
import {
|
|
32
|
-
createInitialFlappyState,
|
|
33
|
-
getFlappyObservationFeatures,
|
|
34
|
-
stepFlappyStateWithControlSubsteps,
|
|
35
|
-
type FlappyGameState,
|
|
36
|
-
type FlappyObservationFeatures,
|
|
37
|
-
} from '../flappyEnvironment.ts';
|
|
38
|
-
import {
|
|
39
|
-
clampValue,
|
|
40
|
-
commitSharedObservationMemoryStep,
|
|
41
|
-
createSharedObservationMemoryState,
|
|
42
|
-
resolveFlapDecision,
|
|
43
|
-
resolveTemporalObservationVector,
|
|
44
|
-
} from '../flappy.simulation.shared.utils';
|
|
45
|
-
import { createXorshift32 } from '../rng';
|
|
46
|
-
import { mixGenomeEvaluationSeed } from './evaluation.seed.utils';
|
|
47
|
-
import type {
|
|
48
|
-
FlappyEpisodeResult,
|
|
49
|
-
FlappyNetworkLike,
|
|
50
|
-
FlappyRolloutOptions,
|
|
51
|
-
} from './evaluation.types';
|
|
52
|
-
|
|
53
1
|
/**
|
|
54
|
-
*
|
|
2
|
+
* Public rollout compatibility facade.
|
|
55
3
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
4
|
+
* Keeping this file at the evaluation layer preserves the established import
|
|
5
|
+
* path while the actual rollout orchestration lives behind the dedicated
|
|
6
|
+
* rollout-owned module boundary.
|
|
59
7
|
*/
|
|
60
|
-
export
|
|
61
|
-
network: FlappyNetworkLike,
|
|
62
|
-
rolloutOptions: FlappyRolloutOptions = {},
|
|
63
|
-
): FlappyEpisodeResult {
|
|
64
|
-
const genomeId = network._id ?? 0;
|
|
65
|
-
const seed = rolloutOptions.seed ?? mixGenomeEvaluationSeed(genomeId);
|
|
66
|
-
const difficultyScale = clampValue(
|
|
67
|
-
rolloutOptions.difficultyScale ??
|
|
68
|
-
FLAPPY_EVALUATION_DEFAULT_DIFFICULTY_SCALE,
|
|
69
|
-
0,
|
|
70
|
-
1,
|
|
71
|
-
);
|
|
72
|
-
const maxFramesPerEpisode = Math.max(
|
|
73
|
-
1,
|
|
74
|
-
Math.min(
|
|
75
|
-
FLAPPY_MAX_FRAMES_PER_EPISODE,
|
|
76
|
-
Math.trunc(rolloutOptions.maxFrames ?? FLAPPY_MAX_FRAMES_PER_EPISODE),
|
|
77
|
-
),
|
|
78
|
-
);
|
|
79
|
-
const earlyTerminationGraceFrames = Math.max(
|
|
80
|
-
0,
|
|
81
|
-
Math.trunc(
|
|
82
|
-
rolloutOptions.earlyTerminationGraceFrames ??
|
|
83
|
-
FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_GRACE_FRAMES,
|
|
84
|
-
),
|
|
85
|
-
);
|
|
86
|
-
const earlyTerminationConsecutiveFrames = Math.max(
|
|
87
|
-
1,
|
|
88
|
-
Math.trunc(
|
|
89
|
-
rolloutOptions.earlyTerminationConsecutiveFrames ??
|
|
90
|
-
FLAPPY_EVALUATION_DEFAULT_EARLY_TERMINATION_CONSECUTIVE_FRAMES,
|
|
91
|
-
),
|
|
92
|
-
);
|
|
93
|
-
const rng = createXorshift32(seed);
|
|
94
|
-
|
|
95
|
-
const state = createInitialFlappyState(rng);
|
|
96
|
-
const observationMemoryState = createSharedObservationMemoryState();
|
|
97
|
-
let denseShapingFitness = 0;
|
|
98
|
-
let unrecoverableFrameCount = 0;
|
|
99
|
-
|
|
100
|
-
while (!state.done && state.frameIndex < maxFramesPerEpisode) {
|
|
101
|
-
const previousObservationFeatures = getFlappyObservationFeatures(
|
|
102
|
-
state,
|
|
103
|
-
difficultyScale,
|
|
104
|
-
);
|
|
105
|
-
stepFlappyStateWithControlSubsteps(
|
|
106
|
-
state,
|
|
107
|
-
rng,
|
|
108
|
-
() => {
|
|
109
|
-
const observationFeatures = getFlappyObservationFeatures(
|
|
110
|
-
state,
|
|
111
|
-
difficultyScale,
|
|
112
|
-
);
|
|
113
|
-
const observation = resolveTemporalObservationVector(
|
|
114
|
-
observationFeatures,
|
|
115
|
-
observationMemoryState,
|
|
116
|
-
);
|
|
117
|
-
const outputs = network.activate(observation);
|
|
118
|
-
const shouldFlap = resolveFlapDecision(outputs);
|
|
119
|
-
commitSharedObservationMemoryStep(
|
|
120
|
-
observationMemoryState,
|
|
121
|
-
observationFeatures,
|
|
122
|
-
shouldFlap,
|
|
123
|
-
);
|
|
124
|
-
return shouldFlap;
|
|
125
|
-
},
|
|
126
|
-
difficultyScale,
|
|
127
|
-
FLAPPY_CONTROL_SUBSTEPS_PER_FRAME,
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
const currentObservationFeatures = getFlappyObservationFeatures(
|
|
131
|
-
state,
|
|
132
|
-
difficultyScale,
|
|
133
|
-
);
|
|
134
|
-
denseShapingFitness += computeDenseShapingReward(
|
|
135
|
-
previousObservationFeatures,
|
|
136
|
-
currentObservationFeatures,
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
if (rolloutOptions.enableEarlyTermination === true) {
|
|
140
|
-
const birdLikelyUnrecoverable = isBirdLikelyUnrecoverable(
|
|
141
|
-
currentObservationFeatures,
|
|
142
|
-
);
|
|
143
|
-
const earlyTerminationEligible =
|
|
144
|
-
state.pipesPassed === 0 &&
|
|
145
|
-
state.frameIndex >= earlyTerminationGraceFrames;
|
|
146
|
-
|
|
147
|
-
unrecoverableFrameCount =
|
|
148
|
-
earlyTerminationEligible && birdLikelyUnrecoverable
|
|
149
|
-
? unrecoverableFrameCount + 1
|
|
150
|
-
: 0;
|
|
151
|
-
|
|
152
|
-
if (unrecoverableFrameCount >= earlyTerminationConsecutiveFrames) {
|
|
153
|
-
state.done = true;
|
|
154
|
-
state.doneReason = 'collision';
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (!state.done && state.frameIndex >= maxFramesPerEpisode) {
|
|
160
|
-
state.done = true;
|
|
161
|
-
state.doneReason = 'timeout';
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const framesSurvived = state.frameIndex;
|
|
165
|
-
const pipesPassed = state.pipesPassed;
|
|
166
|
-
const survivalFitness = framesSurvived * FLAPPY_FITNESS_SURVIVAL_WEIGHT;
|
|
167
|
-
const pipePassFitness = pipesPassed * FLAPPY_FITNESS_BONUS_PER_PIPE;
|
|
168
|
-
const terminalShapingFitness = computeTerminalShapingFitness(
|
|
169
|
-
state,
|
|
170
|
-
difficultyScale,
|
|
171
|
-
);
|
|
172
|
-
const fitness =
|
|
173
|
-
rolloutOptions.normalizeFitness === true
|
|
174
|
-
? composeNormalizedFitness(
|
|
175
|
-
framesSurvived,
|
|
176
|
-
pipesPassed,
|
|
177
|
-
denseShapingFitness,
|
|
178
|
-
terminalShapingFitness,
|
|
179
|
-
maxFramesPerEpisode,
|
|
180
|
-
rolloutOptions.pipeProgressTarget,
|
|
181
|
-
)
|
|
182
|
-
: survivalFitness +
|
|
183
|
-
pipePassFitness +
|
|
184
|
-
denseShapingFitness +
|
|
185
|
-
terminalShapingFitness;
|
|
186
|
-
|
|
187
|
-
return {
|
|
188
|
-
framesSurvived,
|
|
189
|
-
pipesPassed,
|
|
190
|
-
done: state.done,
|
|
191
|
-
doneReason: state.doneReason,
|
|
192
|
-
fitness,
|
|
193
|
-
fitnessBreakdown: {
|
|
194
|
-
survival: survivalFitness,
|
|
195
|
-
pipeProgress: pipePassFitness,
|
|
196
|
-
denseShaping: denseShapingFitness,
|
|
197
|
-
terminalShaping: terminalShapingFitness,
|
|
198
|
-
},
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Computes dense reward shaping from consecutive observations.
|
|
204
|
-
*
|
|
205
|
-
* @param previousFeatures - Observation before stepping the environment.
|
|
206
|
-
* @param currentFeatures - Observation after stepping the environment.
|
|
207
|
-
* @returns Per-step shaped reward.
|
|
208
|
-
*/
|
|
209
|
-
function computeDenseShapingReward(
|
|
210
|
-
previousFeatures: FlappyObservationFeatures,
|
|
211
|
-
currentFeatures: FlappyObservationFeatures,
|
|
212
|
-
): number {
|
|
213
|
-
const nextGapAlignment =
|
|
214
|
-
1 - Math.abs(currentFeatures.normalizedDeltaToNextGap);
|
|
215
|
-
const nextGapAlignmentReward =
|
|
216
|
-
Math.max(0, nextGapAlignment) * FLAPPY_FITNESS_ALIGNMENT_WEIGHT_PER_FRAME;
|
|
217
|
-
|
|
218
|
-
const distanceImprovement = Math.max(
|
|
219
|
-
0,
|
|
220
|
-
previousFeatures.normalizedDistanceToNextPipe -
|
|
221
|
-
currentFeatures.normalizedDistanceToNextPipe,
|
|
222
|
-
);
|
|
223
|
-
const approachProgressReward =
|
|
224
|
-
distanceImprovement * FLAPPY_FITNESS_APPROACH_PROGRESS_WEIGHT;
|
|
225
|
-
|
|
226
|
-
const previousAbsoluteGapError = Math.abs(
|
|
227
|
-
previousFeatures.normalizedDeltaToNextGap,
|
|
228
|
-
);
|
|
229
|
-
const currentAbsoluteGapError = Math.abs(
|
|
230
|
-
currentFeatures.normalizedDeltaToNextGap,
|
|
231
|
-
);
|
|
232
|
-
const centeringImprovement = Math.max(
|
|
233
|
-
0,
|
|
234
|
-
previousAbsoluteGapError - currentAbsoluteGapError,
|
|
235
|
-
);
|
|
236
|
-
const centeringProgressReward =
|
|
237
|
-
centeringImprovement * FLAPPY_FITNESS_CENTERING_PROGRESS_WEIGHT;
|
|
238
|
-
|
|
239
|
-
const positiveClearance = Math.max(
|
|
240
|
-
0,
|
|
241
|
-
currentFeatures.normalizedNextGapClearance,
|
|
242
|
-
);
|
|
243
|
-
const clearanceReward =
|
|
244
|
-
positiveClearance * FLAPPY_FITNESS_CLEARANCE_WEIGHT_PER_FRAME;
|
|
245
|
-
|
|
246
|
-
const secondGapAlignment =
|
|
247
|
-
1 - Math.abs(currentFeatures.normalizedDeltaToSecondGap);
|
|
248
|
-
const secondGapAlignmentReward =
|
|
249
|
-
Math.max(0, secondGapAlignment) *
|
|
250
|
-
FLAPPY_FITNESS_SECOND_GAP_ALIGNMENT_WEIGHT_PER_FRAME;
|
|
251
|
-
|
|
252
|
-
const velocityStability = 1 - Math.abs(currentFeatures.normalizedVelocity);
|
|
253
|
-
const velocityStabilityReward =
|
|
254
|
-
Math.max(0, velocityStability) *
|
|
255
|
-
FLAPPY_FITNESS_STABLE_VELOCITY_WEIGHT_PER_FRAME;
|
|
256
|
-
|
|
257
|
-
return (
|
|
258
|
-
nextGapAlignmentReward +
|
|
259
|
-
approachProgressReward +
|
|
260
|
-
centeringProgressReward +
|
|
261
|
-
clearanceReward +
|
|
262
|
-
secondGapAlignmentReward +
|
|
263
|
-
velocityStabilityReward
|
|
264
|
-
);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Adds small terminal bonuses from final progress/alignment signals.
|
|
269
|
-
*
|
|
270
|
-
* @param episodeState - Final rollout state.
|
|
271
|
-
* @param difficultyScale - Active rollout difficulty scale.
|
|
272
|
-
* @returns Terminal shaping reward.
|
|
273
|
-
*/
|
|
274
|
-
function computeTerminalShapingFitness(
|
|
275
|
-
episodeState: FlappyGameState,
|
|
276
|
-
difficultyScale: number,
|
|
277
|
-
): number {
|
|
278
|
-
const finalObservationFeatures = getFlappyObservationFeatures(
|
|
279
|
-
episodeState,
|
|
280
|
-
difficultyScale,
|
|
281
|
-
);
|
|
282
|
-
const finalAlignment =
|
|
283
|
-
1 - Math.abs(finalObservationFeatures.normalizedDeltaToNextGap);
|
|
284
|
-
const finalProgress =
|
|
285
|
-
1 -
|
|
286
|
-
Math.max(
|
|
287
|
-
0,
|
|
288
|
-
Math.min(1, finalObservationFeatures.normalizedDistanceToNextPipe),
|
|
289
|
-
);
|
|
290
|
-
|
|
291
|
-
const terminalAlignmentBonus =
|
|
292
|
-
Math.max(0, finalAlignment) *
|
|
293
|
-
FLAPPY_FITNESS_TERMINAL_ALIGNMENT_BONUS_WEIGHT;
|
|
294
|
-
const terminalProgressBonus =
|
|
295
|
-
Math.max(0, finalProgress) * FLAPPY_FITNESS_TERMINAL_PROGRESS_BONUS_WEIGHT;
|
|
296
|
-
|
|
297
|
-
return terminalAlignmentBonus + terminalProgressBonus;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
/**
|
|
301
|
-
* Normalize and cap fitness channels so no single reward term dominates.
|
|
302
|
-
*/
|
|
303
|
-
function composeNormalizedFitness(
|
|
304
|
-
framesValue: number,
|
|
305
|
-
pipesPassedValue: number,
|
|
306
|
-
denseShapingValue: number,
|
|
307
|
-
terminalShapingValue: number,
|
|
308
|
-
maxFramesValue: number,
|
|
309
|
-
pipeProgressTarget: number | undefined,
|
|
310
|
-
): number {
|
|
311
|
-
const effectivePipeProgressTarget = Math.max(
|
|
312
|
-
1,
|
|
313
|
-
Math.trunc(
|
|
314
|
-
pipeProgressTarget ?? FLAPPY_EVALUATION_DEFAULT_PIPE_PROGRESS_TARGET,
|
|
315
|
-
),
|
|
316
|
-
);
|
|
317
|
-
const normalizedSurvival = clampValue(
|
|
318
|
-
framesValue / Math.max(1, maxFramesValue),
|
|
319
|
-
0,
|
|
320
|
-
1,
|
|
321
|
-
);
|
|
322
|
-
const normalizedPipeProgress = clampValue(
|
|
323
|
-
pipesPassedValue / effectivePipeProgressTarget,
|
|
324
|
-
0,
|
|
325
|
-
1,
|
|
326
|
-
);
|
|
327
|
-
const normalizedDenseShaping = clampValue(
|
|
328
|
-
denseShapingValue /
|
|
329
|
-
Math.max(
|
|
330
|
-
1,
|
|
331
|
-
framesValue * FLAPPY_EVALUATION_DENSE_SHAPING_FRAMES_NORMALIZER,
|
|
332
|
-
),
|
|
333
|
-
0,
|
|
334
|
-
1,
|
|
335
|
-
);
|
|
336
|
-
const normalizedTerminalShaping = clampValue(
|
|
337
|
-
terminalShapingValue /
|
|
338
|
-
Math.max(
|
|
339
|
-
1,
|
|
340
|
-
FLAPPY_FITNESS_TERMINAL_ALIGNMENT_BONUS_WEIGHT +
|
|
341
|
-
FLAPPY_FITNESS_TERMINAL_PROGRESS_BONUS_WEIGHT,
|
|
342
|
-
),
|
|
343
|
-
0,
|
|
344
|
-
1,
|
|
345
|
-
);
|
|
346
|
-
|
|
347
|
-
return (
|
|
348
|
-
normalizedSurvival *
|
|
349
|
-
FLAPPY_EVALUATION_NORMALIZED_SURVIVAL_WEIGHT *
|
|
350
|
-
FLAPPY_FITNESS_SURVIVAL_WEIGHT +
|
|
351
|
-
normalizedPipeProgress * FLAPPY_EVALUATION_NORMALIZED_PROGRESS_WEIGHT +
|
|
352
|
-
normalizedDenseShaping * FLAPPY_EVALUATION_NORMALIZED_DENSE_WEIGHT +
|
|
353
|
-
normalizedTerminalShaping * FLAPPY_EVALUATION_NORMALIZED_TERMINAL_WEIGHT
|
|
354
|
-
);
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Detects trajectories that are usually irrecoverable in early warmup.
|
|
359
|
-
*/
|
|
360
|
-
function isBirdLikelyUnrecoverable(
|
|
361
|
-
observationFeatures: FlappyObservationFeatures,
|
|
362
|
-
): boolean {
|
|
363
|
-
const farOutsideGap =
|
|
364
|
-
observationFeatures.normalizedNextGapClearance <
|
|
365
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_CLEARANCE_THRESHOLD;
|
|
366
|
-
const belowGapAndStillFalling =
|
|
367
|
-
observationFeatures.normalizedDeltaToNextGap >
|
|
368
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_BELOW_GAP_DELTA &&
|
|
369
|
-
observationFeatures.normalizedVelocity >
|
|
370
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_FALLING_VELOCITY;
|
|
371
|
-
const aboveGapAndStillRising =
|
|
372
|
-
observationFeatures.normalizedDeltaToNextGap <
|
|
373
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_ABOVE_GAP_DELTA &&
|
|
374
|
-
observationFeatures.normalizedVelocity <
|
|
375
|
-
FLAPPY_EVALUATION_UNRECOVERABLE_RISING_VELOCITY;
|
|
376
|
-
|
|
377
|
-
return farOutsideGap && (belowGapAndStillFalling || aboveGapAndStillRising);
|
|
378
|
-
}
|
|
8
|
+
export { rolloutEpisode } from './rollout/evaluation.rollout.service';
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# evaluation/rollout
|
|
2
|
+
|
|
3
|
+
## evaluation/rollout/evaluation.rollout.types.ts
|
|
4
|
+
|
|
5
|
+
### evaluation.rollout.types
|
|
6
|
+
|
|
7
|
+
Rollout-internal type contracts.
|
|
8
|
+
|
|
9
|
+
This file will host runtime-only rollout types that should not widen the
|
|
10
|
+
public evaluation-level API surface.
|
|
11
|
+
|
|
12
|
+
### DenseShapingRewardComponents
|
|
13
|
+
|
|
14
|
+
Per-frame dense shaping channels resolved from consecutive observations.
|
|
15
|
+
|
|
16
|
+
### RolloutEpisodeContext
|
|
17
|
+
|
|
18
|
+
Immutable rollout options normalized into execution-safe ranges.
|
|
19
|
+
|
|
20
|
+
### RolloutEpisodeRuntimeState
|
|
21
|
+
|
|
22
|
+
Mutable runtime state accumulated while one rollout episode executes.
|
|
23
|
+
|
|
24
|
+
### RolloutFitnessBreakdown
|
|
25
|
+
|
|
26
|
+
Fitness-channel breakdown used to compose the public episode result.
|
|
27
|
+
|
|
28
|
+
## evaluation/rollout/evaluation.rollout.service.ts
|
|
29
|
+
|
|
30
|
+
### evaluation.rollout.service
|
|
31
|
+
|
|
32
|
+
Rollout orchestration module.
|
|
33
|
+
|
|
34
|
+
This file will host the internal rollout orchestration entry while the
|
|
35
|
+
public evaluation-level service remains a stable compatibility facade.
|
|
36
|
+
|
|
37
|
+
### rolloutEpisode
|
|
38
|
+
|
|
39
|
+
`(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, rolloutOptions: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyRolloutOptions) => import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyEpisodeResult`
|
|
40
|
+
|
|
41
|
+
Roll out an episode and return details.
|
|
42
|
+
|
|
43
|
+
Parameters:
|
|
44
|
+
|
|
45
|
+
- `network` - - Genome/network to evaluate.
|
|
46
|
+
- `rolloutOptions` - - Optional rollout controls.
|
|
47
|
+
|
|
48
|
+
Returns: Episode result details.
|
|
49
|
+
|
|
50
|
+
## evaluation/rollout/evaluation.rollout.services.ts
|
|
51
|
+
|
|
52
|
+
### evaluation.rollout.services
|
|
53
|
+
|
|
54
|
+
Rollout runtime services.
|
|
55
|
+
|
|
56
|
+
This file will host context resolution, runtime initialization, frame loop,
|
|
57
|
+
and early-termination behavior for rollout execution.
|
|
58
|
+
|
|
59
|
+
### applyRolloutEarlyTerminationIfNeeded
|
|
60
|
+
|
|
61
|
+
`(rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext, rolloutEpisodeRuntimeState: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState, currentObservationFeatures: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures) => void`
|
|
62
|
+
|
|
63
|
+
Applies the optional early-termination heuristic for unrecoverable starts.
|
|
64
|
+
|
|
65
|
+
Parameters:
|
|
66
|
+
|
|
67
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
68
|
+
- `rolloutEpisodeRuntimeState` - - Mutable runtime state.
|
|
69
|
+
- `currentObservationFeatures` - - Post-step observation features.
|
|
70
|
+
|
|
71
|
+
Returns: Nothing.
|
|
72
|
+
|
|
73
|
+
### createRolloutEpisodeRuntimeState
|
|
74
|
+
|
|
75
|
+
`(rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext) => import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState`
|
|
76
|
+
|
|
77
|
+
Creates mutable runtime state for one rollout episode.
|
|
78
|
+
|
|
79
|
+
Parameters:
|
|
80
|
+
|
|
81
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
82
|
+
|
|
83
|
+
Returns: Mutable runtime state.
|
|
84
|
+
|
|
85
|
+
### finalizeRolloutEpisodeState
|
|
86
|
+
|
|
87
|
+
`(rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext, rolloutEpisodeRuntimeState: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState) => void`
|
|
88
|
+
|
|
89
|
+
Finalizes episode state after the main rollout loop exits.
|
|
90
|
+
|
|
91
|
+
Parameters:
|
|
92
|
+
|
|
93
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
94
|
+
- `rolloutEpisodeRuntimeState` - - Mutable runtime state.
|
|
95
|
+
|
|
96
|
+
Returns: Nothing.
|
|
97
|
+
|
|
98
|
+
### resolveRolloutEpisodeContext
|
|
99
|
+
|
|
100
|
+
`(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, rolloutOptions: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyRolloutOptions) => import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext`
|
|
101
|
+
|
|
102
|
+
Resolves normalized rollout configuration from user options.
|
|
103
|
+
|
|
104
|
+
Parameters:
|
|
105
|
+
|
|
106
|
+
- `network` - - Genome/network to evaluate.
|
|
107
|
+
- `rolloutOptions` - - Optional rollout controls.
|
|
108
|
+
|
|
109
|
+
Returns: Normalized rollout configuration.
|
|
110
|
+
|
|
111
|
+
### resolveRolloutFrameFlapDecision
|
|
112
|
+
|
|
113
|
+
`(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext, rolloutEpisodeRuntimeState: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState) => boolean`
|
|
114
|
+
|
|
115
|
+
Resolves the flap decision for one control substep and commits memory state.
|
|
116
|
+
|
|
117
|
+
Parameters:
|
|
118
|
+
|
|
119
|
+
- `network` - - Genome/network to evaluate.
|
|
120
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
121
|
+
- `rolloutEpisodeRuntimeState` - - Mutable runtime state.
|
|
122
|
+
|
|
123
|
+
Returns: Whether the bird should flap.
|
|
124
|
+
|
|
125
|
+
### runRolloutEpisodeFrame
|
|
126
|
+
|
|
127
|
+
`(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext, rolloutEpisodeRuntimeState: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState) => void`
|
|
128
|
+
|
|
129
|
+
Runs one rollout frame including control, shaping, and early termination.
|
|
130
|
+
|
|
131
|
+
Parameters:
|
|
132
|
+
|
|
133
|
+
- `network` - - Genome/network to evaluate.
|
|
134
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
135
|
+
- `rolloutEpisodeRuntimeState` - - Mutable runtime state.
|
|
136
|
+
|
|
137
|
+
Returns: Nothing.
|
|
138
|
+
|
|
139
|
+
### runRolloutEpisodeLoop
|
|
140
|
+
|
|
141
|
+
`(network: import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyNetworkLike, rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext, rolloutEpisodeRuntimeState: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState) => void`
|
|
142
|
+
|
|
143
|
+
Runs the main rollout loop until termination or frame-budget exhaustion.
|
|
144
|
+
|
|
145
|
+
Parameters:
|
|
146
|
+
|
|
147
|
+
- `network` - - Genome/network to evaluate.
|
|
148
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
149
|
+
- `rolloutEpisodeRuntimeState` - - Mutable runtime state.
|
|
150
|
+
|
|
151
|
+
Returns: Nothing.
|
|
152
|
+
|
|
153
|
+
## evaluation/rollout/evaluation.rollout.constants.ts
|
|
154
|
+
|
|
155
|
+
### evaluation.rollout.constants
|
|
156
|
+
|
|
157
|
+
Rollout-local constants.
|
|
158
|
+
|
|
159
|
+
This file will host rollout-only constants and sentinels that belong to the
|
|
160
|
+
rollout subsystem rather than the wider evaluation surface.
|
|
161
|
+
|
|
162
|
+
### FLAPPY_ROLLOUT_DEFAULT_GENOME_ID
|
|
163
|
+
|
|
164
|
+
### FLAPPY_ROLLOUT_DONE_REASON_COLLISION
|
|
165
|
+
|
|
166
|
+
### FLAPPY_ROLLOUT_DONE_REASON_TIMEOUT
|
|
167
|
+
|
|
168
|
+
### FLAPPY_ROLLOUT_MIN_EARLY_TERMINATION_CONSECUTIVE_FRAMES
|
|
169
|
+
|
|
170
|
+
### FLAPPY_ROLLOUT_MIN_EARLY_TERMINATION_GRACE_FRAMES
|
|
171
|
+
|
|
172
|
+
### FLAPPY_ROLLOUT_MIN_MAX_FRAMES
|
|
173
|
+
|
|
174
|
+
### FLAPPY_ROLLOUT_ZERO_FITNESS
|
|
175
|
+
|
|
176
|
+
## evaluation/rollout/evaluation.rollout.utils.ts
|
|
177
|
+
|
|
178
|
+
### evaluation.rollout.utils
|
|
179
|
+
|
|
180
|
+
Rollout shaping and result helpers.
|
|
181
|
+
|
|
182
|
+
This file will host rollout-local fitness composition, shaping utilities,
|
|
183
|
+
and terminal result assembly helpers.
|
|
184
|
+
|
|
185
|
+
### composeNormalizedFitness
|
|
186
|
+
|
|
187
|
+
`(framesValue: number, pipesPassedValue: number, denseShapingValue: number, terminalShapingValue: number, maxFramesValue: number, pipeProgressTarget: number | undefined) => number`
|
|
188
|
+
|
|
189
|
+
Normalize and cap fitness channels so no single reward term dominates.
|
|
190
|
+
|
|
191
|
+
Parameters:
|
|
192
|
+
|
|
193
|
+
- `framesValue` - - Frames survived for the episode.
|
|
194
|
+
- `pipesPassedValue` - - Pipes passed during the episode.
|
|
195
|
+
- `denseShapingValue` - - Accumulated dense shaping reward.
|
|
196
|
+
- `terminalShapingValue` - - Terminal shaping reward.
|
|
197
|
+
- `maxFramesValue` - - Frame budget used for the episode.
|
|
198
|
+
- `pipeProgressTarget` - - Optional target used to normalize pipe progress.
|
|
199
|
+
|
|
200
|
+
Returns: Normalized composite fitness.
|
|
201
|
+
|
|
202
|
+
### composeRolloutEpisodeResult
|
|
203
|
+
|
|
204
|
+
`(rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext, rolloutEpisodeRuntimeState: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState) => import("test/examples/flappy_bird/evaluation/evaluation.types").FlappyEpisodeResult`
|
|
205
|
+
|
|
206
|
+
Composes the final rollout result from the terminal game state.
|
|
207
|
+
|
|
208
|
+
Parameters:
|
|
209
|
+
|
|
210
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
211
|
+
- `rolloutEpisodeRuntimeState` - - Mutable runtime state.
|
|
212
|
+
|
|
213
|
+
Returns: Episode result details.
|
|
214
|
+
|
|
215
|
+
### computeDenseShapingReward
|
|
216
|
+
|
|
217
|
+
`(previousFeatures: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures, currentFeatures: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures) => number`
|
|
218
|
+
|
|
219
|
+
Computes dense reward shaping from consecutive observations.
|
|
220
|
+
|
|
221
|
+
Parameters:
|
|
222
|
+
|
|
223
|
+
- `previousFeatures` - - Observation before stepping the environment.
|
|
224
|
+
- `currentFeatures` - - Observation after stepping the environment.
|
|
225
|
+
|
|
226
|
+
Returns: Per-step shaped reward.
|
|
227
|
+
|
|
228
|
+
### computeTerminalShapingFitness
|
|
229
|
+
|
|
230
|
+
`(episodeState: import("test/examples/flappy_bird/environment/environment.types").FlappyGameState, difficultyScale: number) => number`
|
|
231
|
+
|
|
232
|
+
Adds small terminal bonuses from final progress/alignment signals.
|
|
233
|
+
|
|
234
|
+
Parameters:
|
|
235
|
+
|
|
236
|
+
- `episodeState` - - Final rollout state.
|
|
237
|
+
- `difficultyScale` - - Active rollout difficulty scale.
|
|
238
|
+
|
|
239
|
+
Returns: Terminal shaping reward.
|
|
240
|
+
|
|
241
|
+
### isBirdLikelyUnrecoverable
|
|
242
|
+
|
|
243
|
+
`(observationFeatures: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures) => boolean`
|
|
244
|
+
|
|
245
|
+
Detects trajectories that are usually irrecoverable in early warmup.
|
|
246
|
+
|
|
247
|
+
Parameters:
|
|
248
|
+
|
|
249
|
+
- `observationFeatures` - - Post-step observation features.
|
|
250
|
+
|
|
251
|
+
Returns: Whether the current trajectory appears unrecoverable.
|
|
252
|
+
|
|
253
|
+
### resolveDenseShapingRewardComponents
|
|
254
|
+
|
|
255
|
+
`(previousFeatures: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures, currentFeatures: import("test/examples/flappy_bird/simulation-shared/simulation-shared.types").SharedObservationFeatures) => import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").DenseShapingRewardComponents`
|
|
256
|
+
|
|
257
|
+
Resolves every dense-shaping reward component from consecutive observations.
|
|
258
|
+
|
|
259
|
+
Parameters:
|
|
260
|
+
|
|
261
|
+
- `previousFeatures` - - Observation before stepping the environment.
|
|
262
|
+
- `currentFeatures` - - Observation after stepping the environment.
|
|
263
|
+
|
|
264
|
+
Returns: Dense-shaping reward components.
|
|
265
|
+
|
|
266
|
+
### resolveRolloutFitnessBreakdown
|
|
267
|
+
|
|
268
|
+
`(rolloutEpisodeContext: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeContext, rolloutEpisodeRuntimeState: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutEpisodeRuntimeState, framesSurvived: number, pipesPassed: number) => import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutFitnessBreakdown`
|
|
269
|
+
|
|
270
|
+
Resolves the raw fitness channels from the final episode state.
|
|
271
|
+
|
|
272
|
+
Parameters:
|
|
273
|
+
|
|
274
|
+
- `rolloutEpisodeContext` - - Normalized rollout configuration.
|
|
275
|
+
- `rolloutEpisodeRuntimeState` - - Mutable runtime state.
|
|
276
|
+
- `framesSurvived` - - Final frame count.
|
|
277
|
+
- `pipesPassed` - - Final pipe-pass count.
|
|
278
|
+
|
|
279
|
+
Returns: Fitness-channel breakdown.
|
|
280
|
+
|
|
281
|
+
### resolveUnnormalizedRolloutFitness
|
|
282
|
+
|
|
283
|
+
`(rolloutFitnessBreakdown: import("test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types").RolloutFitnessBreakdown) => number`
|
|
284
|
+
|
|
285
|
+
Resolves raw fitness by summing every fitness channel.
|
|
286
|
+
|
|
287
|
+
Parameters:
|
|
288
|
+
|
|
289
|
+
- `rolloutFitnessBreakdown` - - Fitness-channel breakdown.
|
|
290
|
+
|
|
291
|
+
Returns: Raw unnormalized fitness.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rollout-local constants.
|
|
3
|
+
*
|
|
4
|
+
* This file will host rollout-only constants and sentinels that belong to the
|
|
5
|
+
* rollout subsystem rather than the wider evaluation surface.
|
|
6
|
+
*/
|
|
7
|
+
import type { FlappyGameState } from '../../flappyEnvironment.ts';
|
|
8
|
+
|
|
9
|
+
/** Default genome id used when a network does not expose one. */
|
|
10
|
+
export const FLAPPY_ROLLOUT_DEFAULT_GENOME_ID = 0;
|
|
11
|
+
|
|
12
|
+
/** Minimum positive frame-like scalar used by rollout normalization. */
|
|
13
|
+
export const FLAPPY_ROLLOUT_MIN_MAX_FRAMES = 1;
|
|
14
|
+
|
|
15
|
+
/** Minimum grace period allowed before early termination can activate. */
|
|
16
|
+
export const FLAPPY_ROLLOUT_MIN_EARLY_TERMINATION_GRACE_FRAMES = 0;
|
|
17
|
+
|
|
18
|
+
/** Minimum unrecoverable-frame streak required for early termination. */
|
|
19
|
+
export const FLAPPY_ROLLOUT_MIN_EARLY_TERMINATION_CONSECUTIVE_FRAMES = 1;
|
|
20
|
+
|
|
21
|
+
/** Shared zero baseline used across rollout fitness and counters. */
|
|
22
|
+
export const FLAPPY_ROLLOUT_ZERO_FITNESS = 0;
|
|
23
|
+
|
|
24
|
+
/** Rollout done reason used by heuristic early termination. */
|
|
25
|
+
export const FLAPPY_ROLLOUT_DONE_REASON_COLLISION: FlappyGameState['doneReason'] =
|
|
26
|
+
'collision';
|
|
27
|
+
|
|
28
|
+
/** Rollout done reason used when the episode exhausts its frame budget. */
|
|
29
|
+
export const FLAPPY_ROLLOUT_DONE_REASON_TIMEOUT: FlappyGameState['doneReason'] =
|
|
30
|
+
'timeout';
|