| Program structure | Hierarchical expression tree | Flat instruction sequence | Directed labeled graph |
| Closure / validity | Automatic — any well-typed tree is a valid program | Automatic — any instruction sequence is executable | Automatic — any complete transition function is valid |
| Primary operator | Subtree crossover | Segment crossover (1-pt, 2-pt) | Mutation only — no crossover |
| Introns / neutral variation | Semantic introns via non-executed branches (requires control flow nodes) | Structural introns via overwritten registers — explicit, analyzable via backward dataflow | No direct analogue; neutral mutations via output-preserving state changes |
| Bloat tendency | High — subtree crossover biased toward larger trees | Moderate — tape grows via non-homologous crossover; introns buffer effective code | Controlled via explicit add/remove state operators |
| Reading the program | Human-readable as an expression or parse tree | Readable instruction-by-instruction; behavior requires execution to verify | Structure visible in graph; behavior only apparent by running on input sequences |
| Natural problem domain | Symbolic regression, classification, program synthesis | Symbolic regression, embedded / real-time systems | Sequence prediction, automata learning, control policies |
| Variable-length programs | Yes — tree depth unbounded; bloat control needed | Yes — tape length varies; length bias depends on crossover mode | Yes — number of states varies via add/remove operators |
| Type safety | Optional — untyped GP allows any subtree swap; typed GP enforces argument types | Not applicable — all registers hold the same type | Not applicable — transitions are symbol-indexed, not typed |
| Crossover analogue | Subtree swap between two parent trees | Segment swap between two parent tapes | None — EP is mutation-only by design |
| Key historical reference | Koza (1992) | Brameier & Banzhaf (2007) | Fogel, Owens & Walsh (1966) |