File size: 3,235 Bytes
84c4635
 
099fb52
 
 
 
 
 
 
 
84c4635
099fb52
 
 
 
 
 
 
 
047d682
 
099fb52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
---
license: mit
tags:
  - evolutionary-robotics
  - neuroevolution
  - emergent-communication
  - multi-agent
  - robotics
  - pybullet
  - gru
---

# essim2d3d controllers

Evolved controller weights for the paper
[Evaluating the Transfer of Co-Evolved Communication from 2D to 3D Simulation](https://arxiv.org/abs/2610.09280)
(arXiv:2610.09280).

Code: [github.com/ferdiex/essim2d3d](https://github.com/ferdiex/essim2d3d) ·
Archive: [Zenodo](https://doi.org/10.5281/zenodo.21967056) ·
Demo: [xferdie/essim2d-demo](https://huggingface.co/spaces/xferdie/essim2d-demo)

## What these weights are

These are not models in the usual machine learning sense. Each file holds the
weights of two small recurrent controllers, one per robot (`brain_a` and
`brain_b`), co-evolved with a genetic algorithm in a two-robot cooperative
foraging task where one signalling channel can be used to communicate the
location of food.

Each controller is a GRU network with 16 units and a residual path that
connects the inputs directly to the outputs:

| Array | Shape | Role |
|---|---|---|
| `w_gru` | 27 x 48 | GRU weights (11 inputs + 16 recurrent units, 3 gates x 16) |
| `b_gru` | 48 | GRU biases |
| `w_out` | 16 x 5 | GRU state to outputs |
| `b_out` | 5 | Output biases |
| `w_res` | 11 x 5 | Residual path, inputs to outputs |

That is 1,484 parameters per robot. The weights are plain JSON lists (no
PyTorch or other framework) and only make sense together with the simulators,
sensor encoding and instinct layer in the GitHub repository. They run on CPU;
no GPU is needed.

## Files

| File | Description |
|---|---|
| `social3d_v15_full_final.json` | **Official checkpoint** used for the results reported in the paper (3D, PyBullet) |
| `social2d_emergence.json` | Controllers co-evolved in the 2D grid simulator |
| `social2d_*_final.json`, `social3d_*_final.json` | Further independently evolved 2D and 3D checkpoints (see the paper's Methods) |
| `social3d_v10_*`, `social3d_v14_*` | Earlier 3D development checkpoints |
| `braitenberg_avoidance.json` | Hand-set Braitenberg obstacle-avoidance baseline (not evolved) |

## How to use

Installation, training, visualization and the commands to reproduce the
paper's results are documented in the
[GitHub README](https://github.com/ferdiex/essim2d3d#readme). The same
checkpoints live in its
[`models/`](https://github.com/ferdiex/essim2d3d/tree/main/models) folder;
this repository mirrors them for discoverability on the Hub.

To fetch a checkpoint from here instead:

```python
from huggingface_hub import hf_hub_download

path = hf_hub_download(
    repo_id="xferdie/essim2d3d-controllers",
    filename="social3d_v15_full_final.json",
)
```

and pass `path` to the repository's viewers (`essim3d.py --controller` for 3D,
`essim2d.py --model` for 2D).

## Citation

```bibtex
@misc{montesgonzalez2026transfer2d3d,
  author        = {Montes-Gonzalez, Fernando},
  title         = {Evaluating the Transfer of Co-Evolved Communication
                   from 2D to 3D Simulation},
  year          = {2026},
  eprint        = {2610.09280},
  archivePrefix = {arXiv},
  primaryClass  = {cs.RO},
  doi           = {10.48550/arXiv.2610.09280}
}
```

## License

MIT, as the code repository.