Add observation_function for full custom control over the observation

Lets a game define how its state becomes an observation as a plain
Python function (module:attr), used identically by GameEnvironment
(training) and TrainedPolicy (inference) instead of two independently
maintained encoding paths. Removes the egocentric/egocentric_player/
egocentric_radius flags — cropping is now something an
observation_function does itself by calling egocentric_board(), and
extras_size is discovered from one sampled observation instead of
being configured via observe_state_sizes.
This commit is contained in:
Chris Proctor
2026-06-23 20:45:48 -04:00
parent 426e59a54e
commit 0cd3c3b488
14 changed files with 479 additions and 205 deletions

View File

@@ -351,6 +351,13 @@ engineering decisions live: what derived quantities should the agent
see, and does giving it those values give it an advantage a human
player would not have?
``character_set``/``observe_state`` cover the common cases, but
sometimes you want full control over how the board becomes numbers — for
example, cropping it to a window centered on the agent rather than always
seeing the whole thing. ``observation_function`` (see :doc:`reference`) lets
you write that transformation as ordinary code instead of a combination of
flags.
Neural network architectures
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~