The Evolutionary Computation module I took in my first term of this year was assessed through one piece of coursework worth 100% of the module.
In this coursework we had to design an evolutionary algorithm to produce tanks for a tank battle game called Robocode. The algorithms we designed were judged on their ability to produce tanks which were robust against a diverse range of other tanks — in other words their ability to solve a multi-objective problem evolutionarily.
Many forms of evolutionary algorithm could have been used to develop these tanks, however because all tanks in Robocode are compiled Java classes I decided to use a Grammatical Evolution algorithm. As well as the standard GE algorithm I also produced a coevolutionary algorithm which employed grammatical evolution.
I found the real skill in evolutionary computation was working out which parameters to use in such an algorithm (e.g. What population size, how often should mutation of a gene take place on average, which breeding method should be used, how many codons of genes should there be), and developing a BNF grammar that wouldn’t result in too much recursion and therefore invalid tanks once you ran out of genes to generate code which got you out of the recursion, but was still useful.
The coursework was marked based on the report we produced explaining our decision making processes, analysing our algorithms and using statistical methods to evaluate our algorithms and tanks. By the time I was finished I had written 15 pages and had a further 25 pages of appendices.
Overall I found the coursework quite enjoyable, and the best tank I produced was quite amusing to watch as it flailed around the screen constantly rotating its turret and shooting at any enemy it could find.
I’m happy to say that I found out last week that I achieved a grade of 80% for the coursework, and therefore for the module overall. This keeps me on track for the Distinction I so badly want in the degree overall.