next up previous
Next: EO in practice Up: Evolving Objects Previous: Introduction


Evolvable objects

One of the most famous Evolutionary Computation books is called Genetic Algorithms + data structures = Evolution Programs [2]. The approach implied by this title predates EO, in the sense that it proposes to free EC from representation, using bit strings or floating point vectors as the researcher sees fit, but at the same time, it shows the main paradigm of procedural programming applied to EC: algorithms are applied to data structures, which are distinct and separate, and all together form evolution programs.

However, procedural programming is not the only language paradigm today: many languages, and most of the mainstream languages, are object oriented. Object oriented (evolutionary) computation could be expressed this way: Algorithms along with Data structures = evolution objects. In object-oriented computation, algorithms and the data structures which they are applied to are encapsulated within an object, and the interaction with it is regulated through an interface, which is designed by the programmer. An object knows its own inner workings, but anybody using that object (the client of that object) can only use it through its interface. What features should, then, provide the interface of an object in order to make it evolvable?. At least, it should be replicable, mutable, combinable and comparable. These properties will be examined in turn:

What are, then, the main differences among EO and all the other EC paradigms?, and, the million-dollar question, is it really new?. We could enumerate some differences:

EO emphasizes modularity in programming an evolutionary or evolving application. Since operators and the rest of the entities are objects, it is easy to combine different operators and objects coming from different sources to build an application. In practice, it does not matter what the object to be evolved has inside, but what it looks like, that is, the interface it presents to its clients. If it can be compared, there are genetic operators that can be applied to it, be them unary or binary, it does not matter how those operations are carried out inside, and it can be evolved using the EO framework. This focus on interfaces would also make possible to write an object in C++, and evolve it using Java (which are two object-oriented languages), or the other way round. In practice, the EO engine could be written in any language, and it could be used on objects written in any other language. So far, the only EO engine is written in C++, and through an ActiveX control that uses EO, it can be used from any language or application that can work as ActiveX container. ActiveX controls are part of the COM framework [9], which allows objects in Microsoft Windows9x/NT use all the other objects in the operating system and applications.

To cast evolutionary computation in an object-oriented framework like EO allows to integrate it into current object frameworks, such as the Object Management Group's CORBA [10] (Common Object Request Broker architecture) or Microsoft's COM (Common Object Model)[9].


next up previous
Next: EO in practice Up: Evolving Objects Previous: Introduction
Juan Julian Merelo Guervos
1999-05-31