MushroomBody_Othello v1
Synaptic weights for the Othello game of BeatTheFly -- A Smart Fruit Fly is playing Othello against you: a spiking network wired as the real Drosophila mushroom-body connectome that plays Othello.
The anatomical connectome gives you wiring, not synaptic strengths. Ours are trained.
Synaptic weights trained with PHCSSM parallel-scan mode, deployment in sequential RSNN mode (PHCSSM).
made by Po-Han Chiang @ NYCU
Architecture
- Wiring: MaleCNS v1.0 mushroom body -- 4,510 neurons (4,064 Kenyon cells, 97 MBONs, 340 DANs, 2 APL, 2 DPM, 5 MB-C1) and 1,027,152 neuron-to-neuron connections. The connectivity mask is fixed to the connectome; 763,700 connections carry a nonzero weight and 0 weights lie off the connectome.
- Dale's law: one sign per presynaptic neuron from neurotransmitter annotations (excitatory 4,114, inhibitory 52, modulatory 344); 0 weights violate it.
- Inputs: each ply provides the move token (one of 68 tokens: the 64 squares, pass, and start, end and padding markers) and the board after it (138 binary features: the discs of the side to move, the opponent's discs, which side is to move, and a disc-count bucket). Two linear encoders with their own LayerNorm drive the Kenyon cells; the move token also drives the dopaminergic neurons.
- Rules: a pass is a move only when the side to move has no legal square; the network takes one timestep per move, forced passes included.
- Neurons: leaky integrate-and-fire with per-neuron leak, threshold and reset; synaptic delay of one step.
- Fast weight: dopamine-gated associative memory on the Kenyon-cell -> MBON synapses, read back into the MBON voltages.
- Readout: linear map from the membrane voltage of all neurons to the move vocabulary.
- Deployment: sequential RSNN mode, one timestep per ply, with the neuron state and fast weight carried across the whole game.
Data sources
Data source: Egaroucid Free Training Data (Takuto Yamana).
Evaluation
Agreement with the engine's move on 10,570 held-out Egaroucid games (legal moves only): 50.1% overall (moves 1โ15 43.4%, 16โ30 38.6%, 31โ45 39.6%, 46+ 61.2%).
Strength: Beats simple greedy and corner-heuristic bots about 80โ86% of the time; scores about one third against the Edax engine at level 1 (32โ1โ67 in 100 games). Matches: 100 games per opponent, colours swapped; the fly uses no search, one network timestep per move.
Files
manifest.json-- every tensor (file, dtype, shape, bytes), the model scalars, the token map (scalars.tokens: pad 0, start 1, end 2, pass 3, squarea1= 4 ...h8= 67, row-major froma1) and a connectome audit.info.json-- neuron metadata used by the page (cell classes, hemispheres, soma coordinates).selfcheck_<precision>.json-- reference moves and logits that the page replays when it loads.fp16/,fp32/-- raw little-endian arrays.
Two precisions are listed in the manifest: fp16w32 (default, 7.6 MB: float16 for the
four large dense matrices, float32 for the recurrent weights and all small tensors) and
fp16 (6.1 MB, recurrent weights in float16 as well).
The recurrent weight matrix W[dst, src] is stored in CSC order by source neuron (W_colptr,
W_rowidx, W_vals): each step multiplies W by a sparse binary spike vector, so the engine visits only
the columns of the neurons that spiked. Dense matrices are stored in the orientation they are read:
enc_tok_T [vocab, H] (a move token selects one row), enc_brd_T [138, H] (sum of the active rows),
dec_w [vocab, H] and v2d_T [vocab, n_dan].
| name | file | dtype | shape |
|---|---|---|---|
enc_tok_T |
fp16/enc_tok_T.bin |
float16 | 68x4510 |
enc_tok_b |
fp32/enc_tok_b.bin |
float32 | 4510 |
ln_tok_w |
fp32/ln_tok_w.bin |
float32 | 4510 |
ln_tok_b |
fp32/ln_tok_b.bin |
float32 | 4510 |
enc_brd_T |
fp16/enc_brd_T.bin |
float16 | 138x4510 |
enc_brd_b |
fp32/enc_brd_b.bin |
float32 | 4510 |
ln_brd_w |
fp32/ln_brd_w.bin |
float32 | 4510 |
ln_brd_b |
fp32/ln_brd_b.bin |
float32 | 4510 |
v2d_T |
fp16/v2d_T.bin |
float16 | 68x340 |
v2d_b |
fp32/v2d_b.bin |
float32 | 340 |
dec_w |
fp16/dec_w.bin |
float16 | 68x4510 |
dec_b |
fp32/dec_b.bin |
float32 | 68 |
Wg |
fp32/Wg.bin |
float32 | 97x340 |
W_dan_val |
fp32/W_dan_val.bin |
float32 | 97x340 |
alpha_exc |
fp32/alpha_exc.bin |
float32 | 4510 |
alpha_inh |
fp32/alpha_inh.bin |
float32 | 4510 |
v_th |
fp32/v_th.bin |
float32 | 4510 |
reset_weight |
fp32/reset_weight.bin |
float32 | 4510 |
kc_idx |
fp32/kc_idx.bin |
int32 | 4064 |
mbon_idx |
fp32/mbon_idx.bin |
int32 | 97 |
dan_idx |
fp32/dan_idx.bin |
int32 | 340 |
W_colptr |
fp32/W_colptr.bin |
uint32 | 4511 |
W_rowidx |
fp32/W_rowidx.bin |
uint16 | 763700 |
W_vals |
fp32/W_vals.bin |
float32 | 763700 |
Numerical check: legal top-1 1948/1949 vs the fp32 reference (32 fly-vs-fly reference games); 0 of 8,934,310 spike bits differ from the reference on the same weights.
Limitations
There is no search and no evaluation function: each move is a single timestep of the network, restricted to the legal squares.
License and attribution
Weights: CC-BY-NC-4.0. They are derived from the MaleCNS v1.0 connectome (Janelia FlyEM and collaborators, https://male-cns.janelia.org/, CC-BY-4.0) and trained with PHCSSM (https://arxiv.org/abs/2604.01295); please credit both. Training data: Egaroucid Free Training Data by Takuto Yamana (https://www.egaroucid.nyanyan.dev/en/technology/train-data/).
Citation
PHCSSM: https://arxiv.org/abs/2604.01295