EvoX stands for `Evolution in complex systems'. It is a simulation environment, designed for the investigation of emergent phenomena, but sufficiently general that it can be used for many purposes. For example I have used EvoX for studying the effects of a deforming topology on an evolving population, feedback interactions in a simple artificial economy of agents and comparative studies of optimisation algorithms on travelling salesman problems.
EvoX is based around a C++ class hierarchy implementing simulation and analysis objects, overlain with a Tcl/Tk object-oriented graphical user interface. As well as communicating with each other in the usual C++ fashion of public interfaces and member function calls, EvoX provides a secondary method in which objects explicitly declare observables and events they can provide and sockets which other events may call. This `EvoX-interface' (provided by, but only a part of the C++ interface) is manipulated by the EvoX environment.
An example will illustrate the basic technique:
I create a new empty simulation, which appears in the workspace presented by the EvoX graphical user interface. It also presents me with a palette of objects. I select an Optimiser, putting in in the empty simulation. Optimiser tells me it needs an algorithm and a problem. I drop onto it a Simulated Annealing algorithm (other choices were hill-climbing and threshold accepting), and a Travelling salesman problem. Optimiser tells me it's not yet ready to run. So I look inside it and find the TSP isn't ready. It needs a problem instance. I select the standard `pcb442.tsp' problem from the test suite I ftp'd.I could now run the simulation, but I'd like a graph of how well the algorithm is performing, so I create a Zero-Dimensional Graph inside the Optimiser. I drop the `Fitness' variable from the optimiser onto the graph, and give the graph the `analysis-event' from the optimiser. Leaving all other settings at their defaults, I select `run'. EvoX gives me a nice curve of the solution fitness improving over time, until after a million iterations it has levelled off and I select `pause'.
Because EvoX is controlled by Tcl scripts, it is itself trivially scriptable and recordable - so all of the above actions can be logged to a file automatically. As well as containing all the pertinent information about the run, including whether any parameters were adjusted by the user, were the user to wish to re-run the simulation, that file can be source'd and the entire simulation re-created! This is another great advantage of using Tcl as a scripting language for EvoX. For example, the script which was automatically archived for the above demonstration is as follows (lines beginning with a `#' are automatically generated comments):
(...need to fill this in ...)