Friday, 25th September: 3.00pm

Innovation in Software Development as an Evolutionary Process: Comparison Between Software Engineers and Genetic Programming Agents

Randy Casstevens, Department of Computational Social Science

Genetic programming was developed with the goal of having computers automatically develop code without explicitly being told what to do. This resembles many tasks that software engineers face.  In the simplest case, a potential user tells the developer an incomplete list of inputs and expected outputs.  It is then the software developerâ??s job to convert these software requirements into a design and later into an implementation.  This presentation will explore whether patterns seen by software engineers can be recreated using an agent-based model.  This model consists of agents that are using genetic programming to automatically generate software solutions.

Data from software engineers competing in a Matlab programming contest will be compared with results gathered from the genetic programming agents.  The genetic programming agents will make random changes to the programs and the programs with the best performance are most likely to survive to the next generation.  Conversely the software engineers make purposeful, non-random changes to the code.  It is not
expected that the genetic programming agents will exhibit all of the same patterns seen by software engineers, but some of the patterns persist.  Therefore, these patterns may not be a result of higher cognitive functions of humans, but rather a more fundamental part of evolutionary problem solving.

Much of the power from genetic programming comes from its crossover operator where a section of code is replaced by another individual’s code.  In the Matlab contest, developers were also allowed to borrow and modify code from fellow programmers.  Furthermore, the code in the Matlab contest evolved over time with changes being contributed by many different programmers.  This presentation will compare the products of these two similar, but very different types of software development.