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.{{cite book | doi = 10.1007/978-3-319-20883-1_8 |author=Langdon, William B. |title=Handbook of Genetic Programming Applications | chapter=Genetically Improved Software | pages=181–220|year=2015 |isbn=978-3-319-20882-4 }}
The improved program need not behave identically to the original. For example, automatic bug fixing improves program code by reducing or eliminating buggy behaviour.{{cite journal | doi = 10.1145/1735223.1735249 |author=Weimer, Westley|display-authors=etal | volume=53 |issue=5| title=Automatic program repair with evolutionary computation | journal=Communications of the ACM | pages=109–116|year=2010|citeseerx=10.1.1.170.188|s2cid=7408151 }}
In other cases the improved software should behave identically to the old version but is better because,
for example:
it uses less memory,{{cite book | doi = 10.1145/2739480.2754648 | pages=1375–1382 | year=2015 | last1=Wu | first1=Fan | last2=Weimer | first2=Westley | last3=Harman | first3=Mark | last4=Jia | first4=Yue | last5=Krinke | first5=Jens | title=Proceedings of the 2015 Annual Conference on Genetic and Evolutionary Computation | chapter=Deep Parameter Optimisation | isbn=9781450334723 | s2cid=17820784 }}
it uses less energy{{cite book | doi = 10.1145/2739480.2754752 | pages=1327–1334 | year=2015 | last1=Bruce | first1=Bobby R. | last2=Petke | first2=Justyna | last3=Harman | first3=Mark | title=Proceedings of the 2015 Annual Conference on Genetic and Evolutionary Computation | chapter=Reducing Energy Consumption Using Genetic Improvement | isbn=9781450334723 | s2cid=207224618 }}
or
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 (also known as mutations) to the program's source code but sometimes the mutations are made to assembly code, byte code{{cite journal | doi = 10.1109/TEVC.2010.2052622 | volume=15 | issue=2 | title=Flight of the FINCH Through the Java Wilderness | journal=IEEE Transactions on Evolutionary Computation | pages=166–182| year=2011 | last1=Orlov | first1=Michael | last2=Sipper | first2=Moshe | citeseerx=10.1.1.298.6272 | s2cid=14616802 }}
or binary machine code.{{cite book | doi = 10.1145/2739482.2768427 | pages=847–854 | year=2015 | last1=Schulte | first1=Eric M. | last2=Weimer | first2=Westley | last3=Forrest | first3=Stephanie | title=Proceedings of the Companion Publication of the 2015 Annual Conference on Genetic and Evolutionary Computation | chapter=Repairing COTS Router Firmware without Access to Source Code or Test Suites | isbn=9781450334884 | s2cid=14772346 }}
References
External links
- Open PhD tutorial http://phdopen.mimuw.edu.pl/index.php?page=z15w1 (also covers SBSE and CIT but last of three topics is Genetic Improvement of software).
- International Workshops on Genetic Improvement: http://www.geneticimprovementofsoftware.com web pages include GI community pages http://geneticimprovementofsoftware.com/learn/about
Tools
- GIN https://github.com/gintool/gin
- Magpie https://github.com/bloa/magpie
- PyGGI https://github.com/coinse/pyggi
{{Evolutionary computation}}