@reicek/neataptic-ts 0.1.25 → 0.1.26
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/copilot-instructions.md +11 -0
- package/.github/skills/trace-analyzer-extension/SKILL.md +3 -3
- package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +1 -1
- package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +1 -1
- package/.github/skills/trace-audit-reporting/SKILL.md +3 -3
- package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +1 -1
- package/package.json +19 -13
- package/plans/Flappy_Bird_Folder_Documentation_Pass.md +4 -4
- package/plans/README.md +24 -0
- package/plans/Roadmap.md +62 -40
- package/plans/analyze-trace-solid-split.plans.md +66 -0
- package/plans/architecture-solid-split.plans.md +9 -15
- package/plans/asciiMaze-typescript-repair.plans.md +1 -1
- package/plans/generate-docs-solid-split.plans.md +87 -0
- package/plans/methods-docs.plans.md +25 -1
- package/plans/methods-solid-split.plans.md +14 -14
- package/plans/neat-docs.plans.md +9 -1
- package/plans/neat-test-surface-repair.plans.md +1 -1
- package/plans/render-docs-html-solid-split.plans.md +68 -0
- package/plans/src-no-explicit-any-cleanup.plans.md +1 -1
- package/plans/utils-docs.plans.md +6 -1
- package/scripts/analyze-trace/analyze-trace.analysis.ts +479 -0
- package/scripts/analyze-trace/analyze-trace.constants.ts +35 -0
- package/scripts/analyze-trace/analyze-trace.io.ts +69 -0
- package/scripts/analyze-trace/analyze-trace.report.ts +100 -0
- package/scripts/analyze-trace/analyze-trace.shared.ts +116 -0
- package/scripts/analyze-trace/analyze-trace.ts +45 -0
- package/scripts/analyze-trace/analyze-trace.types.ts +72 -0
- package/scripts/assets/theme.css +80 -23
- package/scripts/copy-examples.ts +239 -0
- package/scripts/export-onnx.ts +223 -0
- package/scripts/generate-bench-tables.ts +378 -37
- package/scripts/generate-docs/generate-docs.constants.ts +107 -0
- package/scripts/generate-docs/generate-docs.order.ts +355 -0
- package/scripts/generate-docs/generate-docs.state.ts +31 -0
- package/scripts/generate-docs/generate-docs.targets.ts +165 -0
- package/scripts/generate-docs/generate-docs.ts +63 -0
- package/scripts/generate-docs/generate-docs.types.ts +112 -0
- package/scripts/generate-docs/output/generate-docs.output.folder-index.utils.ts +167 -0
- package/scripts/generate-docs/output/generate-docs.output.ordering.utils.ts +353 -0
- package/scripts/generate-docs/output/generate-docs.output.readme.utils.ts +420 -0
- package/scripts/generate-docs/output/generate-docs.output.ts +123 -0
- package/scripts/generate-docs/output/generate-docs.output.warnings.utils.ts +219 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.collection.utils.ts +365 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.jsdoc.utils.ts +373 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.normalize.utils.ts +155 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.render.utils.ts +149 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.signature.utils.ts +289 -0
- package/scripts/generate-docs/symbols/generate-docs.symbols.ts +11 -0
- package/scripts/mermaid-cli.mjs +102 -22
- package/scripts/mermaid-cli.ts +736 -0
- package/scripts/render-docs-html/render-docs-html.assets.ts +54 -0
- package/scripts/render-docs-html/render-docs-html.mermaid.ts +245 -0
- package/scripts/{render-docs-html.sidebar.ts → render-docs-html/render-docs-html.navigation.ts} +141 -144
- package/scripts/render-docs-html/render-docs-html.pages.ts +333 -0
- package/scripts/render-docs-html/render-docs-html.shared.ts +333 -0
- package/scripts/render-docs-html/render-docs-html.types.ts +42 -0
- package/scripts/render-docs-html.ts +23 -587
- package/scripts/run-docs.ts +238 -0
- package/scripts/write-dist-docs-pkg.ts +40 -0
- package/src/README.md +75 -75
- package/src/architecture/connection/README.md +5 -5
- package/src/architecture/layer/README.md +508 -508
- package/src/architecture/network/README.md +1458 -1458
- package/src/architecture/network/activate/README.md +694 -694
- package/src/architecture/network/bootstrap/README.md +77 -77
- package/src/architecture/network/connect/README.md +74 -74
- package/src/architecture/network/deterministic/README.md +135 -135
- package/src/architecture/network/evolve/README.md +364 -364
- package/src/architecture/network/gating/README.md +130 -130
- package/src/architecture/network/genetic/README.md +399 -399
- package/src/architecture/network/mutate/README.md +897 -897
- package/src/architecture/network/onnx/README.md +720 -720
- package/src/architecture/network/onnx/export/README.md +728 -728
- package/src/architecture/network/onnx/export/layers/README.md +450 -450
- package/src/architecture/network/onnx/import/README.md +618 -618
- package/src/architecture/network/onnx/schema/README.md +32 -32
- package/src/architecture/network/prune/README.md +245 -245
- package/src/architecture/network/remove/README.md +135 -135
- package/src/architecture/network/runtime/README.md +106 -106
- package/src/architecture/network/serialize/README.md +542 -542
- package/src/architecture/network/slab/README.md +608 -608
- package/src/architecture/network/standalone/README.md +212 -212
- package/src/architecture/network/stats/README.md +84 -84
- package/src/architecture/network/topology/README.md +465 -465
- package/src/architecture/network/training/README.md +200 -200
- package/src/architecture/node/README.md +5 -5
- package/src/architecture/nodePool/README.md +14 -14
- package/src/methods/README.md +99 -99
- package/src/methods/activation/README.md +189 -189
- package/src/methods/cost/README.md +131 -131
- package/src/methods/rate/README.md +86 -86
- package/src/multithreading/README.md +77 -77
- package/src/multithreading/workers/browser/README.md +8 -8
- package/src/multithreading/workers/node/README.md +8 -8
- package/src/neat/README.md +148 -148
- package/src/neat/adaptive/README.md +120 -120
- package/src/neat/adaptive/acceptance/README.md +40 -40
- package/src/neat/adaptive/complexity/README.md +137 -137
- package/src/neat/adaptive/core/README.md +197 -197
- package/src/neat/adaptive/lineage/README.md +90 -90
- package/src/neat/adaptive/mutation/README.md +284 -284
- package/src/neat/compat/README.md +43 -43
- package/src/neat/compat/core/README.md +90 -90
- package/src/neat/diversity/README.md +35 -35
- package/src/neat/diversity/core/README.md +88 -88
- package/src/neat/evaluate/README.md +85 -85
- package/src/neat/evaluate/auto-distance/README.md +75 -75
- package/src/neat/evaluate/entropy-compat/README.md +37 -37
- package/src/neat/evaluate/entropy-sharing/README.md +43 -43
- package/src/neat/evaluate/fitness/README.md +23 -23
- package/src/neat/evaluate/novelty/README.md +120 -120
- package/src/neat/evaluate/objectives/README.md +17 -17
- package/src/neat/evaluate/shared/README.md +94 -94
- package/src/neat/evolve/README.md +96 -96
- package/src/neat/evolve/adaptive/README.md +60 -60
- package/src/neat/evolve/objectives/README.md +63 -63
- package/src/neat/evolve/offspring/README.md +56 -56
- package/src/neat/evolve/population/README.md +171 -171
- package/src/neat/evolve/runtime/README.md +79 -79
- package/src/neat/evolve/speciation/README.md +74 -74
- package/src/neat/evolve/warnings/README.md +10 -10
- package/src/neat/export/README.md +114 -114
- package/src/neat/helpers/README.md +50 -50
- package/src/neat/init/README.md +9 -9
- package/src/neat/lineage/core/README.md +101 -101
- package/src/neat/multiobjective/category/README.md +74 -74
- package/src/neat/multiobjective/crowding/README.md +272 -272
- package/src/neat/multiobjective/dominance/README.md +171 -171
- package/src/neat/multiobjective/fronts/README.md +68 -68
- package/src/neat/multiobjective/metrics/README.md +43 -43
- package/src/neat/multiobjective/objectives/README.md +31 -31
- package/src/neat/multiobjective/shared/README.md +27 -27
- package/src/neat/mutation/README.md +97 -97
- package/src/neat/mutation/add-conn/README.md +115 -115
- package/src/neat/mutation/add-node/README.md +126 -126
- package/src/neat/mutation/flow/README.md +149 -149
- package/src/neat/mutation/repair/README.md +185 -185
- package/src/neat/mutation/select/README.md +117 -117
- package/src/neat/mutation/shared/README.md +32 -32
- package/src/neat/objectives/README.md +25 -25
- package/src/neat/objectives/core/README.md +67 -67
- package/src/neat/pruning/README.md +40 -40
- package/src/neat/pruning/core/README.md +171 -171
- package/src/neat/pruning/facade/README.md +32 -32
- package/src/neat/rng/README.md +104 -104
- package/src/neat/rng/core/README.md +137 -137
- package/src/neat/rng/facade/README.md +50 -50
- package/src/neat/selection/README.md +111 -111
- package/src/neat/selection/core/README.md +227 -227
- package/src/neat/selection/facade/README.md +61 -61
- package/src/neat/shared/README.md +163 -163
- package/src/neat/speciation/README.md +31 -31
- package/src/neat/speciation/threshold/README.md +35 -35
- package/src/neat/species/README.md +25 -25
- package/src/neat/species/core/README.md +20 -20
- package/src/neat/species/core/shared/README.md +18 -18
- package/src/neat/species/history/context/README.md +22 -22
- package/src/neat/telemetry/accessors/README.md +58 -58
- package/src/neat/telemetry/exports/README.md +233 -233
- package/src/neat/telemetry/facade/README.md +252 -252
- package/src/neat/telemetry/facade/archive/README.md +57 -57
- package/src/neat/telemetry/facade/buffer/README.md +43 -43
- package/src/neat/telemetry/facade/lineage/README.md +12 -12
- package/src/neat/telemetry/facade/objectives/README.md +44 -44
- package/src/neat/telemetry/facade/runtime/README.md +26 -26
- package/src/neat/telemetry/facade/species/README.md +27 -27
- package/src/neat/telemetry/metrics/README.md +696 -696
- package/src/neat/telemetry/recorder/README.md +57 -57
- package/src/neat/telemetry/types/README.md +32 -32
- package/src/neat/topology-intent/README.md +75 -75
- package/src/utils/README.md +193 -193
- package/test/examples/asciiMaze/browser-entry/README.md +92 -92
- package/test/examples/asciiMaze/dashboardManager/README.md +109 -109
- package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +28 -28
- package/test/examples/asciiMaze/evolutionEngine/README.md +1527 -1527
- package/test/examples/asciiMaze/mazeMovement/README.md +105 -105
- package/test/examples/asciiMaze/mazeMovement/finalization/README.md +16 -16
- package/test/examples/asciiMaze/mazeMovement/policy/README.md +57 -57
- package/test/examples/asciiMaze/mazeMovement/runtime/README.md +52 -52
- package/test/examples/asciiMaze/mazeMovement/shaping/README.md +46 -46
- package/test/examples/flappy_bird/browser-entry/README.md +508 -508
- package/test/examples/flappy_bird/browser-entry/host/README.md +101 -101
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +144 -144
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +194 -194
- package/test/examples/flappy_bird/browser-entry/playback/README.md +278 -278
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +129 -129
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +502 -502
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +139 -139
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +10 -10
- package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +43 -43
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +30 -30
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +59 -59
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +276 -276
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +16 -16
- package/test/examples/flappy_bird/constants/README.md +1070 -1070
- package/test/examples/flappy_bird/environment/README.md +22 -22
- package/test/examples/flappy_bird/evaluation/README.md +32 -32
- package/test/examples/flappy_bird/evaluation/rollout/README.md +141 -141
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +425 -425
- package/test/examples/flappy_bird/simulation-shared/README.md +170 -170
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +109 -109
- package/test/examples/flappy_bird/trainer/README.md +325 -325
- package/test/examples/flappy_bird/trainer/evaluation/README.md +74 -74
- package/scripts/analyze-trace.ts +0 -590
- package/scripts/copy-examples.mjs +0 -114
- package/scripts/export-onnx.mjs +0 -86
- package/scripts/generate-bench-tables.mjs +0 -182
- package/scripts/generate-docs.ts +0 -2900
- package/scripts/write-dist-docs-pkg.mjs +0 -16
|
@@ -37,6 +37,29 @@ flowchart TD
|
|
|
37
37
|
|
|
38
38
|
## neat/evaluate/fitness/evaluate.fitness.ts
|
|
39
39
|
|
|
40
|
+
### clearGenomeStateIfRequested
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
clearGenomeStateIfRequested(
|
|
44
|
+
controller: NeatControllerForEval,
|
|
45
|
+
evaluationOptions: { [key: string]: unknown; fitnessPopulation?: boolean | undefined; clear?: boolean | undefined; novelty?: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; } | undefined; entropySharingTuning?: { enabled?: boolean | undefined; targetEntropyVar?: number | undefined; adjustRate?: number | undefined; minSigma?: number | undefined; maxSigma?: number | undefined; } | undefined; entropyCompatTuning?: { enabled?: boolean | undefined; targetEntropy?: number | undefined; deadband?: number | undefined; adjustRate?: number | undefined; minThreshold?: number | undefined; maxThreshold?: number | undefined; } | undefined; autoDistanceCoeffTuning?: { enabled?: boolean | undefined; adjustRate?: number | undefined; minCoeff?: number | undefined; maxCoeff?: number | undefined; } | undefined; multiObjective?: { enabled?: boolean | undefined; autoEntropy?: boolean | undefined; dynamic?: { enabled?: boolean | undefined; } | undefined; } | undefined; speciation?: boolean | undefined; targetSpecies?: number | undefined; compatAdjust?: boolean | undefined; speciesAllocation?: { extendedHistory?: boolean | undefined; } | undefined; sharingSigma?: number | undefined; compatibilityThreshold?: number | undefined; excessCoeff?: number | undefined; disjointCoeff?: number | undefined; },
|
|
46
|
+
clearAction: (genome: GenomeForEvaluation) => void,
|
|
47
|
+
): void
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Clear cached genome state before evaluation when configured.
|
|
51
|
+
|
|
52
|
+
Some evaluators expect each genome to start from a clean runtime state before
|
|
53
|
+
scoring. This helper centralizes that policy so the two scoring modes do not
|
|
54
|
+
each invent their own clearing rule. If clearing is disabled, the helper does
|
|
55
|
+
nothing; if enabled, it applies the caller-provided clear action across the
|
|
56
|
+
current population.
|
|
57
|
+
|
|
58
|
+
Parameters:
|
|
59
|
+
- `controller` - - NEAT controller instance for evaluation.
|
|
60
|
+
- `evaluationOptions` - - Options object for the current evaluation pass.
|
|
61
|
+
- `clearAction` - - Action that clears a genome's internal state.
|
|
62
|
+
|
|
40
63
|
### runFitnessEvaluation
|
|
41
64
|
|
|
42
65
|
```ts
|
|
@@ -65,26 +88,3 @@ Parameters:
|
|
|
65
88
|
- `evaluationOptions` - - Options object for the current evaluation pass.
|
|
66
89
|
|
|
67
90
|
Returns: Promise that resolves after fitness evaluation completes.
|
|
68
|
-
|
|
69
|
-
### clearGenomeStateIfRequested
|
|
70
|
-
|
|
71
|
-
```ts
|
|
72
|
-
clearGenomeStateIfRequested(
|
|
73
|
-
controller: NeatControllerForEval,
|
|
74
|
-
evaluationOptions: { [key: string]: unknown; fitnessPopulation?: boolean | undefined; clear?: boolean | undefined; novelty?: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; } | undefined; entropySharingTuning?: { enabled?: boolean | undefined; targetEntropyVar?: number | undefined; adjustRate?: number | undefined; minSigma?: number | undefined; maxSigma?: number | undefined; } | undefined; entropyCompatTuning?: { enabled?: boolean | undefined; targetEntropy?: number | undefined; deadband?: number | undefined; adjustRate?: number | undefined; minThreshold?: number | undefined; maxThreshold?: number | undefined; } | undefined; autoDistanceCoeffTuning?: { enabled?: boolean | undefined; adjustRate?: number | undefined; minCoeff?: number | undefined; maxCoeff?: number | undefined; } | undefined; multiObjective?: { enabled?: boolean | undefined; autoEntropy?: boolean | undefined; dynamic?: { enabled?: boolean | undefined; } | undefined; } | undefined; speciation?: boolean | undefined; targetSpecies?: number | undefined; compatAdjust?: boolean | undefined; speciesAllocation?: { extendedHistory?: boolean | undefined; } | undefined; sharingSigma?: number | undefined; compatibilityThreshold?: number | undefined; excessCoeff?: number | undefined; disjointCoeff?: number | undefined; },
|
|
75
|
-
clearAction: (genome: GenomeForEvaluation) => void,
|
|
76
|
-
): void
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Clear cached genome state before evaluation when configured.
|
|
80
|
-
|
|
81
|
-
Some evaluators expect each genome to start from a clean runtime state before
|
|
82
|
-
scoring. This helper centralizes that policy so the two scoring modes do not
|
|
83
|
-
each invent their own clearing rule. If clearing is disabled, the helper does
|
|
84
|
-
nothing; if enabled, it applies the caller-provided clear action across the
|
|
85
|
-
current population.
|
|
86
|
-
|
|
87
|
-
Parameters:
|
|
88
|
-
- `controller` - - NEAT controller instance for evaluation.
|
|
89
|
-
- `evaluationOptions` - - Options object for the current evaluation pass.
|
|
90
|
-
- `clearAction` - - Action that clears a genome's internal state.
|
|
@@ -49,77 +49,97 @@ flowchart TD
|
|
|
49
49
|
|
|
50
50
|
## neat/evaluate/novelty/evaluate.novelty.ts
|
|
51
51
|
|
|
52
|
-
###
|
|
52
|
+
### addGenomeToNoveltyArchive
|
|
53
53
|
|
|
54
54
|
```ts
|
|
55
|
-
|
|
55
|
+
addGenomeToNoveltyArchive(
|
|
56
56
|
controller: NeatControllerForEval,
|
|
57
|
-
|
|
57
|
+
descriptor: number[],
|
|
58
|
+
novelty: number,
|
|
59
|
+
noveltyOptions: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; },
|
|
58
60
|
): void
|
|
59
61
|
```
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
This is the controller-facing entrypoint for the novelty stage. It behaves
|
|
64
|
-
like best-effort evidence enrichment after the core fitness path has run.
|
|
65
|
-
If novelty is disabled or misconfigured, evaluation can safely continue with
|
|
66
|
-
the base score evidence alone.
|
|
63
|
+
Add a descriptor to the novelty archive when it exceeds the threshold.
|
|
67
64
|
|
|
68
|
-
The
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
- only novelty evidence, optional score blending, and archive state are
|
|
73
|
-
updated.
|
|
65
|
+
The archive is intentionally bounded and selective. Threshold-based admission
|
|
66
|
+
keeps it focused on descriptors that are genuinely unusual enough to be worth
|
|
67
|
+
remembering, while the cap prevents novelty exploration from turning into an
|
|
68
|
+
unbounded memory sink.
|
|
74
69
|
|
|
75
70
|
Parameters:
|
|
76
71
|
- `controller` - - NEAT controller instance for evaluation.
|
|
77
|
-
- `
|
|
72
|
+
- `descriptor` - - Behavior descriptor for the current genome.
|
|
73
|
+
- `novelty` - - Computed novelty score.
|
|
74
|
+
- `noveltyOptions` - - Novelty configuration.
|
|
78
75
|
|
|
79
|
-
|
|
76
|
+
### applyNoveltyToPopulation
|
|
80
77
|
|
|
81
78
|
```ts
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
applyNoveltyToPopulation(
|
|
80
|
+
controller: NeatControllerForEval,
|
|
81
|
+
descriptors: number[][],
|
|
82
|
+
distanceMatrix: number[][],
|
|
83
|
+
kNeighbors: number,
|
|
84
|
+
blendFactor: number,
|
|
85
|
+
noveltyOptions: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; },
|
|
86
|
+
): void
|
|
84
87
|
```
|
|
85
88
|
|
|
86
|
-
|
|
89
|
+
Apply novelty scores and archive writes across the population.
|
|
90
|
+
|
|
91
|
+
This helper is the fold stage of the novelty pipeline. It translates the
|
|
92
|
+
descriptor-distance evidence into per-genome novelty annotations, then
|
|
93
|
+
optionally blends that evidence into numeric scores and records sufficiently
|
|
94
|
+
novel descriptors for future exploration pressure.
|
|
95
|
+
|
|
96
|
+
Parameters:
|
|
97
|
+
- `controller` - - NEAT controller instance for evaluation.
|
|
98
|
+
- `descriptors` - - Descriptor vectors for each genome.
|
|
99
|
+
- `distanceMatrix` - - Dense distance matrix.
|
|
100
|
+
- `kNeighbors` - - Number of nearest neighbors to average.
|
|
101
|
+
- `blendFactor` - - Novelty-vs-fitness blend factor.
|
|
102
|
+
- `noveltyOptions` - - Novelty configuration.
|
|
103
|
+
|
|
104
|
+
### blendNoveltyIntoScore
|
|
87
105
|
|
|
88
106
|
```ts
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
107
|
+
blendNoveltyIntoScore(
|
|
108
|
+
genome: GenomeForEvaluation,
|
|
109
|
+
novelty: number,
|
|
110
|
+
blendFactor: number,
|
|
111
|
+
): void
|
|
92
112
|
```
|
|
93
113
|
|
|
94
|
-
|
|
114
|
+
Blend novelty into the genome score when the score already exists.
|
|
95
115
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
116
|
+
This stage intentionally does not invent a base score when one is missing.
|
|
117
|
+
Novelty acts as a companion signal to the existing evaluation path, not as a
|
|
118
|
+
universal replacement for every scoring mode.
|
|
99
119
|
|
|
100
120
|
Parameters:
|
|
101
|
-
- `
|
|
102
|
-
|
|
103
|
-
|
|
121
|
+
- `genome` - - Genome to update.
|
|
122
|
+
- `novelty` - - Computed novelty value.
|
|
123
|
+
- `blendFactor` - - Blend factor for novelty versus fitness.
|
|
104
124
|
|
|
105
|
-
###
|
|
125
|
+
### buildDistanceMatrix
|
|
106
126
|
|
|
107
127
|
```ts
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
): number
|
|
128
|
+
buildDistanceMatrix(
|
|
129
|
+
descriptors: number[][],
|
|
130
|
+
): number[][]
|
|
111
131
|
```
|
|
112
132
|
|
|
113
|
-
|
|
133
|
+
Build the full pairwise distance matrix for the descriptor set.
|
|
114
134
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
135
|
+
The matrix is dense and population-order aligned so later helpers can keep
|
|
136
|
+
the scoring flow simple: each genome reads one row, drops its self-distance,
|
|
137
|
+
and averages the nearest neighbors.
|
|
118
138
|
|
|
119
139
|
Parameters:
|
|
120
|
-
- `
|
|
140
|
+
- `descriptors` - - Descriptor vectors for the current population.
|
|
121
141
|
|
|
122
|
-
Returns:
|
|
142
|
+
Returns: Dense distance matrix aligned with population order.
|
|
123
143
|
|
|
124
144
|
### buildNoveltyDescriptors
|
|
125
145
|
|
|
@@ -143,52 +163,29 @@ Parameters:
|
|
|
143
163
|
|
|
144
164
|
Returns: Descriptor vectors aligned with population order.
|
|
145
165
|
|
|
146
|
-
###
|
|
166
|
+
### computeDescriptorDistance
|
|
147
167
|
|
|
148
168
|
```ts
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
169
|
+
computeDescriptorDistance(
|
|
170
|
+
leftDescriptor: number[],
|
|
171
|
+
rightDescriptor: number[],
|
|
172
|
+
isSame: boolean,
|
|
173
|
+
): number
|
|
152
174
|
```
|
|
153
175
|
|
|
154
|
-
|
|
176
|
+
Compute the Euclidean distance between two descriptors.
|
|
155
177
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
178
|
+
Distance is computed across the shared descriptor prefix so callers can keep
|
|
179
|
+
using practical descriptor functions even when they occasionally emit vectors
|
|
180
|
+
of uneven length. Self-distance is fixed at zero to keep later neighbor
|
|
181
|
+
ranking deterministic.
|
|
159
182
|
|
|
160
183
|
Parameters:
|
|
161
|
-
- `
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
### applyNoveltyToPopulation
|
|
166
|
-
|
|
167
|
-
```ts
|
|
168
|
-
applyNoveltyToPopulation(
|
|
169
|
-
controller: NeatControllerForEval,
|
|
170
|
-
descriptors: number[][],
|
|
171
|
-
distanceMatrix: number[][],
|
|
172
|
-
kNeighbors: number,
|
|
173
|
-
blendFactor: number,
|
|
174
|
-
noveltyOptions: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; },
|
|
175
|
-
): void
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
Apply novelty scores and archive writes across the population.
|
|
179
|
-
|
|
180
|
-
This helper is the fold stage of the novelty pipeline. It translates the
|
|
181
|
-
descriptor-distance evidence into per-genome novelty annotations, then
|
|
182
|
-
optionally blends that evidence into numeric scores and records sufficiently
|
|
183
|
-
novel descriptors for future exploration pressure.
|
|
184
|
+
- `leftDescriptor` - - Left descriptor vector.
|
|
185
|
+
- `rightDescriptor` - - Right descriptor vector.
|
|
186
|
+
- `isSame` - - Whether both descriptors belong to the same genome index.
|
|
184
187
|
|
|
185
|
-
|
|
186
|
-
- `controller` - - NEAT controller instance for evaluation.
|
|
187
|
-
- `descriptors` - - Descriptor vectors for each genome.
|
|
188
|
-
- `distanceMatrix` - - Dense distance matrix.
|
|
189
|
-
- `kNeighbors` - - Number of nearest neighbors to average.
|
|
190
|
-
- `blendFactor` - - Novelty-vs-fitness blend factor.
|
|
191
|
-
- `noveltyOptions` - - Novelty configuration.
|
|
188
|
+
Returns: Euclidean distance across the shared prefix.
|
|
192
189
|
|
|
193
190
|
### computeNoveltyScore
|
|
194
191
|
|
|
@@ -211,71 +208,74 @@ Parameters:
|
|
|
211
208
|
|
|
212
209
|
Returns: Novelty score for the genome.
|
|
213
210
|
|
|
214
|
-
###
|
|
211
|
+
### getNoveltyBlendFactor
|
|
215
212
|
|
|
216
213
|
```ts
|
|
217
|
-
|
|
218
|
-
genome: GenomeForEvaluation,
|
|
219
|
-
|
|
220
|
-
blendFactor: number,
|
|
221
|
-
): void
|
|
214
|
+
getNoveltyBlendFactor(
|
|
215
|
+
noveltyOptions: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; },
|
|
216
|
+
): number
|
|
222
217
|
```
|
|
223
218
|
|
|
224
|
-
|
|
219
|
+
Resolve the novelty-vs-fitness blend factor.
|
|
225
220
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
221
|
+
A factor of `0` keeps the existing fitness score unchanged. A factor of `1`
|
|
222
|
+
makes novelty fully replace it when a numeric score exists. Values in between
|
|
223
|
+
turn novelty into a partial exploratory bonus instead of a hard override.
|
|
229
224
|
|
|
230
225
|
Parameters:
|
|
231
|
-
- `
|
|
232
|
-
- `novelty` - - Computed novelty value.
|
|
233
|
-
- `blendFactor` - - Blend factor for novelty versus fitness.
|
|
226
|
+
- `noveltyOptions` - - Novelty configuration.
|
|
234
227
|
|
|
235
|
-
|
|
228
|
+
Returns: Blend factor used when a genome already has a numeric score.
|
|
229
|
+
|
|
230
|
+
### getNoveltyNeighborCount
|
|
236
231
|
|
|
237
232
|
```ts
|
|
238
|
-
|
|
239
|
-
controller: NeatControllerForEval,
|
|
240
|
-
descriptor: number[],
|
|
241
|
-
novelty: number,
|
|
233
|
+
getNoveltyNeighborCount(
|
|
242
234
|
noveltyOptions: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; },
|
|
243
|
-
):
|
|
235
|
+
): number
|
|
244
236
|
```
|
|
245
237
|
|
|
246
|
-
|
|
238
|
+
Resolve the number of nearest neighbors used for novelty scoring.
|
|
247
239
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
unbounded memory sink.
|
|
240
|
+
Smaller neighbor counts make novelty more sensitive to local behavioral
|
|
241
|
+
differences, while larger counts smooth that signal across a wider portion of
|
|
242
|
+
the current population.
|
|
252
243
|
|
|
253
244
|
Parameters:
|
|
254
|
-
- `controller` - - NEAT controller instance for evaluation.
|
|
255
|
-
- `descriptor` - - Behavior descriptor for the current genome.
|
|
256
|
-
- `novelty` - - Computed novelty score.
|
|
257
245
|
- `noveltyOptions` - - Novelty configuration.
|
|
258
246
|
|
|
259
|
-
|
|
247
|
+
Returns: Neighbor count clamped to at least one.
|
|
248
|
+
|
|
249
|
+
### runNoveltyBlendAndArchive
|
|
260
250
|
|
|
261
251
|
```ts
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
): number
|
|
252
|
+
runNoveltyBlendAndArchive(
|
|
253
|
+
controller: NeatControllerForEval,
|
|
254
|
+
evaluationOptions: { [key: string]: unknown; fitnessPopulation?: boolean | undefined; clear?: boolean | undefined; novelty?: { enabled?: boolean | undefined; descriptor?: ((genome: GenomeForEvaluation) => number[]) | undefined; k?: number | undefined; blendFactor?: number | undefined; archiveAddThreshold?: number | undefined; } | undefined; entropySharingTuning?: { enabled?: boolean | undefined; targetEntropyVar?: number | undefined; adjustRate?: number | undefined; minSigma?: number | undefined; maxSigma?: number | undefined; } | undefined; entropyCompatTuning?: { enabled?: boolean | undefined; targetEntropy?: number | undefined; deadband?: number | undefined; adjustRate?: number | undefined; minThreshold?: number | undefined; maxThreshold?: number | undefined; } | undefined; autoDistanceCoeffTuning?: { enabled?: boolean | undefined; adjustRate?: number | undefined; minCoeff?: number | undefined; maxCoeff?: number | undefined; } | undefined; multiObjective?: { enabled?: boolean | undefined; autoEntropy?: boolean | undefined; dynamic?: { enabled?: boolean | undefined; } | undefined; } | undefined; speciation?: boolean | undefined; targetSpecies?: number | undefined; compatAdjust?: boolean | undefined; speciesAllocation?: { extendedHistory?: boolean | undefined; } | undefined; sharingSigma?: number | undefined; compatibilityThreshold?: number | undefined; excessCoeff?: number | undefined; disjointCoeff?: number | undefined; },
|
|
255
|
+
): void
|
|
267
256
|
```
|
|
268
257
|
|
|
269
|
-
Compute
|
|
258
|
+
Compute novelty, blend it into scores, and update the novelty archive.
|
|
270
259
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
260
|
+
This is the controller-facing entrypoint for the novelty stage. It behaves
|
|
261
|
+
like best-effort evidence enrichment after the core fitness path has run.
|
|
262
|
+
If novelty is disabled or misconfigured, evaluation can safely continue with
|
|
263
|
+
the base score evidence alone.
|
|
264
|
+
|
|
265
|
+
The helper preserves several important controller assumptions:
|
|
266
|
+
- the current population order is left intact,
|
|
267
|
+
- current species membership is left intact,
|
|
268
|
+
- no objective-registration policy is changed here,
|
|
269
|
+
- only novelty evidence, optional score blending, and archive state are
|
|
270
|
+
updated.
|
|
275
271
|
|
|
276
272
|
Parameters:
|
|
277
|
-
- `
|
|
278
|
-
- `
|
|
279
|
-
- `isSame` - - Whether both descriptors belong to the same genome index.
|
|
273
|
+
- `controller` - - NEAT controller instance for evaluation.
|
|
274
|
+
- `evaluationOptions` - - Options object for the current evaluation pass.
|
|
280
275
|
|
|
281
|
-
|
|
276
|
+
Example:
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
runNoveltyBlendAndArchive(controller, controller.options);
|
|
280
|
+
console.log(controller.population[0]?._novelty);
|
|
281
|
+
```
|
|
@@ -43,6 +43,23 @@ flowchart TD
|
|
|
43
43
|
|
|
44
44
|
## neat/evaluate/objectives/evaluate.objectives.ts
|
|
45
45
|
|
|
46
|
+
### registerEntropyObjective
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
registerEntropyObjective(
|
|
50
|
+
controller: NeatControllerForEval,
|
|
51
|
+
): void
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Register the entropy objective and invalidate the cached objective list.
|
|
55
|
+
|
|
56
|
+
Registering the objective is only half of the job. The cached objective list
|
|
57
|
+
must also be invalidated so later ranking stages resolve the updated
|
|
58
|
+
objective set instead of continuing to use stale ordering information.
|
|
59
|
+
|
|
60
|
+
Parameters:
|
|
61
|
+
- `controller` - - NEAT controller instance for evaluation.
|
|
62
|
+
|
|
46
63
|
### runAutoEntropyObjectiveInjection
|
|
47
64
|
|
|
48
65
|
```ts
|
|
@@ -93,20 +110,3 @@ Parameters:
|
|
|
93
110
|
- `evaluationOptions` - - Options object for the current evaluation pass.
|
|
94
111
|
|
|
95
112
|
Returns: True when entropy should be injected.
|
|
96
|
-
|
|
97
|
-
### registerEntropyObjective
|
|
98
|
-
|
|
99
|
-
```ts
|
|
100
|
-
registerEntropyObjective(
|
|
101
|
-
controller: NeatControllerForEval,
|
|
102
|
-
): void
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Register the entropy objective and invalidate the cached objective list.
|
|
106
|
-
|
|
107
|
-
Registering the objective is only half of the job. The cached objective list
|
|
108
|
-
must also be invalidated so later ranking stages resolve the updated
|
|
109
|
-
objective set instead of continuing to use stale ordering information.
|
|
110
|
-
|
|
111
|
-
Parameters:
|
|
112
|
-
- `controller` - - NEAT controller instance for evaluation.
|