• No results found

1Time is relative to a person’s frame of reference.

Las primitivas de la programaci´on gen´etica, funciones y terminales, no son programas sino m´as bien componentes de los mismos. Estas deben ser integradas a una estructura antes de que ´estos puedan ser ejecutados como programas. La selecci´on de la estructura de un programa en programaci´on gen´etica afecta el orden de ejecuci´on, uso de la memoria y la aplicaci´on de los operadores gen´eticos al programa. En est´a secci´on se explican las estructuras de ´arbol, lineales y grafos. Est´as estructuras son las principales utilizadas en GP.

en la programaci´on gen´etica, las tres principales estructuras utilizadas son: estructuras de ´arboles, lineales y grafos.

Figura 28: Estructura de un ´arbol.

Ejecuci´on de la estructura de un ´arbol

Para poder almacenar un programa es necesario elegir una forma de representarlo. La forma m´as comunmente usada (Brameier , 2004) es la representaci´on en forma de ´arbol. Est´a se encuentra inspirada por el lenguaje de programaci´on Lisp y que se emplea por John Koza en algunos trabajos pioneros del ´area (Koza , 1989; Koza , 1992). En esta representaci´on, un programa se almacena como un ´arbol en el que los nodos termi- nales representan valores o funciones sin argumentos, mientras que los nodos internos representan funciones que toman como argumento los valores de sus nodos hijos. De esta forma, la ejecuci´on se realiza en forma recursiva desde el nodo ra´ız, recibiendo cada nodo los valores producto de la ejecuci´on de los sub´arboles descendientes, pro- ces´andolos con la funci´on que corresponda y devolviendo el resultado a su nodo padre.

La Figura 28 muestra la estructura de un ´arbol. En esta figura se tienen diferentes s´ımbolos que pueden ser ejecutados en cualquier orden. Pero existen convenciones para

la ejecuci´on de estructuras de ´arboles. La ejecuci´on convencional de la estructura de un ´arbol consiste en evaluar repetidamente el nodo que est´a m´as a la izquierda para todas las entradas disponibles. Este orden de ejecuci´on es denominado. orden postfijo, llamado as´ı por que los operadores aparecen despu´es de los operandos. Otra ejecuci´on convencional es el llamado orden prefijo, y se le llama as´ı por que los operadores aparecen antes de los operandos. La forma m´a utilizada en GP es la prefijo que es la utilizada en LISP.

Aplicando el orden prefijo a la Figura 28, el orden de ejecuci´on de los nodos es el siguiente: - (or (d, e), * (a, + (b, c))).

Ejecuci´on de la estructura lineal

La gran mayor´ıa de las computadoras ejecutan programas estructurados linealmente, utilizando instrucciones especiales para implementar sentencias de control. Adem´a, aunado a la mejora en rendimiento lograda al utilizar instrucciones nativas, motiv´o el desarrollo de representaciones lineales en GP’s (Poli et al. , 2001).

Una estructura lineal es simplemente una cadena de instrucciones que se ejecutan de izquierda a derecha, o bien, de arriba hacia abajo dependiendo de c´omo se interprete dicha representac´ıon.

Un programa lineal empieza su ejecuc´ıon en la instrucci´on del tope o de la izquierda, seg´un est´e representado y as´ı contin´ua hacia abajo o hacia la derecha. Este tipo de representaciones permite ejecutar instrucciones de salto, por lo que los hace flexibles en su ejecuci´on. Al finalizar la ejecuci´on del programa representado en la Figura 29 produce el resultado almacenado en el registro a.

Figura 29: Estructura Lineal.

Ejecuci´on de la estructura de grafo

Siendo los ´arboles una clase particular de grafos, es natural evaluar el uso de repre- sentaciones mediante el uso de grafos m´as generales. Sin embargo estas aproximaciones no han alcanzado una difusi´on comparable a las dos anteriores. Los grafos son capaces de representar un programa muy complejo con estructuras compactas. La estructura de un grafo no es otra cosa que nodos conectados por aristas. Una arista es la conexi´on entre dos nodos, indicando la direcci´on del flujo del programa.

Las estructuras de ´arboles y programas lineales, son tambi´en grafos, s´olo que ´estos presentan restricciones particulares para la forma en c´omo se conectan los nodos a trav´es de las aristas. Una posible aplicaci´on (Poli et al. , 2001) es la reutilizaci´on de los resultados de ciertas funciones. De esta forma, un grafo ac´ıclico dirigido como en

la Figura 30 puede representar la reutilizaci´on de la subexpresi´on que se resalta. La utilizaci´on de un cache de expresiones previamente evaluadas disminuye la utilidad de estas aproximaciones, ya que disminuye los costos de evaluar repetidamente las mismas subexpresiones.

Figura 30: Grafo ac´ıclico dirigido.

III.3

Inicializaci´on de la Poblaci´on

El primer paso para llevar a cabo la ejecuci´on de un programa en programaci´on gen´etica es inicializar la poblaci´on. Esto significa crear una variedad de estructuras de progra- mas para una evoluci´on posterior. Por lo tanto, los ´arboles en programaci´on gen´etica, se definen por par´ametros expresados tales como la m´axima profundidad del ´arbol y el n´umero m´aximo total de nodos en un ´arbol.

ElPar´ametro de M´axima Profundidad (PMP) es la profundida m´as larga permitida entre el nodo ra´ız y los nodos terminales. En general, para los nodos de aridad 2, el tama˜no del ´arbol tendr´a un n´umero m´aximo de 2P M P nodos. En la representaci´on

lineal, el par´ametro es llamado longitud m´axima y se traduce en el n´umero m´aximo de instrucciones permitidas en un programa. Para los grafos, el n´umero m´aximo de un nodo es equivalente al tama˜no del programa.