Figure 1-3 - uploaded by Michael Orlov
Content may be subject to copyright.
Call frames in the architecture of the Java Virtual Machine, during execution of the recursive factorial function code shown in Figure 1-1, with parameter n = 7. The top call frame is in a state preceding execution of invokevirtual. This instruction will pop a parameter and an object reference from the operand stack, invoke the method fact of class F, and open a new frame for the fact(4) call. When that frame closes, the returned value will be pushed onto the operand stack.

Call frames in the architecture of the Java Virtual Machine, during execution of the recursive factorial function code shown in Figure 1-1, with parameter n = 7. The top call frame is in a state preceding execution of invokevirtual. This instruction will pop a parameter and an object reference from the operand stack, invoke the method fact of class F, and open a new frame for the fact(4) call. When that frame closes, the returned value will be pushed onto the operand stack.

Source publication
Chapter
Full-text available
The established approach in genetic programming (GP) involves the definition of functions and terminals appropriate to the problem at hand, after which evolution of expressions using these definitions takes place. We have recently developed a system, dubbed FINCH (Fertile Darwinian Bytecode Harvester), to evolutionarily improve actual, extant softw...

Citations

... Once again, GP best practices were pivotal to the workshop, showing how GP could be adapted to solve highly complex problems (e.g., the first chapter describes best-practice operator design for evolving Java programs [7]). ...
... Another keynote focused on the newly emerging, important field of genetic improvement and automated software repair. A prediction made by Orlov and Sipper [7] back in GPTP VIII seemed to have progressed towards reality: "We 1 3 ...
Article
Full-text available
The GPTP workshop series, which began in 2003, has served over the years as a focal meeting for genetic programming (GP) researchers. As such, we think it provides an excellent source for studying the development of GP over the past fifteen years. We thus present herein a trajectory of the thematic developments in the field of GP.
... To move towards the grand challenge of automatic programming we need to move towards more general approaches to program synthesis. Arguably GP has the best track record to date with respect to this aspect of the problem, as exemplified by work such as [3,50,59,62,69]. ...
Article
Full-text available
Automatic programming, the automatic generation of a computer program given a high-level statement of the program’s desired behaviour, is a stated objective of the field of genetic programming. As the general solution to a computational problem is to write a computer program, and given that genetic programming can automatically generate a computer program, researchers in the field of genetic programming refer to its ability to automatically solve problems. Genetic programming has also been described as an “invention machine” that is capable of generating human-competitive solutions. We argue that the majority of success and focus of our field has not actually been as a result of automatic programming. We set out to challenge the genetic programming community to refocus our research towards the objective of automatic programming, and to do so in a manner that embraces a wider perspective encompassing the related fields of, for example, artificial intelligence, machine learning, analytics, optimisation and software engineering.
... Not merely possible but indeed prevalent." (Orlov and Sipper 2011a). "The relentless iteration of Moore's law promises increased availability of computational resources in future years. ...
Preprint
Full-text available
In this paper, we review the state-of-the-art results in evolutionary computation and observe that we don't evolve non-trivial source code from scratch and with no human intervention. A number of possible explanations are considered, but we conclude that computational complexity of the problem prevents it from being solved as currently attempted. A detailed analysis of necessary and available computational resources is provided to support our findings as well as analysis of neuroevolution as a method to generate software of the future.
Chapter
In this paper, we present the results of our research in quantum circuit program generation using genetic algorithm for the Open Quantum Assembly Language (OpenQASM). The generated circuit program from our genetic algorithm is formulated based on the set of quantum gates documented on the official IBM Quantum Experience OpenQASM site to make them 100% compatible with Qiskit 0.23.1 (December 2020), so this makes the generated programs to be usable for any future quantum hardware that follows the circuit model for universal quantum computation, which Qiskit is based upon. The genetic algorithm is programmed to interact directly with Qiskit Aer to perform fitness evaluation of the population so that the resultant programs are always error free and readily available to be deployed in various applications in the future.
Article
Full-text available
In this article, we review the state-of-the-art results in evolutionary computation and observe that we do not evolve nontrivial software from scratch and with no human intervention. A number of possible explanations are considered, but we conclude that computational complexity of the problem prevents it from being solved as currently attempted. A detailed analysis of necessary and available computational resources is provided to support our findings.
Thesis
Full-text available
This thesis presents FINCH (Fertile Darwinian Bytecode Harvester), a methodology for evolving Java bytecode, enabling the evolution of extant, unrestricted Java programs, or programs in other languages that compile to Java bytecode. The name of this thesis, “Darwinian Software Engineering”, reflects our optimistic view of how this methodology may affect integration of evolutionary computation into software engineering practices.
Conference Paper
Full-text available
This work addresses the automatic synthesis of in-place, iterative sorting algorithms of quadratic complexity. Four approaches (Strongly Typed Genetic Programming, Strongly Formed Genetic Programming, Grammar Guided Genetic Programming and Grammatical Evolution) are analyzed and compared considering their performance and scalability with relation to the size of the primitive set, and consequently, of the search space. Performance gains, provided by protecting composite data structure accesses and by another layer of knowledge into strong typing, are presented. Constraints on index assignments to grammar productions are shown to have a great performance impact.
Article
In this article, Moshe Sipper discusses a foreseeable future in which an entirely new paradigm of producing software will emerge. Sipper calls this software engineering revolution, "Darwinian Software Engineering"---a time when it will be possible to program computers by means of evolution.
Conference Paper
Full-text available
FINCH is a methodology for evolving Java bytecode, enabling the evolution of extant, unrestricted Java programs, or programs in other languages that compile to Java bytecode. The established approach in genetic programming (GP) involves the definition of functions and terminals appropriate to the problem at hand, after which evolution of expressions using these definitions takes place. FINCH evolutionarily improves actual, extant software, which was not intentionally written for the purpose of serving as a GP representation in particular, nor for evolution in general. In this work we show how several game heuristics that are taken as real-world Java programs are effortlessly and automatically improved by FINCH. We have developed a powerful tool [1,2,3] by which extant software, written in the Java programming language, or in a language that compiles to Java bytecode, can be evolved directly, without an intermediate genomic representation, and with no restrictions on the constructs used. We provide an overview of this system, some previous results, its usability, and the application of FINCH to evolving Java-written game heuristics.