Dear Jacob,
my suggestions are similar to the ones you got from RoboCode google group.
I think you have mainly two options:
- you can setup an evaluation process that relies on compiling your candidates (accordingly, your phenotype will be a generated source code wich embeds all the evolved parameters/code)
- you can develop a meta-robot, i.e., a robot that will decode run-time the genotype you need to evaluate. In order to pass this genotype, you can either use a file or a static variable in the memory (of course you need to re-write the file / change the value of the variable before every evaluation of the fitness)
I also asked to Moshe Sipper that previously worked on this, and the following is the feedback from a researcher of his group:
If I recall correctly, we've held total separation between the evolutionary system (ECJ) and the Robocode engine(s).
For each generation, the evolutionary system created .java files per individual, then compiled them to java classes, then executed the Robocode game engine per match. This design has probably led to slightly worse performance compared to invoking Robocode from within the evolutionary system, but spared us from dealing with class loaders - as each match was created from scratch in a dedicated Java VM.
A nice benefit from this design is the ability to simultaneously run Robocode processes on multiple machines: we had 10-20 machines (idle Linux computers at the CS labs) ready to execute single matches per request, and a single machine (think it was one of our own PCs, but can't recall for sure) acted as the main evolutionary server - making asynchronous calls to the satellites for fitness evaluation.
I hope it helps,
Daniele