Genetic improvement (computer science)


In computer software development, genetic Improvement is the use of optimisation and machine learning techniques,
particularly search based software engineering techniques such as genetic programming
to improve existing software.
The improved program need not behave identically to the original.
For example, automatic bug fixing improves program code by reducing or eliminating
buggy behaviour.
In other cases the improved software should behave identically to the old version
but is better because,
for example:
it runs faster,
it uses less memory,
it uses less energy
or
it runs on a different type of computer.
GI differs from,
for example,
formal program translation,
in that it primarily verifies the behaviour of
the new mutant version by running both the new and the old software on
test inputs
and comparing their output and performance
in order to see if the new software can still do what is wanted of the original program and
is now better.
Genetic improvement can be used to create multiple versions of programs,
each tailored to be better for a particular use
or for a particular computer.
Genetic improvement can be used with Multi-objective optimization
to consider improving software along multiple dimensions or
to consider trade-offs between several objectives,
such as asking GI to evolve programs which trade speed against
the quality of answers they give.
Of course it may be possible to find programs which are
both faster and give better answers.
Mostly Genetic Improvement makes typically small changes or edits to
the program's source code but sometimes the mutations are made to
assembly code,
byte code
or binary machine code.