GISMO: Genetic Improvement of Software for Multiple Objectives |
Principal Investigator
Prof. Mark Harman,
CREST, UCL Named Research Fellow Dr. William B. Langdon, CREST, UCL Academic Collaborators Marc Schoenauer, INRIA, France Andrea Arcuri, Schlumberger, Norway Industrial Collaborators Motorola Labs, Basingstoke, UK. IBM nVidia EPSRC Grant Ref: EP/I033688/1 Summary pdf |
Major components of GISMOE approach. Left: system to be improved and its test suite. Right: genetic programming optimises modifications which originate from a grammar that describes the original system. |
The term component should be interpreted in its widest context. It refers to any piece of code that can be identified as a subpart of the overall program or system with well-defined interface to the encasing system. For example, we include functions, files, modules and procedures, for which interfaces are defined by parameters and shared global variables. We also include smaller segments of contiguous code that perform a coherent well-defined task or set of tasks, for which the interface is captured by the defined and referenced variables of the segment of code. What is important is that these pieces of code can be replaced by an evolved component that preserves their functionality and interface, while maximising achievement of challenging new multiple objectives.
Managing any one of these non-functional objectives is a challenge, but managing several at once is a daunting prospect, even for the most skilled and experience developer. The multiple objectives that have to be optimised are often conflicting. For instance, one can often trade speed of execution for compiled code size. Humans cannot be expected to optimally balance such competing constraints and may miss potentially valuable solutions.
Mutation | Source file | line | type | Original Code | New Code |
---|---|---|---|---|---|
replaced | bt2_io.cpp | 622 | for2 | i < offsLenSampled | i < this->_nPat |
replaced | sa_rescomb.cpp | 50 | for2 | i < satup_->offs.size() | 0 |
disabled | sa_rescomb.cpp | 69 | for2 | j < satup_->offs.size() | |
replaced | aligner_swsse_ee_u8.cpp | 707 | vh = _mm_max_epu8(vh, vf); | vmax = vlo; | |
deleted | aligner_swsse_ee_u8.cpp | 766 | pvFStore += 4; | ||
replaced | aligner_swsse_ee_u8.cpp | 772 | _mm_store_si128(pvHStore, vh); | vh = _mm_max_epu8(vh, vf); | |
deleted | aligner_swsse_ee_u8.cpp | 778 | ve = _mm_max_epu8(ve, vh); |