@@ -14,6 +14,54 @@ For further information regarding general concepts and theory, please see the [p
1414` neat-python ` is licensed under the [ 3-clause BSD license] ( https://opensource.org/licenses/BSD-3-Clause ) . It is
1515currently only supported on Python 3.8 through 3.14, and pypy3.
1616
17+ ## What's New in 2.1 ##
18+
19+ ### Bug fixes
20+
21+ * ** ` fitness_criterion = min ` now works correctly.** Previously, only the termination check
22+ honored this setting — best-genome tracking, stagnation detection, elite selection, crossover
23+ parent selection, spawn allocation, and statistics reporting all hardcoded "higher is better."
24+ All fitness comparisons throughout the library now respect the configured criterion.
25+ * ** Checkpoints no longer repeat work on restore.** Checkpoints are now saved after fitness
26+ evaluation (in ` post_evaluate ` ) instead of after reproduction (in ` end_generation ` ). Restoring
27+ a checkpoint skips the already-completed evaluation and proceeds directly to reproduction.
28+ For experiments with expensive fitness functions this eliminates potentially hours of redundant
29+ computation per restore. Checkpoint file ` N ` now means "generation N has been evaluated."
30+ Old checkpoint files (5-tuple format) are still loadable.
31+ * ** Reporter output no longer mixes generation boundaries.** The species detail table printed by
32+ ` StdOutReporter ` previously appeared in ` end_generation ` using the post-reproduction population,
33+ which belongs to the * next* generation. It now appears in ` post_evaluate ` alongside the fitness
34+ statistics, so all output under the "Running generation N" banner is consistent.
35+ * ** Fixed two double-buffer bugs in ` CTRNN.advance ` .** Incorrect buffer swapping could cause
36+ state corruption during multi-step CTRNN evaluation.
37+ * ** Fixed aggregation validation for builtins and callables.**
38+
39+ ### NEAT paper compliance
40+
41+ Configurable options to more closely match Stanley & Miikkulainen (2002), with backward-compatible defaults:
42+
43+ * Connection gene matching by innovation number in the distance function (with separate
44+ ` excess_coefficient ` )
45+ * Canonical fitness sharing (` fitness_sharing = canonical ` )
46+ * Proportional spawn allocation (` spawn_method = proportional ` )
47+ * Interspecies crossover (` interspecies_crossover_prob ` )
48+ * Dynamic compatibility threshold adjustment (` compatibility_threshold_adjustment ` )
49+ * 75% disable rule fix: replaces (rather than layers on) inherited enabled value
50+ * Pruning of dangling nodes after deletion mutations
51+ * Node gene distance contribution and enable/disable penalty are now configurable
52+
53+ ### GPU acceleration
54+
55+ * Optional GPU-accelerated evaluation for CTRNN and Izhikevich networks via CuPy
56+ (` pip install 'neat-python[gpu]' ` ). Lazy imports — ` import neat ` never triggers a GPU dependency.
57+ * CTRNN integration switched from forward Euler to exponential Euler (ETD1) for improved
58+ numerical stability.
59+
60+ ### Other
61+
62+ * 55 new unit tests covering feature gaps (618 total).
63+ * Sphinx 9.x documentation build compatibility fix.
64+
1765## What's New in 2.0 ##
1866
1967The CTRNN (Continuous-Time Recurrent Neural Network) implementation now supports ** per-node evolvable time constants** . In v1.x, all nodes shared a single fixed time constant passed at network creation time. In v2.0, each node carries its own time constant as an evolved gene attribute, allowing the network to operate across multiple timescales simultaneously.
0 commit comments