Often it is possible to rank multiple objectives based on some notion of importance. In these cases, it is possible to use dynamic fitness functions which initially guide GP towards solutions that maximise the main objective. When enough of the population has reached reasonable levels in that objective, the fitness function is modified so as to guide the population towards the optimisation of a second objective. In principle this process can be iterated for multiple objectives. Of course, care needs to be taken to ensure that the functionality reached with a set of previous fitness measures is not wiped by the search for the optima of a later fitness function. This can be avoided by making sure each new fitness function somehow includes all the previous ones. For example, the fitness based on the new objectives can be added to the pre-existing objectives with some appropriate scaling factors.
A similar effect can be achieved via static, but staged, fitness functions. These are staged in the sense that certain levels of fitness are only be made available to an individual once it has reached a minimum acceptable performance on all objectives at the previous level. If each level represents one of the objectives, individuals are then encouraged to evolve in directions that ensure that good performance is achieved and retained on all objectives.
Koza et al. ( 1999) used this strategy when using GP for the evolution of electronic circuits where many criteria, such as input-output performance, power consumption, size, etc., must all be taken into account to produce good circuits. Kalganova and Miller (1999) used Cartesian GP (see Section 7.2.3 ) to design combinational logic circuits. A circuit's fitness was given by a value between 0 and 100 representing the percentage of output bits that were correct. If the circuit was 100% functional, then a further component was added which represented the number of gates in the graph that were not involved in the circuit. Since all individuals had the same number of gates available in the Cartesian GP grid, this could be used to minimise the number of gates actually used to solve the problem at hand.