The scenario is as follows. There is a PC running a complex piece of AI software wirelessly controlling a number of soccer robots. This software is written and maintained by a team of students that changes every year.
This means that every year a new team of a dozen relatively inexperienced developers has to learn to work with this system, maintain it, and improve it. This means it needs to be easy to learn, but also hard to get wrong. As an example, C++ is easy to learn, but easy to get wrong, while Haskell would be hard to learn, but hard to get wrong.
In my mind, contenders for suitable languages would be things such as Java, Python and Go. Where Java and Python are hard to shoot yourself in the foot, but provide little guidance in terms of design. Although I've never used Go myself, it seems to be designed with large teams of inexperienced programmers in mind, strongly encouraging a particular model of abstraction en concurrency.
For the software itself it is important that sub-teams can work on parts relatively independently, that it is fast enough to control a dozen robots in real time in a fast-paced game, and that the system is easy to debug and maintain.
There is a hierarchy of high-level strategy, per-robot actions, and low-level control. It seems natural to decouple these in separate threads, but this gives challenges in having a reproducible, observable, debuggable system.
Ideally you'd want to be able to instantiate the system at a given point in history and replay it from there, single-stepping through all decisions made by the AI. It is not entirely clear to me how to do this.
If all nodes were completely stateless and deterministic it may be sufficient to replay the sensor data. CSP may be a reasonable way to have deterministic processes. In case of stateful nodes, some sort of transactional state model seems to be needed. I think Datomic is really interesting in this area, but ultimately I'm not sure how to approach this.
So maybe the hardest and most objective question is: How to architecture a hierarchical AI and control system in a deterministic, replayable and debuggable way that is hard to get wrong?