Evolutionary Computation : A Unified Approach
Evolutionary Computation : A Unified Approach
Evolutionary Computation : A Unified Approach
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
5.5. EA-BASED AUTOMATED PROGRAMMING 109<br />
• ML-EAs can be used effectively for other kinds of ML problems, particularly “sequential<br />
decision problems” like navigation and game playing that involve a coordinated<br />
series of decisions extending over time (Smith, 1983; Grefenstette et al., 1990).<br />
• Most ML problems of interest involve significant amounts of computation time. Hence,<br />
ML approaches that lend themselves to parallel implementations are desirable.<br />
5.5 EA-Based Automated Programming<br />
The dream of automating the frequently tedious job of computer programming has been<br />
with us since the early days of computer science and artificial intelligence. It should come as<br />
no surprise that this was also on the minds of the early pioneers of evolutionary computation.<br />
As noted in chapter 2, in the early 1960s Fogel and his colleagues were motivated by the goal<br />
of producing intelligent artificial agents, not by hand-crafting them, but by evolving them.<br />
As a starting point they chose to use finite-state machines (FSMs) as their programming<br />
language and called their techniques for evolving FSMs “<strong>Evolutionary</strong> Programming” (Fogel<br />
et al., 1966).<br />
Similarly, we find in Holland’s early writing a description of his “broadcast language”,<br />
a parallel programming language designed to facilitate manipulation by GAs and modeled<br />
loosely on gene-level mechanisms of protein production (Holland, 1975).<br />
Since then there has been considerable interest in evolving programs expressed in a wide<br />
variety of languages, including rule-based systems (Smith, 1983; De Jong, 1987), artificial<br />
neural networks (Harp et al., 1989; de Garis, 1990), Lisp code (Fujiki and Dickinson, 1987;<br />
Koza, 1992), and even assembly language (Cramer, 1985; Ray, 1994). In each case the<br />
ability to do so effectively depends critically on two important issues: 1) how a PROG-<br />
EA represents and manipulates programs, and 2) how to assess the fitness of a candidate<br />
program. These issues are explored in more detail in the following sections.<br />
5.5.1 Representing Programs<br />
The simplest and most straightforward approach to representing programs is in terms of a<br />
fixed set of parameters. That is, we have a particular class of programs in mind that vary<br />
only with respect to their parameter settings, and we want to find the particular program<br />
instance whose execution behavior is optimal with respect to some objective criteria (such<br />
as execution speed, correctness of the output, etc.). The advantage to such an approach is<br />
that it immediately places us on the familiar terrain of parameter optimization, and we can<br />
use a variety of the techniques discussed earlier in this chapter to evolve programs.<br />
It is tempting at first glance to dismiss this approach as trivial and not at all representative<br />
of what is usually meant by automatic programming. But it is important to note that,<br />
although the kinds of structural changes that can be made is quite limited, even modest<br />
changes in parameters can result in significant behavioral changes during program execution.<br />
Samuel’s checker-playing program (Samuel, 1959) is a striking example of this. And,<br />
one can view the unified EA model developed in the previous chapter as a parameterized<br />
description of a class of algorithms that exhibit a wide range of behaviors.