Download Capítulo 1 DISEÑO MODELO SECUENCIAL
Document related concepts
Transcript
Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Capítulo 1 Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno DISEÑO MODELO SECUENCIAL En este documento formalizaremos la propuesta de un modelo de diseño paraa las familias de algoritmos evolutivos implementadas en EPOL. Se espera conseguir con este diseño un sistema de búsqueda flexible y eficiente que sea lo suficientemente genérico como para poder derivar de él distintos algoritmos o familias de algoritmos. 1.1 Implementación El objeto de esta sección es resaltar la familia de algoritmos evolutivos desarrollados, abordando las principales decisiones de implementación que influyen y caracterizan a los algoritmos secuenciales implementados: algoritmos genéticos y estrategias evolutivas. Se omite en este capítulo la referencia a los métodos de clase del modelo presentado. 1.1.1 Diseño de Clases Hasta hace relativamente poco tiempo, la calidad del software usado en el campo de la computación evolutiva era mala, debido fundamentalmente a la falta de flexibilidad de los modelos propuestos, y a la particularización de su uso por sus mismos desarrolladores o investigadores. Con el modelo propuesto se pretende abordar desde un punto de vista más general y flexible el uso de esta biblioteca evolutiva. Para empezar, es importante arrancar con una fase de diseño, comparando los modelos existentes, con la implementación propia. Para el diseño de nuestro modelo Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno optamos por una estructura predeterminada según el modelo de la familia xxGA1, adaptando al dominio de nuestro problema las clases y relaciones. El porqué de su elección responde a varios factores determinantes: Se trata de un modelo ya implementado del cual se dispone de una versión operativa. Ha sido comparado con otros modelo como GAME, d-GAME, GP_TEXT y incGA resultando ser el más conveniente. El modelo secuencial implementado puede verse en la siguiente Figura: Operator_ES {Only Individual_ES allowed} Bool Operator_Pool Random Population Individual_ES EA Ouput_File 2 Bipop Individual 1+ FFN represents 1+ Pattern BPN 1+ Gene alleles Bit Real Figura 1.1.1 Diseño de clases para nuestro modelo secuencial 1 Consúltese los trabajos realizados por este departamento y en especial el capítulo 3 de la Tesis de D. Enrique Alba. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno La clase principal EA implementa el tipo Algoritmo Evolutivo (AE), ya se trate de un Algoritmo Genético o de una Estrategia Evolutiva. A parte, se distingue también la clase Bipop, cuya característica principal es que agrega dos algoritmos evolutivos. Estos, se ejecutan en paralelo. Se permite además ejecutar AEs con dos poblaciones y también realizar combinaciones de estos algoritmos y técnicas híbridas en la misma clase, lo que da, sin lugar a dudas, un conjunto de posibilidades muy elevadas de explotar este diseño. Otras clases relevantes son las referidas al pool de operadores, que en este caso se ha disociado en una clase padre Operator_Pool y otra hija Operator_ES, especializadas con el objetivo de distinguir entre el pool de operadores para algoritmos genéticos y estrategias evolutivas respectivamente. La razón fundamental de esta decisión se basa en: conseguir una independencia entre ambos tipos de algoritmos con el fin de realizar futuras mejoras y nuevas ampliaciones por separado, y la otra razón se centra en diferenciar los límites derivados del hecho de ser algoritmos distintos, por tanto, con capacidades distintas de hibridación, etc. Se permite añadir en tiempo de ejecución nuevos operadores al pool, también se permite hibridar los operadores aplicables. Los individuos que maneja la población son representados por las clases Individual e Individual_ES. La primera se encarga de representar a los individuos de los algoritmos genéticos, mientras que la segunda hace lo mismo con los individuos de la estrategia evolutiva. El mantenimiento de la población así como de la gestión de los mismos reside en la clase Population. El modelo de población implementado es de estado estacionario, siendo posible en cualquier momento readaptarla incluyendo un nuevo bucle en el ciclo reproductivo para que se convierta en un modelo generacional o incluso celular, no Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno obstante, esto podría ser contraproducente en el caso de las estrategias evolutivas, y de ahí que haya separado en dos pool de operadores -tercera razón-. Los individuos pueden representarse en binario, Gray y codificación flotante, la clase Bit incluye los métodos necesarios para realizar una decodificación entre los tipos binario y Gray. Por último, se ha añadido al modelo una clase que gestiona la salida a fichero de los resultados que deparen los algoritmos implementados, se trata de la clase Ouput_File. 1.2 Métodos de las Clases En esta sección abordamos el trato de los métodos implementados y haremos una breve descripción del cometido de cada método. Tanto los constructores simples como los de copia se han obviado por motivos de simplicidad, no obstante el comentario del código los describe con todo lujo de detalles. 1.2.1 Clase Random Define la interfaz con el generador de números aleatorios, los métodos en ella definidos son: Rand0ToUp1: genera un número aleatorio en el intervalo abierto [0,1). Rand0To1: genera un número aleatorio en el intervalo cerrado [0,1]. Normal_Random_Number: genera un número aleatorio que sigue una distribución normal N(0,1). Set_Seed: fija el valor de la semilla. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Get_Seed: recupera el valor de la semilla si ha sido fijado con anterioridad. 1.2.2 Clase Ouput_File Define la interfaz de salida a fichero, permitiendo a los algoritmos imprimir los resultados estadísticos o bien los obtenidos al final de su ejecución. Sus métodos son: Set_Print_Header: indica a la clase que imprima una cabecera del fichero, en esta cabecera irán datos sobre la fecha, hora y nombre del fichero. Asign_Filename: asigna una corriente de salida a la clase (un fichero). Open_File: controla que la apertura del fichero sea correcta. Close_File: igual pero para el cierre. Write_Stat_Line: escribe en el fichero una fila con los datos siguientes: mejor valor, valor medio, peor valor y número de generación. Este método se usa cuando se desea llevar un seguimiento exhaustivo de los resultados de cada generación. Write_Result: escribe en el fichero una fila con los resultados finales del mejor valor, valor medio, peor valor, tanto para las fases de entrenamiento como de generalización, además imprime, el tiempo de ejecución de cada algoritmo, así como los valores de los individuos construidos a partir de la recombinación de la información de toda la población, en concreto, la media, la ponderación basada en su adecuación y la basada en el orden. 1.2.3 Clase Bit La clase Bit representa biunivocamente las clases binaria y Gray para la representación de las cadenas o individuos. Los métodos que implementa son básicamente los constructores, a parte, podemos destacar la redefinición de operadores como el igual, el Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno stream de salida y entrada. El tratamiento de las conversiones de Gray a real, binario a real, ...etc, es tratado en la clase Population, de la que hablaremos próximamente. En esta clase el único método ajeno a los constructores o a la redefinición de operadores en el siguiente: Name: Devuelve el tipo base de la codificación del individuio, por ejemplo si la codificación utilizada es Gray devuelve la constante predefinida GRAY. Idem para la codificación binaria. 1.2.4 Clase Real La codificación en flotante de las cadenas que representan a los individuos se deben al uso de esta clase. El único método manejable explícitamente por el usuario es la función Name, que al igual que en el caso de la clase Bit devuelve el tipo base de la codificación del individuo. 1.2.5 Clase Gene La clase Gene plasma la codificación del individuo en forma de genes. Estos genes están formados a su vez de alelos, que pueden tener una representación binaria, Gray o flotante. Los métodos que destacan en esta clase son (omitimos cualquier operador, incluido en de indexación [], que permite acceder a un alelo particular): Name: devuelve el tipo base sobre el que está construido el gen. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Get_Allele_Number: Devuelve el número total de alelos, para distinguirlo del número de alelos por gen, será necesario dividir el resultado de la llamada a este método por el número de genes. Gene_To_Real: convierte un gen de cualquier tipo -incluido el real, aunque es innecesario- a un número real que se encuentra en el rango [min,max], que son dos parámetros flotantes del método. Real_To_Gene: realiza la conversión recíproca, es decir, pasa de un número codificado en real a un gen del tipo base que se trate, estando el resultado acotado en un intervalo definido de nuevo por dos parámetros del método. 1.2.6 Clase Individual Codifica la estructura del individuo genético -usado para AGs-, un individuo estará formado por una cadena de genes, y estos a su vez por cadenas de alelos. Además el individuo durante su evolución tiene asociado un valor de adecuación o fitness, que en nuestro caso puede representar el fitness, el error cuadrático medio (mse) o el rmse -raíz cuadrada del anterior-. Otro aspecto importante del individuo se centra en la conversión de tipos de gen, es decir, la conversión de genes binario y Gray a real y viceversa, para ello se define unos parámetros de escalado que definen el intervalo de acotación de la codificación o decodificación llevada a cabo. Los métodos de esta clase son (sin contar constructores y redefinición de operadores): Name: devuelve el tipo base del gen. Get_Gene_Number: devuelve el número de genes del individuo. Get_Allele_Number: devuelve el total de alelos del individuo -no la relación de alelos por gen-. Get_Fitness: Devuelve el fitness del individuo. Set_Fitness: fija el fitness. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Get_Raw_Fitness: Devuelve el fitness real. Set_Raw_Fitness: fija el fitness real. Decode: pasamos de una representación genotípica -binaria, Gray o flotante- a una fenotípica2 -flotante-. Encode: pasamos de la representación fenotípica a la genotípica. Set_Range: fija el rango utilizado en la conversión/escalado. Set_Min_Range: Fija el extremo inferior del intervalo acotado de escalado/conversión. Set_Max_Range: idem para el extremo superior. Get_Min_Range: consultamos el extremo inferior. Get_Max_Range: idem del extremo superior. Individual_Type: se trata de un método virtual, que devuelve el tipo de individuo que estamos utilizando, AG o estrategia evolutiva. De esta forma podemos saber en que algoritmos aplicar el individuo. Reset: reinicializa los parámetros del individuo. 1.2.7 Clase Individual_ES Se trata de una clase hija, que hereda de la clase Individual. Define las mismas interfaces que su padre, pero sólo es aplicable a los individuos que representan a la estrategia evolutiva. El método más importante (se ha omitido constructores y operadores) es: Init_ES_Var: inicializa los parámetros de control de la estrategia evolutiva, para concretar: la matriz de covarianzas, la matriz de ángulos y el vector de desviaciones. 2 Se trata de una representación dependiente del dominio del problema. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno 1.2.8 Clase Pattern Define la estructura de los patrones de entrada salida. Dispone del siguiente método: Alloc_Men: reserva memoria para los patrones de entrada salida. 1.2.9 Clase FFN Contiene métodos que sirven de interfaz para definir múltiples tipos de redes neuronales, hasta el momento redes de retropropagación (BPN). Entre los métodos disponibles: Métodos encargados del manejo de la función de activación Sigmoid_Function: aplica la función de transferencia sigmoidal. Binary_Function: idem con una función binaria. Linear_Function: con una función lineal. Hyperbolic_Function: con una función hiperbólica. Método de inicialización Init_Network: inicializa pesos y bias aleatoriamente. Allocate_Memory_Net: Reserva memoria para contener la estructura de una red neuronal. Método de conversión Map_Weights_In_Net: convierte una estructura fenotípica (vector de flotantes) a la estructura de red. Para ello se sigue la codificación de entrada de los pesos de la red. Métodos de entrada/salida Get_Configuration_File: Lee los parámetros de la red desde un fichero. Get_Genes_From_Problem: Carga desde un fichero los genes. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Load_Weights_From_File: Carga los pesos de una red neuronal desde un archivo. Save_ Weights_From_File: Vuelca los pesos de una red a un fichero. Load_Input_Ouput_Pattern: Permite cargar en tiempo de ejecución nuevos patrones desde un archivo, actualizando los parámetros internos de la red como el M_E_P_V -error máximo que puede cometer la red-. Métodos de consulta Evaluate: Evalua la adecuación3 de un individuo sobre un patrón devolviendo esta. Error: Devuelve el error cometido entre la salida actual y la esperada. Evaluate_All: Evalua la adecuación de todos los individuos sobre todos los patrones. Devuelve la adecuación final del individuo. Get_Status: Indica el estado actual de la red neuronal -inicializada o no-. Get_M_E_P_V: devuelve el máximo error que puede producir la red. Get_Network_Size: devuelve el número de pesos de la red. Get_Fitness_Counter: devuelve el número de evaluaciones de la red. Métodos de actualización Set_Weight_Range: Reinicializa los pesos de la red entre el intervalo [min,max], parámetros pasados al método en cuestión. Set_M_E_P_V: Fija el m_e_p_v de la red en caso de que se conozca. No obstante, si se desconoce, al cargar la red o nuevos patrones se calcula de nuevo. 1.2.10 Clase BPN 3 Fitness, mse o rmse. Esto depende de la elección del usuario, que debe asignarla a la variable error. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Se trata de una clase hija de FFN que implementa redes perceptrón multicapa. Entre sus métodos destacan: Set_Position: Apunta al primer peso de la red BPN considerada. Next_Position: Devuelve la posición del siguiente peso. Evaluate: Evalua el error de salida al cuadrado. Diferencia entre la salida obtenida y la esperada. Backpropagate: Se trata de un método auxiliar que ejecuta el BP pero sobre un patrón dado. Get_Configuration_File: Lee la configuración de la red desde un archivo. Initialize: Reserva memoria para la estructura de datos de la BPN. Evaluate_All: Calcula la adecuación sobre todos los patrones. Evaluate: Idem, pero sobre un patrón. Backpropagation: Ejecuta el BP sobre todos los patrones. Gradient_Descent: Ejecuta el gradiente descendiente -dependiente del problema-. 1.2.11 Clase Population Responsable de la gestión de la población, así como del escalado, entrada salida a fichero y estadística. Los métodos que incluye: Name: Devuelve el tipo base de la población. Get_Popsize: Devuelve el tamaño de la población. Get_Allele_Number: Proporciona el número de alelos de unos individuos. Get_Gene_Number: Retorna el número de genes de un individuo. Best: Devuelve el mejor individuo de la población. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Worst: Devuelve el peor individuo de la población. Create_Initial_Population: Crea la población inicial. Change_Range: Cambia el rango de los genes. Compute_Stats: Calcula la estadística de la población. Get_Popstats: Recupera la estadística ya calculada. Get_Entropy: Calcula la entropía para las codificaciones binaria y Gray. Next: Proporciona el siguiente individuo en la población. Reset: El individuo al que apunta el índice actual se reinializa. Set_Sum_Raw_Fitness: calcula la suma del fitness real. Set_Avg_Raw_Fitness: calcula la suma del fitness real medio. End_Of_Population: indica si el índice apunta al último elemento de la lista que conforma la población. Set_Index: Fija unos de los dos indices de la población a una posición que es proporcionada como un parámetro. Get_Index: Devuelve el individuo apuntado por el índice de la posición proporcionada. Change_Index: Intercambia los dos índices que mantiene la población. Set_Scaling: Fija el tipo de escalado. Get_Scaling: Consulta el tipo de escalado empleado. Set_Delta_Factor: Fija el delta para el escalado lineal. Get_Delta_Factor: Consulta el delta del escalado lineal. Set_Sigma_Factor: Fija el sigma para el escalado sigma. Get_Sigma_Factor: Consulta el sigma del escalado sigma. Scale: Escala el valor devuelto por la función objetivo. ScalePop: Escala toda la población. Load_Population: Carga la población desde un fichero. Save_Population: Guarda la población en un archivo. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Save_Population_To_Real: Guarda la población en un archivo, pero convirtiéndola antes a flotante (se utiliza para adaptar AG binario/Gray a EE). Get_Min_Range: Consulta el rango inferior del intervalo de escalado. Get_Max_Range: Consulta el rango superior del intervalo de escalado. Set_Seed: Fija la semilla. 1.2.12 Clase Operator_Pool Define los métodos necesarios para implementar un conjunto de operadores para los algoritmos genéticos. Entre las características de esta implementación están la capacidad de añadir nuevos operadores al conjunto, eliminarlos o cambiarlos en tiempo de ejecución. Dada su estructuración es muy fácil derivar en algoritmos generacionales o celulares. Los métodos disponibles en esta clase son: Init_Private_Structures: inicializa las estructuras privadas e internas del pool de operadores. Is_Mutation_Operator: Comprueba si hay definidos operadores de mutación en el pool. Is_Crossover_Operator: Idem con operadores de cruce. Is_Selecction_Operator: Idem con operadores de selección. Is_Replacement_Operator: Análogo al anterior pero con operadores de reemplazo. Is_Recombination_Operator: Idem con operadores de recombinación. Is_Recombine_Information_Operator: Idem con operadores de recombinación de la información de la población. Xop_Exist: Comprueba si se ha definido un operador de cruce. Reproductive_Cycle: Ejecuta el ciclo reproductivo. Equivale a una generación del bucle principal de aplicación de los operadores. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno ss_gen_Selection: este método sirve para definir el tipo de selección generacional o de estado estacionario- que sigue el algoritmo. Las modificaciones necesarias para ejecutar este proyecto en modo generacional se localizan en este método. Spx, Dpx, Ux, Ax: métodos que implementan los tipos de cruce referidos. Simulated_Annealing: Implementa el método del recocido simulado. Mutation: Codifica la mutación. Replace_Ind: Lleva a cabo el reemplazo de los individuos. Selection: Este método general se encarga de llamar a los métodos de selección implementados según el definido en el pool. Rw_Selection: Implementa la selección por ruleta. Sus_Selection: Codifica la selección SUS. Rank_Based_Selection: Selección basada en el orden. Best_Selection: Selecciona el mejor individuo. Recombine_Population_Mean: Método que utiliza la información de la población para crear un individuo creado a partir de las características medias de los individuos. Recombine_Population_Ponderate: Crea un individuo a partir de las características de los individuos que conforman la población, haciendo que aquellos con mejor aptitud contribuyan más. Recombine_Population_Majority: Se usa en poblaciones cuyo tipo base es binario o Gray. Se genera un nuevo individuo cuyas características provienen de aquellas mayoritarias del resto de la población. Recombine_Population_Rank_Based: Genera un nuevo individuo utilizando las características de la población, ordenando sus individuos y haciendo que la contribución de cada uno de estos venga en función de su posición tras su ordenación. Muta_Hill_Es: Implementa la mutación por Hill-Climbing. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Get_Pc: Consulta el valor de la probabilidad de cruce. Get_Pm: Idem con la probabilidad de mutación. Get_N_Op: devuelve el número de operadores del pool. Get_Op: devuelve el nombre del operador en la posición indicada por el parámetro del método. 1.2.13Clase Operator_ES Define el pool de operadores para la estrategia evolutiva. Los métodos de los que consta son: Append_Operator: Añade nuevos operadores en tiempo de ejecución. Calculate_Normal_Function: calcula una función de distribución N(0,1). Reproductive_Cycle: Idéntico al de la clase anterior. Mutation_ES: Implementa la mutación para EE. Recombine_ES: Implementa el método de recombinación para EE. Make_Child_Population: Genera una nueva población con tres individuos, generados a partir de la aplicación de los operadores de recombinación de la información de la población. (El operador de recombinación de la información por mayoría es omitido) Auxpop_To_Pop: Copia la población generada según el anterior método a la población, reemplazando los peores individuos. 1.2.14 Clase EA Implementa la clase algoritmo evolutivo, que indistintamente se puede instanciar en algoritmo genético o estrategia evolutiva. Los métodos implementados: Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Termination_Condition: Comprueba si la condición de terminación se ha satisfecho. Init: Inicializa EA y crea la población. Step_Up: ejecuta una generación del ciclo reproductivo y comprueba la condición de terminación. Main_Loop: Ejecuta el bucle principal del algoritmo evolutivo un número de veces indicado por el parámetro del método. Set_Solution_Fitness: Fija la solución si es conocida. Get_Current_Generation: Consulta la generación actual en la que se encuentra el algoritmo evolutivo. Print_All: Imprime todas las estadísticas tanto en pantalla como en archivo. Print_train_result: Imprime los resultados del entrenamiento en pantalla. Print_test_result: Imprime los resultados de la fase de test en pantalla. Print_In_File: Habilita la escritura en archivo. Set_Type_Output: Habilita el tipo de salida en pantalla. 1.2.15 Clase Bipoes Encargada de implementar un algoritmo evolutivo con dos poblaciones. Los métodos de los que se dispone: Init: inicializa los dos algoritmos de que consta la clase: el explotador y el explorador. Set_Solution_Fitness: Permite fijar la solución al problema, si es que la conocemos. Termination_Condition: Comprueba si se sastisface la condición de terminación. Proyecto: Entrenamiento de Redes Neuronales utilizando Algoritmos Evolutivos y Combinaciones con Búsqueda Local. Actualización: 19/09/2002 (Madrid) Responsables: D. Enrique Alba Torres D. Ignacio Reyes Moreno Get_Solution_Fitness: Consultamos el fitness solución. Scheduler: Ejecuta el planificador de los dos algoritmos. Execute_ae1: Ejecuta la hebra del algoritmo explorador. Execute_ae2: Ejecuta la hebra del algoritmo explotador. Restart_Condition: Comprueba si es necesario reiniciar el proceso de búsqueda. Reset_Pop: Genera una nueva población. Además de los métodos ya descritos, se dispone de otros encargados de llevar a cabo la entrada/salida, que son los mismos desde el punto de vista semántico a los vistos en la clase EA.