BNB_c*BVB_d+BVB_d->C
BNX_b*UNB__+UNB_e->D
BVU__*XNB__+UNU_c->E
BNUac+BNBdc+BNU__->F
BNB_d+BNX_e+QZQ_c->G
BNUbd*XNB__+BVU_a->H
AND as Cognition
Maybe change this to policy. An AND program encodes a simple model of behaviour: responding to a sequence of stimuli by generating a sequence of responses. The stimuli and responses are just abstract symbols A to Z. But we imagine that they correspond to real-world sensory inputs and motor outputs. In the case of gene regulation, these symbols correspond to the presence or absence of particular molecular signals that initiate or inhibit gene expression, and to the regulatory and structural proteins produced as a result.
We can bring these abstract symbols to life by wiring them to a simple agent, and embedding the agent in an environment. The stimuli are generated by the agent’s sensors as it moves about the environment, and the responses will control the agent’s actions.
Single-celled organism, and embedding it in an environment.
We can think of this cell as a minimal cognitive agent, executing an AND program that governs its sensorimotor behaviour. We will evolve our AND program so the cell can achieve a task in its environment. Importantly, the sensorimotor architecture remains fixed; only the cognitive wiring, controlled by the AND program, is subject to evolution.
The aim in this section to show that this simple architecture, inspired by gene regulation, can be evolved to respond adaptively to a changing environment. Our AND program effectively encodes the cognition of the cell.
Grids and Cells
The environment will be a simple 2d grid of patches1, like a chess-board. Some patches on the grid will be empty, others will be walls that our agent cannot pass through. We place a single cell in this grid, and it and moves by stretching its body forward and then contracting, analogous to pseudopodial locomotion in amoeba.

Binding a Program to the Sensory-Motor System
Sensory Input: To begin, our agent will have just one sensory input: Stretched. This is proprioceptive input indicating whether it is currently stretched (over two-patches) or contracted. We will add further sensors later.
We can put this together in a simple AND program that does basic navigation. We can now produce a regulatory diagram with these labels.
| 0 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 1 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 2 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 3 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 4 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | Stretched | ||||||||||||||||||||||||||||||||||||||||||||||||||
| B | Blip(0) | ||||||||||||||||||||||||||||||||||||||||||||||||||
| C | |||||||||||||||||||||||||||||||||||||||||||||||||||
| D | |||||||||||||||||||||||||||||||||||||||||||||||||||
| E | |||||||||||||||||||||||||||||||||||||||||||||||||||
| F | LeftPull | ||||||||||||||||||||||||||||||||||||||||||||||||||
| G | RightPull | ||||||||||||||||||||||||||||||||||||||||||||||||||
| H | Stretch |
Footnotes
I use the word “patch” to avoid confusion with the “cells” that make up the agent itself.↩︎