Skip to content

Evaluation

EvaluationSpec is the outer repetition protocol for every operation. It is separate from neural frames and world ticks.

For a Tracking target, one valid protocol is:

evaluation = EvaluationSpec(
blocks=20,
trials_per_block=1,
horizon=2200,
warmup=200,
construction_scope=:trial,
reset=:full,
root_seed=51001,
aggregate=:mean,
)

This protocol scores 2,000 ticks after warm-up, which meets Tracking’s declared minimum.

Independent units

A block or trial is usually the independent randomised unit. Agents, nodes, samples, and ticks within one world do not multiply the sample size.

Use blocks to pair declared conditions under shared nuisance randomisation. Use trials_per_block when a block contains repeated trials by design.

Construction and reset

construction_scope controls whether topology is constructed once per evaluation, block, or trial. reset controls what is reset between trials. Generic operation plans currently support only reset=:full; check rejects :body_environment and :none before a run starts because their state-retention hooks are not implemented.

warmup runs before recording and scoring. The scored duration is horizon - warmup. Choose both values from the task timescale, not from compute convenience alone.

Random streams

The default root-seed policy derives topology and world streams. Declare another named stream only when an implementation consumes it. Records retain every declared realised seed.

Separate calibration, development, variance-pilot, confirmation, and robustness seed ledgers. A reproducible seed does not make reused development data independent evidence.

Aggregation

Aggregation combines declared trial values inside an operation. It does not authorise a cross-task aggregate. Keep task-native results and missing or failed trials visible.

Source: src/core/Specifications.jl, src/api/Composition.jl.