Yellow Submarine challenge

(Please download new updated code)

This web page presents a dynamic optimization competition to be held at EVOStar 2009. You are given C source files (and mex interface for those who prefer matlab) containing a maximization problem that is time varying. You are then to apply your most sophisticated and efficient algorithm on the problem, producing trace of you optimizers performance.

Yellow Submarine Movie

General Rules
  • Your algorithm is allowed population size of 20 individuals and 10000 generations in which to solve the problem. It is not allowed to perform more simulations for producing a result trace.
  • You are allowed to look at what the c files contain. We can't stop you anyway.
  • We even promise to keep the landscape exactly the same when we verify your code.
  • Dynamics of the problem are to be considered variable and unknown when the algorithm starts. So don't rely on them! (Otherwise it will be a hard days night if you qualify as a finalist.)
  • We are pretty certain that there is a domain specific trick for doing this. You can use it.

Submission Rules

  • Deadline for submissions is 7.11.2008.
  • Submissions are to be sent to
  • Result of the submission will be given by 31.12.2009.
Submission should consist of
  1. Short (1-2 pages) introduction to your method
  2. Resulting trace-file produced by your algorithm: Each line (n) of the trace file is to contain elements of the best vector obtained in generation (n) separated by whitespace.
  3. Agreement that you will provide functional source code/help us to verify your results in case that your trace is among the best 5.

Competition details

Each submission is evaluated by measuring average fitness value during the trace. In case of two effectively comparable traces further criteria, such as minimal peaks is used. Further details are supplied in case this happens.
If there are more than 5 submissions then a set of 3 finalists is selected. Finalists are to submit their programs (with sources) for further testing with different dynamics
All finalists are invited to present during EVOStoc their algorithmic solution.
Winner will be awarded at the award ceremony during the last conference day.

Problem download and user instructions

Download the Fitness function. It will contain files signal.c, fitness.h, fitness.c and mfitness.c. First three files implement the fitness function and C interface to it. Last file is for matlab and octave users, providing a matlab interface. You are naturally allowed to use other languages that allow interfacing with c.

The module keeps track of generations by itself, so you must allow for statefulness in your code. Fitness function is evaluated by giving it 20 2d points in range [0,100]x[0,100] and observing resulting vector of 20 fitness values. See following sections and the source package for language specific examples.


Matlab interface consist of single function "mfitness" which takes as a parameter 20x2 matrix representing points evaluated in this generation or string 'reset' in case you wish to start a new simulation. Matlab interface can be generated with MEX as per following example:

Copyright 1984-2007 The MathWorks, Inc.
Version (R2007b)
August 9, 2007

To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit

>> mex mfitness.c fitness.c
>> fitnesses=mfitness([99 1;98 2;97 3;96 4;95 5]')
fitnesses =
(A vector of numbers)
>> fitnesses=mfitness([99 1;98 2;97 3;96 4;95 5]')

fitnesses =
(A different vector of numbers)

>> mfitness('reset')
fitness reset!
>> fitnesses=mfitness([99 1;98 2;97 3;96 4;95 5]')
fitnesses =
(Original set of numbers)


The public C api for the fitness consist of functions "void fitness(double *x,double *y,double *f)" and "void reset()". for "fitness" the first two arguments are first and second elements of vectors that you wish to evaluate, and f is array in which the fitness values will be stored. If you wish to start a new simulation, you can reset the time counter with call to "reset()". For example:

/* A example of evaluating points set of points starting with sequence (10,1), (20,2), (30,3).. */
void example()
double xs[] = {10,20,30,..}; /* '...' contains the rest of the points evaluated in this generation */
double ys[] = {1,2,3,..};
double result[] = {-1,-1,-1,..}; /* Fitness is always positive withing true bounds */
printf("%f, %f, %f", result[0], result[1], result[2]);

Competition Chairs
Ville Tirronen, Department of Mathematical Information Technology, University of Jyväskylä, Finland - aleator(at)
Ferrante Neri, Department of Mathematical Information Technology, University of Jyväskylä, Finland - nferran(at)

Publicity Chair
Ivanoe De Falco, ICAR, National Research Council of Italy, Italy - ivanoe.defalco(at)

Evo* Local Chair
Marc Ebner, Universität Tübingen,Germany - marc.ebner(at)

Evo* Coordinator and Administrative Contact
Jennifer Willies, The Centre for Informatics Research, Napier University, Scotland, UK. - j.willies(at)