IEEE CEC 2007 Car Racing Competition

Julian Togelius and Simon M. Lucas

In association with the Congress on Evolutionary Computation 2007. There is a prize of 500 USD to the best competitor, generously sponsored by IEEE CIS (subject to at least five entrants registering for the conference).

Getting started
League table
Submitting your controller

Last update: September 19, 2007

How to get started (it's easy!)

First of all, download the source code. Note that this code is not final - some changes and additions are likely within the next few weeks. Bug reports are welcome. Unpack, and go to the classes directory. To get a feel for how the code works, you can then try the following commands:

java simplerace.Play evolved.xml

Displays an evolved neural network controller going solo for the waypoints.

java simplerace.Play evolved.xml simplerace.HeuristicController

Pits the same evolved net against a simple hard-coded controller. Or try GreedyController for an even simpler controller.

java simplerace.Play evolved.xml simplerace.KeyboardControllerOne

Lets you race against the evolved controller. You are the blue car, and use the arrow keys for control. Can you beat the neural network? Can you design, or evolve, or learn, a controller that beats you?

java simplerace.Play simplerace.KeyboardControllerOne simplerace.KeyboardControllerTwo

Lets you race against a friend. Your friend, in the blue car, uses the a-s-w-d keys for control. Can you beat your friend? If not, can you create a piece of Java code that does it for you?

java simplerace.Stats evolved.xml<

Runs the evolved network controller on 100 tracks, silently, and displays mean fitness, standard deviation and other interesting statistics.

java simplerace.Stats evolved.xml simplerace.HeuristicController

Exactly what it looks like. Pits an evolved controller and a heuristic controller against each other 100 times, so you don't have to, and reports the results.

java simplerace.Evolve simplerace.MLPController

Evolves a new neural network controller from scratch.

java simplerace.CoEvolveOnePop simplerace.MLPController

Co-evolves a new neural network controller from scratch, with a single-population co-evolutionary algorithm.

java simplerace.Play simplerace.TCPControllerOne simplerace.TCPControllerTwo

Pits two remote controllers against each other. The Play class will wait for two clients to connect at TCP ports 6524 and 6525 before continuing. This remote control functionality is meant to facilitate the development of non-Java controllers, and is not necessary if you only work with Java. The specification of the network protocol is here. To connect some example clients, you can type the following into separate consoles:

java simplerace.Client simplerace.GreedyController


java simplerace.Client evolved.xml 2

After trying all this, your fingers are probably itching to get coding. Well then, do it! Take a look at how MLPController and HeuristicController are constructed, and write your own class, extending Controller and maybe also Evolvable. For those of you who use IntelliJ, project files are supplied, if you use another IDE the project structure should be simple enough.

One final thing before you get going, though: we would like to know approximately how many persons intend to participate, and also to have a list of mail addresses so we can notify competitors in the unlikely event of a change in rules or code. So please email Julian with your intention. Good luck!

Submitting your controller

The exact form for submitting controllers is not finalized yet. However, take a look at how it was done in the CIG Competition - the process will probably be similar.