Evidence accumulation
What must be accumulated?
evidence_accumulation supplies left or right pulses followed by go.
Its three receptors are left pulse, right pulse and go; two effectors choose a side
during response. Each pulse lasts pulse_ticks world ticks, with one neural frame
per tick.
A balanced hidden label chooses the majority side. For n pulses and fraction f,
the majority count is n * (1 + f) / 2 and the minority count is
n * (1 - f) / 2. Counts must be integral, both sides must occur and
0 < f < 1.
from brainlesslab import TaskSpecfrom brainlesslab.tasks import definition, resolve
task = TaskSpec("evidence_accumulation", options={"pulse_count": 32, "evidence_fraction": 0.25})print(resolve(task))print(definition(task))Expect 32 one-tick pulses, an eight-tick response and horizon 40. The majority has 20 pulses and the minority 12. Nine presets cross 16, 32 and 64 pulses with fractions 0.125, 0.25 and 0.5.
Why is the last pulse controlled?
The final pulse is chosen uniformly independently of the answer. The remaining sequence is adjusted to preserve the declared counts and shuffled. This makes the last observation alone uninformative in expectation, rather than letting a lucky final pulse stand in for accumulation.
input_mode="hidden" removes the pulses while preserving world choices and timing.
Go remains the response marker. A counting oracle operates on visible observations;
first-pulse, last-pulse and constant references test narrower solutions.
probe_accuracy is the complete-trial binary result, with left selected on ties.
Analytic chance is 0.5; warm-up is zero. Report performance across both stream length
and evidence fraction. Accuracy in a single easy cell does not establish a general
integration mechanism.
Continue with context integration for selection between two streams, or offline decoding.