Manual
User Manual:
Open the PDF directly: View PDF
.
Page Count: 111
| Download | |
| Open PDF In Browser | View PDF |
Manual Técnico de M.O.E.A. Software
Dra. Katya Rodrı́guez Vázquez
katya.rodriguez@iimas.unam.mx
Aarón Martı́n Castillo Medina
amcm329@hotmail.com
El presente manual contiene la información técnica relacionada con el producto de software denominado M.O.E.A. Software, la cual consiste en un compendio de las funcionalidades creadas.
Este documento pretende ser una extensión especializada exclusivamente en implementaciones algorı́tmicas del mencionado producto con la finalidad de familiarizar al usuario
con el contenido subyacente en el código fuente para que pueda interaccionar con éste a
su merced, pudiendo reproducirlo o modificarlo según sea el caso.
Es importante mencionar que al ser el producto de software mismo una fusión entre la
teorı́a comprendida en el trabajo escrito y sus correspondientes implementaciones técnicas, el manual por ende también incluye referencias que manifiestan la teorı́a detrás de
cada una de las caracterı́ticas creadas.
Para esto se ofrece al usuario una explicación precisa y concisa de los términos técnicos
que se usarán a lo largo del manual.
Comenzando por un breve señalamiento de la arquitectura de diseño, ésta se refiere al esquema o plantilla que se suele usar para adecuar la organización del código y ası́ agruparlo en módulos con caracterı́sticas similares con la finalidad de optimizar tiempos de detección y corrección de errores, amén de la facilidad de lectura del código gracias a la estructura del mismo.
Entonces se hace notar el uso de la ası́ denominada MVC (Model-View-Controller ó
Modelo-Vista-Controlador).
Siguiendo este tipo de organización, se colocan las funcionalidades en tres categorı́as
principales, que son:
Model (ó Modelo), se almacenan todos los elementos que realizan el proceso analı́tico, en este caso todo lo relacionado con la ejecución de M.O.E.A.’s y la recolección
de resultados.
View (ó Vista), se coloca todo aquéllo asociado a la interfaz gráfica del programa y
1
2
Manual Técnico
en el caso del proyecto, la graficación apropiada de resultados.
Controller (ó Controlador), se guarda toda la parafernalia relativa al control de las
comunicaciones entre la Vista y el Modelo.
El proceso usual de interacción entre dichas categorı́as es el siguiente:
1. El usuario inserta las configuraciones pertinentes en la Vista, las cuales permitirán
obtener resultados detallados del M.O.E.A. que se fuera a ejecutar.
2. El Controlador obtiene las configuraciones previamente insertadas por el usuario;
durante esta etapa se realiza una verificación y saneamiento de dichas configuraciones. Si el proceso fue exitoso se procede ir al paso (3), en cualquier otro caso se
retrocede al paso (1) con una notificación de error.
3. El Modelo se encarga de ejecutar el algoritmo precisado por el usuario en (1), para
ello se le proporcionan todas las configuraciones adjuntas. Una vez concluido el
proceso el Modelo le regresa los resultados al Controlador.
4. El Controlador toma los resultados y a su vez los transfiere a la Vista, la cual se encarga de mostrar al usuario los datos finales de manera gráfica.
Ahora, haciendo énfasis en el contenido del programa, M.O.E.A. Software consta de 60
archivos útiles con un promedio de 200 lı́neas de código por cada uno aproximadamente
sin considerar las lı́neas de comentarios.
Se resalta la denominación útiles porque el usuario encontrará archivos adicionales cuyo
único fin es el de proporcionar meta-información del programa o habilitar detalles técnicos muy especı́ficos que escapan al enfoque de desarrollo.
Dirigiendo la atención hacia el interior del código fuente el usuario notará que todos
los archivos están debidamente comentados, además se incluyen explicaciones técnicas
breves para que éste pueda familiarizarse no sólo con el código sino con conceptos o elementos de programación utilizados en el producto de software.
Con respecto del formato de enunciamiento de comentarios se distingue una sintaxis ligeramente diferente al lenguaje natural. Esto se debe a que se ha usado la correspondiente a
Sphinx (http://www.sphinx-doc.org/en/stable/), el cual es un programa que automatiza la creación visualmente apropiada de documentación para productos de software.
Aún teniendo esto en cuenta no se debe tener dificultad en la interpretación de la información basada en los comentarios y en el caso de encontrarse con alguna incomodidad el sitio de Sphinx ofrece referencias básicas de traducción entre su sintaxis y el lenguaje cotidiano.
En lo concerniente a los tipos de archivos creados, se muestran las siguientes clasificaciones (de menor a mayor jerarquı́a):
UNAM
Facultad de Ciencias
Manual Técnico
3
Script, el archivo básico de implementación, por lo general en éste se describe infraestructura simple como métodos o variables; su creación se atribuye a concebir
el uso de técnicas disponibles para el usuario de una manera más eficiente y menos
burocrática.
Por lo general, este tipo de archivos se encuentran en el Modelo ya que su uso alude a entornos más dinámicos que requieran de una rápida respuesta.
Clase, similar a los Scripts con la salvedad de que las Clases contienen una estructura más robusta pero también más estática. Su uso se limita en este proyecto a la
generación de la interfaz gráfica (en la Vista) y en el Controlador ya que, por regla
general éstos deben estar predispuestos a las necesidades del usuario, ante lo cual
se tiene el menester de destinar mayores recursos.
Módulo, corresponde principalmente a una agrupación de Clases y/o Scripts con
caracterı́sticas en común.
Sección, mantiene relación directa con las categorı́as mencionadas en la arquitectura MVC. Contiene a todos los elementos anteriores.
Conviene mencionar que en algunas partes del manual se establecen sugerencias de referencias anteponiendo la palabra véase como identificador; en este caso se aclara que
se trata de rutas relacionadas con el código fuente por lo que el usuario debe localizarlas en las secciones pertinentes (usando el archivo Begin.py como punto de referencia) para poder acceder al contenido y entonces asociar el código entre distintos archivos.
A continuación de muestra el diagrama del contenido del producto de software, donde se
ven desplegadas tanto la jerarquı́a de los elementos como las relaciones entre éstos:
Begin (script)
Model (sección)
ChromosomalRepresentation (módulo)
I BinaryRepresentation (script)
I FloatPointRepresentation (script)
Community (clase)
I Population (clase)
◁ Individual (clase)
Fitness (módulo)
I LinearRankingFitness (script)
I NonLinearRankingFitness (script)
UNAM
Facultad de Ciencias
4
Manual Técnico
I ProportionalFitness (script)
Operator (módulo)
I Selection (módulo)
◁ Roulette (script)
◁ ProbabilisticTournament (script)
◁ StochasticUniversalSampling (script)
I Crossover (módulo)
◁ NPointsCrossover (script)
◁ UniformCrossover (script)
I Mutation (módulo)
◁ BinaryMutation (script)
◁ FloatPointMutation (script)
SharingFunction (módulo)
I GenotypicSimilarity (módulo)
◁ HammingDistance (script)
I PhenotypicSimilarity (módulo)
◁ EuclideanDistance (script)
MOEA (módulo)
I VEGA (script)
I SPEAII (script)
I MOGA (script)
I NSGAII (script)
View (sección)
MainWindow (clase)
Main (módulo)
I Home (módulo)
◁ HomeFrame (clase)
∙ IntroductionFrame (clase)
UNAM
Facultad de Ciencias
Manual Técnico
5
I DecisionVariable (módulo)
◁ DecisionVariableFrame (clase)
∙ VariableFrame (clase)
I ObjectiveFunction (módulo)
◁ ObjectiveFunctionFrame (clase)
∙ FunctionFrame (clase)
I Population (módulo)
◁ PopulationFrame (clase)
◁ TemplatePopulationFrame (clase)
∙ PopulaceFrame (clase)
∙ FitnessFrame (clase)
I GeneticOperator (módulo)
◁ GeneticOperatorFrame (clase)
◁ TemplateGeneticOperatorFrame (clase)
∙ SelectionFrame (clase)
∙ CrossoverFrame (clase)
∙ MutationFrame (clase)
I MOEA (módulo)
◁ MOEAFrame (clase)
∙ AlgorithmFrame (clase)
∙ SharingFunctionFrame (clase)
Additional (módulo)
I GenerationSignalToplevel (clase)
I MenuInternalOption (módulo)
◁ MenuInternalOption (clase)
◁ InternalOptionToplevel (clase)
◁ InternalOptionTab (módulo)
∙ MOPExampleFrame (clase)
UNAM
Facultad de Ciencias
6
Manual Técnico
∘ MOPFrame (clase)
∙ FeatureFrame (clase)
∘ CharacteristicFrame (clase)
∙ PythonExpressionFrame (clase)
∘ ExpressionFrame (clase)
◁ AboutToplevel (clase)
I ResultsGrapher (módulo)
◁ ResultsGrapherToplevel (clase)
∙ GraphFrame (clase)
∘ CustomNavigationToolbar2TkAgg (clase)
∙ SummaryFrame (clase)
∘ ContentFrame (clase)
∙ ErrorFrame (clase)
Controller (sección)
Controller (clase)
XMLParser (clase)
Verifier (clase)
1.
Begin (script)
Este archivo funge como un launcher (disparador) el cual simplemente crea y muestra la
ventana principal (véase la sección View).
2.
Model (sección)
La sección Model (ó Modelo) contiene toda la base lógica del programa, más en especı́fico, todas las caracterı́sticas para poder ejecutar MOEA’s apropiadamente alimentados con
los datos obtenidos por la sección View (ó Vista) usando la sección Controller (ó Controlador) como intermediaria.
Una vez que se obtenga algún resultado, éste será transmitido a la sección View a través
del Controller.
UNAM
Facultad de Ciencias
Manual Técnico
7
A continuación se observan las subcategorı́as que conforman a la sección en cuestión:
2.1.
ChromosomalRepresentation (módulo)
Ofrece elementos para elaborar una codificación adecuada.
Entiéndase por codificación a la forma de determinar el cromosoma y sus propiedades;
cabe mencionar que el cromosoma será portado por los Individuals (ó Individuos).
Es importante mencionar que cualquier codificación implementada debe ser sustentada en
los métodos correspondientes al Crossover (ó Cruza) y Mutation (ó Mutación), ésto porque dichas operaciones funcionan con cromosomas.
De esta manera, la idea es que el usuario pueda crear sus propias codificaciones, por lo
que, además de agregar la descripción de la codificación a Controller/XML/Features.xml
(véase el archivo mencionado en la sección de código), deberá implementar por lo menos las siguientes funciones:
calculate length subchromosomes(vector variables, number of decimals, representation parameters)
Por cada variable de decisión se crea una porción del cromosoma, entonces en esta
función se calcula el tamaño de cada porción (ó subcromosoma), ya que al final las
operaciones de cruza y mutación se realizarán sobre el súper crosomoma, el cual es
la concatenacion de todos los subcromosomas.
Por eso es importante identificar el tamaño de cada subcromosoma, ası́ como sus
lı́mites dentro del súper cromosoma.
Parameters
vector variables (List) – El vector de variables de decisión, donde cada variable trae consigo sus lı́mites inferior y
superior.
number of decimals (Integer) – El número de decimales que deberá traer cada variable de decisión.
representation parameters (Dictionary) – Un
diccionario que contiene todas las opciones adicionales para
cada tipo de codificación.
Returns Una lista que contiene el tamaño del cromosoma por cada variable de decisión. Dado que el orden de las variables de decisión es
inmutable, se preserva el mismo y por ello la lista contiene sólo los
tamaños.
Return type List
UNAM
Facultad de Ciencias
8
Manual Técnico
create chromosome(length subchromosomes, vector variables, number of decimals, representation parameters)
Función que crea el cromosoma. Se usa la como apoyo el método
calculate length subchromosomes descrito con anterioridad.
Parameters
length subchromosomes (List) – La lista que contiene
los tamaños de cada variable de decisión.
vector variables (List) – La lista que contiene las variables de decisión, ası́ como sus rangos.
number of decimals (Integer) – El número de decimales que traerá cada variable de decisión.
representation parameters (Dictionary) – Un
diccionario que contiene todas las opciones adicionales para
cada tipo de codificación.
Returns El cromosoma devuelto en forma de lista.
Return type List
evaluate subchromosomes(complete chromosome,
length subchromosomes, vector variables,number of decimals, representation parameters)
Tomando en cuenta que el cromosoma ya ha sido creado usando los tamaños de
los subcromosomas, en esta función se procede a evaluar el súper cromosoma partiéndolo en los subcromosomas pertinentes y evaluando individualmente cada uno
de éstos.
Parameters
complete chromosome (List) – El súper cromosoma a
ser evaluado.
length subchromosomes (List) – La lista que contiene
los tamaños de cada variable de decisión.
vector variables (List) – La lista que contiene las variables de decisión, ası́ como sus rangos.
number of decimals (Integer) – El número de decimales que traerá cada variable de decisión.
representation parameters (Dictionary) – Un
diccionario que contiene todas las opciones adicionales para
UNAM
Facultad de Ciencias
Manual Técnico
9
cada tipo de codificación.
Returns Un diccionario que contiene como llave la variable de decisión
y como valor la evaluación del subcromosoma correspondiente.
Return type Dictionary
Sólo concierne añadir un detalle adicional; se asume por defecto que las funciones antes
mencionadas se encuentran implementadas en cada uno de los elementos de este módulo,
por ello es que primordialmente se mostrarán aquéllas que no se contemplen en el esquema original, es decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga información importante también se adjuntarán en el documento.
A continuación se develan los elementos que constituyen a este módulo:
2.1.1.
BinaryRepresentation (script)
Contiene todas las funcionalidades requeridas para que se pueda hacer uso de una codificación de tipo Binary (ó Binaria); ésto significa que los alelos que conforman al cromosoma serán exclusivamente 0 ó 1.
binary to decimal(chromosome)
Método que convierte un número binario a decimal.
Este es un ejemplo de método que se puede agregar adicionalmente siempre y
cuando se implementen las funciones que se han mencionado ya.
Parameters
chromosome (List) – El cromosoma sobre el cual se hará la
evaluación.
Returns La representación en decimal del número binario.
Return type Integer
evaluate subchromosomes(complete chromosome,
length subchromosomes, vector variables, number of decimals, representation parameters)
Realiza una evaluación de los subcromosomas para la codificación binaria (ó Binary).
En términos generales se toma cada porción del subcrosomoma (tomando en cuenta que previamente se calcularon sus longitudes) y ası́ se convierte a decimal,
considerando la expansión numérica.
Posteriormente para obtener el número final se hace lo siguiente:
𝐶𝑜𝑛𝑣𝑒𝑟𝑠𝑖´
𝑜𝑛(𝑠𝑢𝑏𝑐𝑟𝑜𝑚𝑜𝑠𝑜𝑚𝑎) = 𝐴 + 𝐷𝑁 (𝑠𝑢𝑏𝑐𝑟𝑜𝑚𝑜𝑠𝑜𝑚𝑎) ·
UNAM
𝐵−𝐴
2𝑀 −1
Facultad de Ciencias
10
Manual Técnico
Donde:
A es el lı́mite inferior que toma la variable de decisión.
B es el lı́mite superior que toma la variable de decisión.
M es la longitud del subcromosoma asociado a la variable de decisión.
DN (Decimal number) es el número en decimal del subcromosoma asociado
a la variable de decisión.
2.1.2.
FloatPointRepresentation (script)
Este script contiene todas las funcionalidades requeridas para que se pueda hacer uso de
una codificación de tipo Float Point (ó Punto Flotante); ésto significa que los alelos que
conforman al cromosoma serán números de punto flotante.
Un número de punto flotante es aquél que tiene una parte entera y una decimal; cabe
mencionar que si el número en cuestión no tiene expansión decimal, se le considera un
número de representación Integer (ó Entera); ésto porque en algunas fuentes se manejan
la representación de Punto Flotante y Entera por separado.
2.2.
Community (clase)
Proporciona toda la infraestructura lógica para poder construir poblaciones y operar
con éstas, además de transacciones relacionadas con sus elementos de manera individual.
Se le llama Community porque aludiendo a su significado una Community (ó Comunidad) consta de al menos una Population (o Población). De esta manera se
deduce que en algún momento habrán métodos que involucren a más de una Población.
Parameters
vector functions (List) – Lista que contiene las funciones objetivo previamente saneadas por Controller/Controller.py.
vector variables (List) – Lista que contiene las
variables de decisión previamente saneadas por Controller/Controller.py.
available expressions (Dictionary) – Diccionario que contiene algunas funciones escritas como azúcar
sintáctica para que puedan ser utilizadas más fácilmente
UNAM
Facultad de Ciencias
Manual Técnico
11
por el usuario y evaluadas más ŕapidamente en el programa
(véase Controller/XML/PythonExpressions.xml).
number of decimals (Integer) – El número de decimales que tendrán las soluciones; con este número se determina en gran medida el tamaño del cromosoma.
representation instance (Instance) – Instancia
de la técnica de representación que eligió el usuario (véase
Controller/Verifier.py).
representation parameters (Dictionary) – Diccionario que contiene todos los parámetros adicionales a la
técnica de representación considerada por el usuario.
fitness instance (Instance) – Instancia de la técnica de Fitness que eligió el usuario (véase Controller/Verifier.py).
fitness parameters (Dictionary) – Diccionario
que contiene todos los parámetros adicionales a la técnica de
Fitness seleccionada por el usuario.
sharing function instance (Instance) – Instancia de la técnica de Sharing Function seleccionada por el
usuario (véase Controller/Verifier.py).
sharing function parameters (Dictionary) –
Diccionario que contiene todos los parámetros adicionales a
la técnica de Fitness seleccionada por el usuario.
selection instance (Instance) – Instancia de la
técnica de selección (Selection) elegida por el usuario (véase
Controller/Verifier.py).
selection parameters (Dictionary) – Diccionario
que contiene todos los parámetros adicionales a la técnica de
selección (Selection) usada por el usuario.
crossover instance (Instance) – Instancia de la
técnica de cruza (Crossover) tomada por el usuario (véase
Controller/Verifier.py).
crossover parameters (Dictionary) – Diccionario
que contiene todos los parámetros adicionales a la técnica de
cruza (Crossover) manejada por el usuario.
mutation instance (Instance) – Instancia de la
técnica de mutación (Mutation) tomada por el usuario (véase
UNAM
Facultad de Ciencias
12
Manual Técnico
Controller/Verifier.py).
mutation parameters (Dictionary) – Diccionario
que contiene todos los parámetros adicionales a la técnica de
mutación (Mutation) seleccionada por el usuario.
Returns Model.Community.Community
Return type Instance
compare dominance(current, challenger, allowed functions)
Note: Este método es privado.
Permite realizar la comparación de las funciones objetivo de los Individuos
current y challenger tomadas una a una para indicar ası́ quién es el dominado
y quién es el que domina. Cabe mencionar que más apropiadamente se le
conoce como dominancia fuerte de Pareto.
Parameters
current (Instance) – El Individuo inicial para comprobar dominancia.
challenger (Instance) – El Individuo que reta al
inicial para comprobar dominancia.
allowed functions (List) – Lista que indica cuáles
son las funciones objetivo que deben compararse.
Returns True si current domina a challenger, False en otro caso.
Return type Boolean
get best individual results(population)
Note: Este método es privado.
Obtiene los valores de las variables de decisión y de las funciones objetivo
por cada Individuo.
Parameters
population (List) – Una lista que contiene los mejores Individuos por generación.
Returns Una lista que contiene por un lado la tupla (generacion,
funciones) y por otro la tupla (generación, variables). Esto por
UNAM
Facultad de Ciencias
Manual Técnico
13
cada generación.
Return type List
get pareto results(population)
Note: Este método es privado.
Obtiene el frente de Pareto, el complemento del frente de Pareto y el óptimo
de Pareto.
Para una mejor orientación léase la parte escrita del proyecto.
Parameters
population (Instance) – La Población sobre la
cual se obtendrán estos elementos.
Returns Una lista que contiene el frente de Pareto, su complemento y el óptimo de Pareto.
Return type List
using sharing function(individual i, individual j, alpha share, sigma share)
Note: Este método es privado.
Devuelve un valor que ayuda al cálculo del Sharing Function.
A grandes rasgos el sharing function sirve para hacer una selección más precisa de los mejores Individuos cuando se da el caso de que tienen el mismo
número de Individuos dominados.
Parameters
individual i (Instance) – Individuo sobre el que
se hará la operación.
individual j (Instance) – Individuo sobre el que
se hará la operación.
alpha share (Float) – El valor necesario para poder
calcular la distancia entre Individuos.
sigma share (Float) – El valor necesario para poder
calcular la distancia entre Individuos.
Returns El resultado que contribuirá al sharing function.
Return type Float
UNAM
Facultad de Ciencias
14
Manual Técnico
assign fonseca and flemming pareto rank(population, allowed functions=’All’)
Asigna una puntuación (ó rank) a cada uno de los Individuos de una Población con base en su dominancia de Pareto.
A grandes rasgos, el algoritmo asigna un rank que consiste en:
𝑟𝑎𝑛𝑘(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) = 𝑛´
𝑢𝑚𝑒𝑟𝑜 𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛𝑒𝑠 𝑞𝑢𝑒 𝑑𝑜𝑚𝑖𝑛𝑎𝑛(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) + 1
Esta técnica es usada principalmente por M.O.G.A.
Parameters
population (Instance) – La Población sobre la que
se hará la operación.
allowed functions (List) – Lista que contiene las
posiciones de las funciones que son admisibles para hacer
comparaciones. Por defecto tiene el valor “All”.
assign goldberg pareto rank(population, additional info=False,
allowed functions=’All’)
Asigna una puntuación (ó rank) a cada uno de los Individuos de una Población con base en su dominancia de Pareto.
En términos generales, el algoritmo trabaja con niveles, es decir, primero toma los Individuos no dominados y les asigna un valor 0, luego los elimina del
conjunto y nuevamente aplica la operación sobre los no dominados del nuevo
conjunto, a los que les asigna el valor 1, y ası́ sucesivamente hasta no quedar
Individuos.
Esta técnica es usada principalmente por N.S.G.A. II.
Parameters
population (Instance) – La Población sobre la que
se hará la operación.
additional info (Boolean) – Un valor que le indica a la función que debe regresar información adicional.
allowed functions (List) – Lista que contiene las
posiciones de las funciones que son admisibles para hacer
comparaciones. Por defecto tiene el valor “All”.
Returns Si additional info es True: un arreglo con dos elementos:
en el primero se almacena una lista con los niveles de dominancia disponibles mientras que el segundo consta de una
estructura que contiene todos los posibles niveles y asociados
a éstos, los cromosomas de los Individuos que los conforman.
UNAM
Facultad de Ciencias
Manual Técnico
15
Si additional info es False: el método es void (no regresa nada).
Return type List
assign population fitness(population)
Aplica la asignación de Fitness para una Población dada usando como base
el Ranking de cada Individuo (véase Model/Fitness).
Parameters
population (Instance) – La Población sobre la que
se hará la operación.
assign zitzler and thiele pareto rank(population, allowed functions=’All’)
Asigna una puntuación (rank) a cada uno de los Individuos de una Población
con base en su dominancia de Pareto.
A manera de esbozo, el algoritmo asigna un rank que consiste en una razón:
𝑟𝑎𝑛𝑘(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) =
𝑛´
𝑢𝑚𝑒𝑟𝑜 𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛𝑒𝑠 𝑑𝑜𝑚𝑖𝑛𝑎𝑑𝑎𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛
+1
Esta técnica es usada principalmente por S.P.E.A. II
Parameters
population (Instance) – La Población sobre la que
se hará la operación.
allowed functions (List) – Lista que contiene las
posiciones de las funciones que son admisibles para hacer
comparaciones. Por defecto tiene el valor “All”.
calculate population niche count(population)
Calcula el valor conocido como niche count que no es mas que la suma de
los sharing function de todos los Individuos j con el Individuo i, con i != j.
Parameters
population (Instance) – Conjunto sobre el que se
hará la operación.
calculate population pareto dominance(population, allowed functions)
Realiza la comparación de dominancia entre todos los elementos de la Población con base en la evaluación de sus funciones objetivo.
Parameters
UNAM
Facultad de Ciencias
16
Manual Técnico
population (Instance) – La Población sobre la que
se hará la operación.
allowed functions (List) – Lista que indica las
funciones objetivo permitidas para hacer la comparación.
calculate population shared fitness(population)
Calcula el Shared Fitness (ó Fitness Compartido) de cada uno de los Individuos de la Población.
Parameters
population (Instance) – Conjunto sobre el que se
hará la operación.
create population(set chromosomes)
Crea una Población usando un conjunto de cromosomas como base.
Parameters
set chromosomes (List) – Conjunto de cromosomas.
Returns Model.Community.Population
Return type Instance
evaluate population functions(population)
Evalúa cada uno de los subcromosomas de los Individuos de la Población
(Population).
De manera adicional obtiene el listado de los valores extremos tanto de variables de decisión como de funciones objetivo para el cálculo del sigma share
(véase el método using sharing function).
Parameters
population (Instance) – La Población sobre la que
se hará la operación.
execute crossover and mutation(selected parents chromosomes)
Realiza la cruza y mutación de los Individuos. Para el caso de la cruza ésta
se lleva a cabo siempre entre dos Individuos, mientras que la mutación es
unaria.
Parameters
selected parents chromosomes (List) – El
conjunto de cromosomas sobre los cuales se aplicarán
dichos operadores genéticos.
UNAM
Facultad de Ciencias
Manual Técnico
17
Returns Una instancia del tipo Model.Community.Population.
Return type Instance
execute selection(parents)
Realiza la ejecución de la técnica de selección por medio de una instancia
que se creó previamente (véase Controller/Verifier.py).
Parameters
parents (Instance) – El conjunto de Individuos sobre el cual se aplicará la técnica
Returns Una lista con los cromosomas de aquellos Individuos
seleccionados.
Return type List
get best individual(population)
Obtiene el mejor Individuo dentro de una Población. Para estos fines el mejor
Individuo es aquél que tenga mejor dominancia.
Parameters
population (Instance) – La Población sobre la
cual se hará la búsqueda.
Returns El Individuo que cumple con la caracterı́stica de la mayor dominancia.
Return type Instance
get results(best individual along generations, external set population)
Recolecta la información y la almacena en una estructura que contiene dos
categorı́as principales: funciones objetivo y variables de decisión. Por cada
una existen las subcategorı́as Pareto y mejor Individuo, en referencia al óptimo o frente de Pareto (según corresponda) y a los valores del mejor Individuo por generación (véase View/Additional/ResultsGrapher/GraphFrame.py).
Parameters
best individual along generations (List) –
Una lista que contiene los mejores Individuos por generación.
external set population (Instance) – La Población sobre la cual se efectuarán las operaciones.
UNAM
Facultad de Ciencias
18
Manual Técnico
Returns Un diccionario con los elementos mostrados en la descripción.
Return type Dictionary
init population(population size)
Crea una Población de manera aleatoria.
Parameters
population size (Integer) – El tamaño de la Población.
Returns Model.Community.Community.Population
Return type Instance
La clase en cuestión se apoya de los siguientes elementos:
2.2.1.
Population (clase)
Consiste en un conjunto de instancias de la clase Individual, proporcionando además
métodos y atributos que se manifiestan tanto en grupo como de manera individual.
Parameters
population size (Integer) – El tamaño de la Población.
vector functions (List) – Lista con las funciones
objetivo.
vector variables (List) – Lista con las variables de
decisión y sus rangos.
available expressions (Dictionary) – Diccionario que contiene algunas funciones escritas como azúcar
sintáctica para que puedan ser utilizadas más fácilmente
por el usuario y evaluadas más ŕapidamente en el programa
(véase Controller/XML/PythonExpressions.xml).
number of decimals (Integer) – Número de decimales que tendrá cada solución (tanto en variables de
decisión como funciones objetivo).
Returns Model.Community.Population
Return type Instance
UNAM
Facultad de Ciencias
Manual Técnico
19
add individual(position, complete chromosome)
Añade un Individuo a la Población.
Parameters
position (Integer) – La posición dentro del arreglo de Individuos donde se colocará el nuevo elemento.
complete chromosome (Array) – El cromosoma
del Individuo.
calculate population properties()
Calcula atributos individuales con base en los valores de toda la Población.
get decision variables extreme values()
Regresa el listado de los valores máximo y mı́nimo de las variables de decisión para el cálculo de sigma share.
Returns Una colección con los valores máximo y mı́nimo para
las variables de decisión.
Return type Dictionary
get individuals()
Regresa los Individuos de la Población.
Returns Estructura que contiene a los Individuos de la Población.
Return type Array
get length vector functions()
Regresa el número de elementos del vector de funciones objetivo.
Returns Número de funciones objetivo.
Return type Integer
get objective functions extreme values()
Regresa el listado de los valores máximo y mı́nimo de las funciones objetivo
para el cálculo de sigma share.
Returns El listado con los valores máximo y mı́nimo para las
funciones objetivo.
Return type List
get size()
Otorga el tamaño de la Población.
Returns El tamaño de la Población.
UNAM
Facultad de Ciencias
20
Manual Técnico
Return type Integer
get total expected value()
Regresa el valor esperado de la Población.
Returns El valor esperado.
Return type Float
get total fitness()
Captura el Fitness total de la Población.
Returns El valor del Fitness poblacional.
Return type Float
get vector variables()
Regresa el vector de variables de decisión.
Returns Conjunto que contiene las variables de decisión con sus
rangos.
Return type List
print info()
Imprime en texto las caracterı́sticas de los Individuos de la Población, tanto
grupales como individuales (en consola).
set decision variables extreme values(decision variables extreme values)
Actualiza el listado de valores máximo y mı́nimo de las variables de decisión
para el cálculo de sigma share.
Parameters
decision variables extreme values (Dictionary)
– Un conjunto con los valores máximo y mı́nimo de
cada una de las variables de decisión.
set objective functions extreme values(objective functions extreme values)
Actualiza el listado de valores máximo y mı́nimo de las funciones objetivo
para el cálculo de sigma share.
Parameters
objective functions extreme values (List)
– Una lista con los valores máximo y mı́nimo de cada
una de las funciones objetivo.
set total fitness(value)
Actualiza el Fitness total de la Población.
UNAM
Facultad de Ciencias
Manual Técnico
21
Parameters
value (Float) – El valor a actualizar.
shuffle individuals()
Desordena los elementos de la Población.
sort individuals(method, is descendent)
Ordena los Individuos de acuerdo a algún criterio dado.
Parameters
method (String) – El método o atributo sobre el
cual se hará la comparación.
is descendent (Boolean) – Indica si el ordenamiento es ascendente o descendente.
La clase actual tiene como base el siguiente elemento:
2.2.1.1.
Individual (clase)
La base de toda operación lógica.
Consiste en una abstracción de un elemento simple en función de un ecosistema.
Si bien la parte esencial es el cromosoma, en esta implementación se añaden algunos elementos extra con la finalidad de facilitar ciertas operaciones.
Parameters
complete chromosome (Array) – El cromosoma que
conformará al Individuo.
vector functions (List) – Lista que contiene a las
funciones objetivo.
available expressions (Dictionary) – Diccionario que contiene algunas funciones escritas como azúcar
sintáctica para que puedan ser utilizadas más fácilmente
por el usuario y evaluadas más ŕapidamente en el programa
(véase Controller/XML/PythonExpressions.xml).
number of decimals (Integer) – El número de
decimales que deberá tener cada solución, influye en el
comportamiento del cromosoma.
Returns Model.Community.Population.Individual
Return type Instance
UNAM
Facultad de Ciencias
22
Manual Técnico
evaluate single function(function, expressions)
Note: Este método es privado.
Evalúa una función objetivo.
Parameters
function (String) – La función que será evaluada.
expressions (Dictionary) – El diccionario
que ayuda a evaluar la función. Expressions = variables + constantes + funciones built-in.
Returns La función evaluada.
Return type Float
evaluate functions(decision variables)
Evalúa todas las funciones objetivo.
Parameters
decision variables (List) – El vector de
variables de decisión.
get complete chromosome()
Regresa el cromosoma del Individuo.
Returns El cromosoma.
Return type Array
get decision variables()
Da el vector de variables de decisión.
Returns El vector de variables de decisión.
Return type List
get evaluated functions()
Regresa las funciones objetivo evaluadas.
Returns Las funciones objetivo evaluadas.
Return type List
get expected value()
UNAM
Facultad de Ciencias
Manual Técnico
23
Se obtiene el valor esperado del Individuo.
Por definición, el valor esperado es el número de posibles hijos que puede
tener un Individuo. Mientras más apto, más hijos.
Returns El valor esperado.
Return type Float
get fitness()
Regresa el Fitness del Individuo.
Returns El Fitness.
Return type Float
get niche count()
Regresa el valor niche para el Individuo.
Returns El tamaño niche.
Return type Float
get pareto dominated()
Regresa el número de soluciones que dominan al Individuo actual.
Returns El número de soluciones que dominan a la actual.
Return type Integer
get pareto dominates()
Regresa el número de soluciones que son dominadas por el actual Individuo.
Returns El número de soluciones dominadas.
Return type Integer
get rank()
Regresa la puntuación (rank) que se le designó al Individuo (véase Model/Community/Community.py).
Returns El rango.
Return type Float
get vector functions()
Obtiene el vector de funciones objetivo.
Returns El vector de funciones objetivo.
Return type List
UNAM
Facultad de Ciencias
24
Manual Técnico
print info()
Imprime las caracterı́sticas básicas del Individuo (en consola).
set expected value(value)
Actualiza el valor esperado del Individuo.
Parameters
value (Float) – El valor a actualizar.
set fitness(value)
Actualiza el valor del Fitness.
Parameters
value (Float) – El valor a actualizar.
set niche count(value)
Actualiza el valor niche.
Parameters
value (Float) – El valor a actualizar.
set pareto dominated(value)
Actualiza el número de soluciones que dominan a la solución actual.
Parameters
value (Integer) – El valor a actualizar.
set pareto dominates(value)
Actualiza el número de soluciones dominadas por el Individuo actual.
Parameters
value (Integer) – El valor a actualizar.
set rank(rank)
Actualiza el rango del Individuo.
Parameters
rank (Float) – El valor a actualizar.
2.3.
Fitness (módulo)
Este módulo provee técnicas que calculan el Fitness (ó Aptitud) de los Individuals (ó Individuos) de una Population (ó Población).
Se entiende por Fitness a un número que indica la calidad del Individuo (en particular
UNAM
Facultad de Ciencias
Manual Técnico
25
de sus variables de decisión) frente a las funciones objetivo al momento de ser evaluadas, esto es, a mayor Fitness, mayor es la probalidad de que las variables de decisión del
Individuo sean la solución óptima para las funciones objetivo.
La asignación del Fitness depende en gran medida del ranking que se les haya otorgado a
los Individuos previamente (véase Model/Community/Community.py).
Indirectamente, esto nos indica que un Individuo con un Fitness alto tiene más probabilidades de ser elegido en los métodos de Selection (ó Selección) y propagar su carga
genética; ası́ en las funciones de dicha sección (Model/Operator/Selection) el criterio
para escoger a un Individuo está basado comúnmente en su Fitness.
Al final la meta es que el usuario cree sus propias versiones de asignación de Fitness,
para lo cual es imperativo que, además de agregar la descripción de la codificación a Controller/XML/Features.xml (véase el archivo mencionado en la sección de código), se
implemente la siguiente función:
assign fitness(population, fitness parameters)
Realiza la asignación de Fitness de los Individuos.
Dentro de esta se suelen usar métodos de la clase Population (véase Model/
Community/Population/Population.py) y de la clase Individual (véase Model/
Community/Population/Individual/Individual.py), por lo que es muy recomendable que el usuario verifique las funciones disponibles. Algunas de las que se ocupan más frecuentemente son:
get rank (Individual)
set fitness (Individual).
set total fitness (Population)
calculate population properties (Population)
Parameters
population (Instance) – La Población sobre la cual
se hará el cálculo de Fitness por cada Individuo.
fitness parameters (Dictionary) – Un diccionario que puede contener opciones adicionales para el cálculo
de Fitness.
Sólo concierne añadir un detalle adicional; se asume por defecto que las funciones antes
mencionadas se encuentran implementadas en cada uno de los elementos de este módulo,
por ello es que primordialmente se mostrarán aquéllas que no se contemplen en el esquema original, es decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga información importante también se adjuntarán en el documento.
Ahora se muestran los elementos que conforman el módulo actual:
UNAM
Facultad de Ciencias
26
Manual Técnico
2.3.1.
LinearRankingFitness (script)
Se implementa la asignación de Fitness conocida como Linear Ranking (ó Ranking Lineal). Es denominada ası́ porque el Fitness se asigna con una función lineal que tiene como fundamento la posición que ocupa el Individuo dentro de la Población.
El procedimiento es: tomando en cuenta el ranking asignado a los Individuals (ó Individuos) por la clase Community (véase Model/Community/Community.py) se ordenan de acuerdo a este valor y entonces el Fitness se basa en la posición que cada uno de
los Individuos ocupa. Más en especı́fico, el Fitness está proporcionado por la siguiente
fórmula:
𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) = 2 − 𝑆𝑃 +
2·(𝑆𝑃 −1)·𝑝𝑜𝑠𝑖𝑐𝑖´
𝑜𝑛(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛−1
Donde:
SP (Selective Pressure ó Presión Selectiva) es un valor que oscila entre 1 y 2.
Posición(Individuo) es la que ocupa el Individuo de acuerdo al rank.
Haciendo un análisis somero en la fórmula, se puede apreciar que los Individuos con mejor Fitness serán aquéllos que se encuentren en las últimas posiciones, sin embargo los
rankings que se manejan en este proyecto son inversamente proporcionales a la calidad
de los Individuos (véase Model/Community/Community.py); por ello es importante ordenar a los Individuos de manera descendente para que la operación tenga sentido.
La función encargada de esto se llama sort individuals y está en Model/Community/
Population/Population.py.
2.3.2.
NonLinearRankingFitness (script)
Se implementa la asignación de Fitness conocida como Non-Linear Ranking (ó Ranking
No Lineal) que, a diferencia de los demás métodos, la aplica usando como base la posición del Individual (ó Individuo) en la Population (ó Población) como resultado de las
operaciones de ranking (véase Model/Community/Community.py).
Posteriormente el Fitness se constituye tomando la posición del Individuo y una función polinomial (la cual es una función no lineal, de ahı́ el nombre). La fórmula es la
siguiente:
𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) =
𝑜𝑛(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
𝑇 𝑃 ·𝑋 𝑝𝑜𝑠𝑖𝑐𝑖´
∑︀𝑇 𝑃 𝑖−1
𝑖=1 𝑋
Donde:
TP es el tamaño de la Población.
Posición(Individuo) es la que ocupa éste de acuerdo al ranking previo.
UNAM
Facultad de Ciencias
Manual Técnico
27
X es la solución al polinomio: (𝑆𝑃 −𝑇 𝑃 )·𝑋 𝑇 𝑃 −1 +𝑆𝑃 ·𝑋 𝑇 𝑃 −2 +...+𝑆𝑃 ·𝑋+𝑆𝑃 =
0
SP (Selective Pressure ó Presión Selectiva) varı́a entre 1 y 2.
Haciendo un análisis somero en la fórmula, se puede apreciar que los Individuos con mejor Fitness serán aquéllos que se encuentren en las últimas posiciones, sin embargo los
rankings que se manejan en este proyecto son inversamente proporcionales a la calidad
de los Individuos (véase Model/Community/Community.py); por ello es importante ordenar a los Individuos de manera descendente para que la operación tenga sentido.
La función encargada de esto se llama sort individuals y está en Model/Community/
Population/Population.py.
calculate root(polynome, x 0, epsilon)
Calcula la solución de un polinomio usando el método Newton-Raphson.
A grandes rasgos el funcionamiento es el siguiente:
Tomando como base el punto 𝑥0 se obtiene 𝑥1 ası́:
𝑥1 = 𝑥 0 −
𝑓 (𝑥0 )
𝑓 ′ (𝑥0 )
Una vez obtenido 𝑥1 se calcula 𝑥2 de la misma manera:
𝑥2 = 𝑥1 −
𝑓 (𝑥1 )
𝑓 ′ (𝑥1 )
El proceso se repite para ‘n’ iteraciones hasta que el valor alcance la precisión de
epsilon ó el polinomio ya no tenga más derivadas. Concretando lo anterior:
𝑥𝑛+1 = 𝑥𝑛 −
𝑓 (𝑥𝑛 )
𝑓 ′ (𝑥𝑛 )
Cuando 𝑥𝑛+1 se acerque a epsilon ó cuando el polinomio no sea más derivable el
método se detendrá.
Parameters
polynome (List) – El polinomio en el que se buscará la
solución.
x 0 (Float) – el punto sobre el que se hará la evaluación
del polinomio.
epsilon (Float) – La precisión decimal que se necesita
para poder devolver el resultado.
Returns La solución al polinomio.
Return type Float
UNAM
Facultad de Ciencias
28
Manual Técnico
derivate(polynome)
Método que calcula la derivada de un polinomio, modificando directamente éste
sin regresar nada.
Parameters
polynome (List) – El polinomio inicial.
evaluate polynome(polynome, x)
Evalúa un polinomio en un cierto valor.
Parameters
polynome (List) – El polinomio a evaluar.
x (Float) – El valor sobre el que se evaluará el polinomio.
Returns La evaluación del polinomio.
Return type Float
2.3.3.
ProportionalFitness (script)
Se desarrolla la asignación de Fitness conocida como Proportional (ó Proporcional).
La función (ó fórmula) utilizada es la siguiente:
𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) =
𝐹0 (𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
∑︀𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛
𝐹0 (𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 )
𝑖=1
Donde:
𝐹0 es conocido como el valor de la función objetivo del Individuo. Nótese que 𝐹0
debe ser proporcional al Fitness del Individuo.
De acuerdo a la información provista anteriormente, la asignación es llamada ası́ porque,
como dice el nombre, el Fitness de un Individuo corresponde a la parte proporcional de la
cantidad total de 𝐹0 de la Population (ó Población).
De esta manera es posible ajustar los valores para que no existan Fitness dispares. Con
respecto de 𝐹0 es importante considerar que, dado que se está manejando un sistema multi objetivo puede haber más de un valor en existencia, por ello se necesita una cantidad
que conjunte estas evaluaciones el cual es el rank, sin embargo el rank es inversamente
proporcional a la calidad de un Individuo.
Entonces se debe hacer una modificación para garantizar que exista un valor proporcional al Fitness del Individuo, por lo cual 𝐹0 se reescribe ası́:
𝐹0 (𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) = 𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛 − 𝑟𝑎𝑛𝑘(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
Reescribiendo la fórmula inicial se tiene lo siguiente:
UNAM
Facultad de Ciencias
Manual Técnico
𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) =
29
𝑜𝑛−𝑟𝑎𝑛𝑘(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
∑︀𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛
𝑜𝑛−𝑟𝑎𝑛𝑘(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 )]
[𝑡𝑎𝑚𝑎˜
𝑛
𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑖=1
Con esta actualización ya es posible obtener un Fitness acorde al rank del Individuo sin
alterar la esencia de la técnica.
2.4.
Operator (módulo)
En éste se encuentran implementadas todas aquellas funcionalidades que intervengan en
el proceso de la creación de una nueva Population (ó Población) hija.
La finalidad de ésto es propagar y realizar combinaciones de la carga genética de los Individuals (ó Individuos) más aptos mediante el cromosoma (véase Model/
ChromosomalRepresentation) para obtener soluciones con una mejor calidad que sus
predecesoras.
Para este punto es importante mencionar que la calidad de un Individuo es directamente
proporcional a su Fitness (véase Model/Fitness).
En términos generales, la manera de construir una Población hija es la siguiente:
De la Población actual y tomando como base el Fitness de cada Individuo se seleccionan aquéllos que serán los elegidos para reproducirse. Nótese que un Individuo
puede ser tomado en cuenta más de una vez si se da el caso.
Con base en los elegidos, se toman sus respectivos cromosomas y se realiza la operación de Crossover (ó Cruza). Ésta es una simulación de una reproducción de tipo
sexual donde se toman dos padres para “procrear” dos hijos.
Las caracterı́sticas de los hijos dependerán de las técnicas usadas (véase Model/
Operator/Crossover).
Se toman los hijos y uno a uno se les aplica la operación de mutación.
Al final Población hija constará de los hijos “mutados”.
A continuación se muestran las siguientes subcategorı́as correspondientes a los pasos descritos anteriormente, cada una con sus respectivas técnicas desarrolladas:
2.4.1.
Selection (módulo)
En esta sección se encuentran implementadas todas las técnicas relacionadas con la selección de Individuos.
Como se ha mencionado antes, durante dicha operación la importancia de la elección radica en el Fitness de cada Individuo, además un Individuo puede ser seleccionado más de
una vez si la causa lo amerita.
Ası́, se elegirán tantos Individuos como elementos haya en la Población.
UNAM
Facultad de Ciencias
30
Manual Técnico
El objetivo radica en mantener el equilibrio entre una “selección justa” y la oportunidad de permitir a los Individuos con una calidad media o baja la propagación de su carga
genética.
Al final se busca que el usuario desarrolle sus propias técnicas de selección, por lo cual,
además de añadir el método en el listado localizado en Controller/XML/Features.xml,
deberá implementar la siguiente función:
execute selection technique(population, selection parameters)
Lleva a cabo la selección de Individuos de una Población. Es importante recalcar
que, la función que más se ocupa es:
get fitness (Model/Community/Population/Individual.py)
Aunque existen otras que pueden tener relevancia para el usuario (véase Model/
Community/Population.py).
Como medida adicional, para los eventos de Crossover (ó Cruza) y Mutation (ó Mutación) se recomienda ampliamente que este método regrese únicamente los cromosomas asociados a los Individuos, ya que ésto facilita sobremaneralas operaciones mencionadas.
Parameters
population (Instance) – La Población sobre la cual
se se seleccionarán los Individuos.
selection parameters (Dictionary) – Un diccionario que puede contener opciones adicionales para la
selección de Individuos.
Returns Una lista que contiene los cromosomas de los Individuos seleccionados.
Return type List
Es conveniente mencionar que se asume por defecto que las funciones antes mencionadas
se encuentran implementadas en cada uno de los elementos de este módulo, por ello es
que primordialmente se mostrarán aquéllas que no se contemplen en el esquema original,
es decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga información importante también se adjuntarán en el documento.
A continuación se vislumbran los elementos caracterı́sticos de este módulo:
2.4.1.1.
UNAM
Roulette (script)
Facultad de Ciencias
Manual Técnico
31
Se implementa el método de selección conocido como Roulette (ó Ruleta).
También es llamado Proportional Selection (ó Selección Proporcional).
En la función se distinguen dos etapas principales: construir la ruleta y “ponerla a
girar” para que se elija al elemento.
Para la primera etapa se toma como base el Valor Esperado (ó Expected Value) de
cada Individuo (véase Model/Community/Population/Individual.py).
El Valor Esperado para fines de este proyecto es el número de “hijos” que un Individuo puede ofrecer. Éste se calcula de la siguiente forma:
𝑉 𝑎𝑙𝑜𝑟 𝐸𝑠𝑝𝑒𝑟𝑎𝑑𝑜(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) =
𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛·𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
∑︀𝑡𝑎𝑚𝑎˜
𝑜𝑛
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 )
𝑖=1
Al final aquéllos con Valores Esperados altos tendrán lugar a mayores espacios en
la ruleta y por ende su probabilidad de elección aumenta.
Para recorrer la ruleta en realidad se toma un valor aleatorio entre 0 y la suma de
los Valores Esperados. Entonces se van sumando los Valores Esperados de los Individuos hasta que se exceda el valor aleatorio mencionado antes. Aquel elemento
cuyo Valor Esperado haya excedido la suma se considera el elegido y es seleccionado para la etapa de cruza.
Para la selección de Individuos se efectúa la segunda operación tantas veces como
el tamaño de la Población.
Cabe mencionar que el Valor Esperado ya se calcula de manera automática en este proyecto (véase Model/Community/Population/Population.py).
2.4.1.2.
ProbabilisticTournament (script)
Se desarrolla la técnica conocida como Torneo Probabilı́stico (ó Probabilistic
Tournament).
Tal como lo sugiere el nombre, la selección será llevada a cabo en forma de competencia directa entre los Individuos.
Tradicionalmente se comparan sus Fitness y de esta manera el Individuo ganador
es aquél con la cantidad mayor de Fitness, pero dado que se maneja un esquema probabilı́stico la decisión no depende totalmente del factor antes mencionado.
De esta manera se pueden recapitular los siguientes pasos:
Tomar k (2 6 𝑘 6 𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛) Individuos de la Población.
Realizar el torneo de manera secuencial entre los elementos seleccionados
anteriormente, esto es, tomar el elemento A y enfrentarlo con B, al resultado
de la batalla anterior enfrentarlo con C y ası́ sucesivamente.
Para ello por cada encuentro se crea un número aleatorio entre 0 y 1, si el número
es menor a 0.5 se toma al elemento con menor Fitness, de lo contrario se elige al de
UNAM
Facultad de Ciencias
32
Manual Técnico
mayor Fitness.
La operación se lleva a cabo hasta que se tenga un ganador de los k Individuos.
Los dos pasos anteriores se repiten hasta que se hayan obtenido tantos Individuos
como el tamaño de la Población.
2.4.1.3.
StochasticUniversalSampling (script)
Se determina la técnica conocida como Stochastic Universal Sampling (ó Muestreo
Estocástico Universal).
Primero que nada es menester mencionar que es necesario el uso del Expected Value (ó Valor Esperado) de cada Individuo.
Para fines concernientes a este proyecto, se trata del número de “hijos” que un Individuo puede ofrecer. Éste se calcula de la siguiente forma:
𝑉 𝑎𝑙𝑜𝑟 𝐸𝑠𝑝𝑒𝑟𝑎𝑑𝑜(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) =
𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛·𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
∑︀𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛
𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 )
𝑖=1
Con base a lo anterior, el método consiste en lo siguiente:
Se selecciona un valor aleatorio entre 0 y 1, a éste se le llamará Pointer (ó Puntero)
De manera secuencial se seleccionarán tantos Individuos como el tamaño
de la Población, los cuales deben estar igualmente espaciados en su Valor
Esperado tomando como referencia el valor de Pointer.
Es importante aclarar el segundo punto, ası́ que se abordará desde una perspectiva
computacional:
Se deben tener variables adicionales que indiquen la acumulación tanto del
Pointer (CP, Cumulative Pointers) como de los Valores Esperados (CEV,
Cumulative Expected Value) ası́ como al Individuo actual que está siendo
seleccionado (I).
Para averiguar si un Individuo está igualmente espaciado en su Valor Esperado con respecto de los demás basándose en Pointer, basta con corroborar
que:
𝐶𝑃 + 𝑃 𝑜𝑖𝑛𝑡𝑒𝑟 > 𝐶𝐸𝑉 + 𝐸𝑉
Si la condición descrita es verdadera los valores EV e I deben actualizarse
(I se ajusta al siguiente Individuo) ya que esto indica que se buscará al siguiente Individuo espaciado equitativamente con el valor Pointer. No se hace
nada si la condición es falsa.
Independientemente del valor de la condición anterior, CP y CEV deben actualizarse durante todo el ciclo.
UNAM
Facultad de Ciencias
Manual Técnico
33
Cabe mencionar que si la lista de Individuos se agota, se puede volver a iterar desde
el inicio teniendo cautela en conservar CEV y CP.
2.4.2.
Crossover (módulo)
Aquı́ se desarrollan las técnicas de Crossover (ó Cruza).
Prosiguiendo con el ciclo de creación de una nueva Población, es en este apartado donde
se lleva a cabo la concepción de nuevos Individuos.
Debido a esto se busca crear “hijos” más aptos que respondan mejor ante la problemática
fundamentada, es decir, concebir soluciones que se adapten mejor a los criterios establecidos por el usuario desde un inicio basándose en las soluciones predecesoras.
Es menester mencionar que esta función es meramente binaria, lo cual significa que siempre deben haber dos padres, además se debe hacer hincapié en que la Cruza se ejecuta a
nivel cromosómico (véase Model/ChromosomalRepresentation),por lo que se debe tener mesura con el tratamiento de los métodos, dicho de otra manera, cada Representación
Cromosómica debe ir acompañada de al menos una función de Cruza.
Como dato para posteriores referencias, un gen hace referencia a una casilla del cromosoma mientras que un alelo es el valor que puede existir en un gen.
Entonces se persigue que el usuario construya sus propias funciones de Cruza, para lo
cual, además de añadir el método en el listado localizado en Controller/XML/Features.xml,
deberá implementar la siguiente función:
execute crossover technique(chromosome a, chromosome b, crossover parameters)
Lleva a cabo la cruza de dos Individuos a nivel cromosómico.
Además esta función debe retornar siempre dos hijos los cuales serán la cruza de A
con B y la cruza de B con A, esto nos indica que, con el objetivo de incrementar la
calidad de los Individuos sin perder la carga genética ganada o introducir elementos
riesgosos, la cruza consiste en generar un nuevo Individuo y su recı́proco; ası́ se garantiza una adecuada y controlada descendencia.
Finalmente, esta función debe contar con la probabilidad de Cruza, la cual indica
si se debe o no hacer la operación cromosómica; en caso de ser la respuesta negativa los hijos resultan en copias idénticas de los padres.
Parameters
chromosome a (List) – El cromosoma del Individuo
A.
chromosome b (List) – El cromosoma del Individuo
B.
UNAM
Facultad de Ciencias
34
Manual Técnico
crossover parameters (Dictionary) – Un diccionario que puede contener opciones adicionales para la
cruza de Individuos.
Returns Un arreglo con dos cromososomas, el primero es la cruza de
A con B, mientras que el segundo es la cruza de B con A.
Return type Array
Es menester considerar que se asume por defecto que las funciones antes mencionadas se
encuentran implementadas en cada uno de los elementos de este módulo, por ello es que
primordialmente se mostrarán aquéllas que no se contemplen en el esquema original, es
decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga información importante también se adjuntarán en el documento.
Se colocan los elementos alusivos a este módulo:
2.4.2.1.
NPointsCrossover (script)
Se implementa el método que lleva por nombre N-Points Crossover (ó Cruza en NPuntos).
Para comenzar, esta técnica está elaborada para usarse tanto por Representación
Cromosómica (véase Model/ChromosomalRepresentation) de tipo FloatPoint
(ó de Punto Flotante) como Binary (ó Binaria).
Su funcionamiento consiste en construir a los descendientes usando sub-bloques de
cromosomas de cada uno de los padres, determinados éstos por una cierta cantidad
de puntos de corte, de ahı́ el nombre.
Aterrizando lo anterior de una manera concisa se tiene lo siguiente:
Consideremos a los cromosomas de los padres Padre I: 𝐼1 𝐼2 ...𝐼𝑛 y Padre J:
𝐽1 𝐽2 ...𝐽𝑛
Posteriormente se determinan aleatoriamente los puntos de corte, cabe mencionar que si los cromosomas son de tamaño n, pueden existir máximo n - 1
puntos. Supongamos que se crean k puntos (1 6 𝑘 6 𝑛 − 1) y por lo tanto cada cromosoma queda separado en k + 1 bloques.
De esta manera obtenemos:
• Padre I en bloques (BI): 𝐵𝐼1 𝐵𝐼2 ...𝐵𝐼𝑘+1 ;
• Padre J en bloques (BJ): 𝐵𝐽1 𝐵𝐽2 ...𝐵𝐽𝑘+1 .
Finalmente cada hijo constará de la alternancia de bloques de manera secuencial comenzando por el bloque inicial de un padre determinado, dicho de otra
forma, los hijos estarán constituidos de la siguiente manera:
UNAM
Facultad de Ciencias
Manual Técnico
35
• Para el hijo 𝐻1 : 𝐵𝐼1 𝐵𝐽2 ...𝐵𝐼𝑘+1
• Para el hijo 𝐻2 : 𝐵𝐽1 𝐵𝐼2 ...𝐵𝐽𝑘+1
Sólo queda mencionar que hasta el cierre de este proyecto no existe una manera
transparente desde el View (ó Vista) de conocer, dada una representación Binaria
y un conjunto de variables de decisión y funciones objetivo, el número máximo de
puntos de corte permitidos para este procedimiento, sin embargo, una manera de
mitigar esta situación fue contemplar algún posible caso de error en esta sección
y mandar un mensaje de error a la Vista por si llegase a suceder algún desperfecto
durante el proceso.
2.4.2.2.
UniformCrossover (script)
Se lleva a cabo la implementación de la técnica conocida como Uniform Crossover
(ó Cruza Uniforme).
Primero que nada esta operación está fabricada para usarse tanto con la Representación Cromosómica (véase Model/ChromosomalRepresentation) de tipo FloatPoint (ó Punto Flotante) como Binary (ó Binaria).
La caracterı́stica de este procedimiento es crear nuevos Individuos intercambiando secuencialmente los genes de sus padres; visto de una manera más estructurada
consiste en lo siguiente:
Tenemos a los cromosomas de los padres Padre A: 𝐴1 𝐴2 ...𝐴𝑛 y Padre B:
𝐵1 𝐵2 ...𝐵𝑛
Ahora, cada hijo será construido con genes de uno y sólo uno de los padres
a menos que se indique lo contrario; este movimiento será posible con una
variable denominada Pmask (Pm) que toma valores de 0 a 1 y una probabilidad de Pmask (Pp) que también toma valores de 0 a 1. Entonces lo anterior
se puede declarar ası́:
Para el hijo (𝐻1 ) que tomará sus genes del padre A (PA):
• Si 𝑃 𝑚 6 𝑃 𝑝 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠 𝐻1 (𝑖) = 𝐴𝑖 , 𝑒𝑛 𝑜𝑡𝑟𝑜 𝑐𝑎𝑠𝑜 𝐻1 (𝑖) = 𝐵𝑖 ; 1 6 𝑖 6
𝑛
Para el hijo (𝐻2 ) que tomará sus genes del padre B (PB):
• Si 𝑃 𝑚 6 𝑃 𝑝 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠 𝐻2 (𝑖) = 𝐵𝑖 , 𝑒𝑛 𝑜𝑡𝑟𝑜 𝑐𝑎𝑠𝑜 𝐻1 (𝑖) = 𝐴𝑖 ; 1 6 𝑖 6
𝑛
UNAM
Facultad de Ciencias
36
Manual Técnico
2.4.3.
Mutation (módulo)
En esta parte se encuentran detalladas las técnicas relacionadas con Mutation (ó Mutación).
Retomando el proceso de creación de una nueva Población, es aquı́ donde una vez obtenidos los hijos, se modifican pequeñas porciones (genes) de sus cromosomas de manera individual.
Con ésto se persigue principalmente que estas ı́nfimas alteraciones permitan incrementar
la exploración del material genético y por ende otorgar Individuos aún más aptos sin caer
en el peligro de perder caracterı́sticas valiosas en la Población.
Considerando lo anterior, lo primero que hay que tomar en cuenta es que la operación de
Mutación es unaria, esto significa que sólo se puede mutar el cromosoma de un Individuo
a la vez.
También y reiterando la información pasada, la Mutación es una operación que se lleva
a cabo a nivel cromosómico (véase Model/ChromosomalRepresentation), por lo que
se debe tener mesura con el tratamiento de los métodos, dicho de otra manera, cada Representación Cromosómica debe ir acompañada de al menos una función de Mutación.
Como dato para posteriores referencias, un gen hace referencia a una casilla del cromosoma, mientras que un alelo es el valor que puede existir en un gen.
Ası́, se invita a que el usuario construya sus propias versiones de Mutación, por lo cual,
además de añadir el método en el listado localizado en Controller/XML/Features.xml,
deberá implementar la siguiente función:
execute mutation technique(chromosome, mutation parameters)
Lleva a cabo mutación del Individuo a nivel cromosómico.
A grandes rasgos, modifica los alelos de los genes tomando en cuenta la gama de
valores a los que se pueden transformar (por ejemplo, una mutación de representación Binaria puede transformarse sólo en valores 0 ó 1).
El método debe retornar siempre el cromosoma mutado.
Finalmente, esta función debe contar con la probabilidad de Mutación, la cual indica si se debe o no hacer la operación cromosómica por cada gen; en caso de ser la
respuesta negativa el Individuo no experimenta modificación alguna en el gen y se
pasa al siguiente y ası́ sucesivamente.
Parameters
chromosome (List) – El cromosoma para ser mutado.
mutation parameters (Dictionary) – Un diccionario que puede contener opciones adicionales para la
mutación del cromosoma del Individuo.
Returns El cromosoma modificado.
UNAM
Facultad de Ciencias
Manual Técnico
37
Return type List
Se debe tomar en cuenta que se asume por defecto que las funciones antes mencionadas
se encuentran implementadas en cada uno de los elementos de este módulo, por ello es
que primordialmente se mostrarán aquéllas que no se contemplen en el esquema original,
es decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga información importante también se adjuntarán en el documento.
A continuación se muestran los elementos concernientes a este módulo:
2.4.3.1.
BinaryMutation (script)
Se implementa el método conocido como Binary Mutation (ó Mutación Binaria).
El procedimiento es el siguiente:
Se trata cada gen individualmente y se modifica de acuerdo a una probabilidad de Mutación asignada, si ésta es suficiente se procede a hacer el cambio,
en otro caso se deja el alelo asociado al gen intacto.
Retomando el caso en que se puede modificar el alelo del gen se verifica su
valor actual y ya que se maneja una representación Binaria su transformación
es muy simple: si se encuentra un 0, el alelo toma el valor 1 y viceversa.
2.4.3.2.
FloatPointMutation (script)
Se concreta el método conocido como Float Point Mutation (ó Mutación de Punto
Flotante).
El procedimiento es el siguiente:
Se trata cada gen individualmente y se modifica de acuerdo a una probabilidad de Mutación asignada, si ésta es suficiente se procede a hacer el cambio,
en otro caso se deja el alelo asociado al gen intacto.
Retomando el caso en que se puede modificar el alelo del gen se verifica los
lı́mites de la variable de decisión que está ligada a éste, ası́ como la precisión
decimal. Entonces se crea el nuevo número con la precisión decimal requerida y se sustituye por el anterior.
2.5.
SharingFunction (módulo)
En esta sección se almacenan las técnicas relativas al Sharing Function (ó Función de
Compartición).
El objetivo de estas técnicas se delega a un rol secundario pero aún ası́ muy importante y
UNAM
Facultad de Ciencias
38
Manual Técnico
consiste en realizar un filtrado más minucioso de los mejores Individuos y ası́ tomar a los
candidatos elegidos para dejar descendencia.
La operación es útil en casos en el que la calidad de los Individuos es muy similar y entonces se desea seleccionar a los que son superiores, sin embargo, es menester mencionar
que, en exceso, dicha selección parsimoniosa puede dar lugar a un efecto negativo del Selective Pressure (ó Presión Selectiva, véase Model/MOEA).
Esto provoca que, lejos de dar una Población de elementos óptimos, los Indviduos se queden estancados puesto que al tener todos cargas genéticas muy similares, existe una pobre
exploración genética en sus cromosomas y entonces no se llegará a una optimización de
funciones objetivo adecuada.
Es por ello que no todos los MOEAS (véase Model/MOEA) lo utilizan, sin embargo
se decidió implementar esta sección ya que extrapolando las circunstancias, en cualquier
momento se puede hacer uso de técnicas de esta ı́ndole.
Haciendo énfasis en la parte matemática, el Sharing Function funciona ası́:
Cada Individual (ó Individuo) tendrá asociado un Shared Fitness (ó Fitness Compartido) que fungirá como el Fitness original asignado a cada Individo y el cual será obtenido
de la siguiente manera:
𝑆ℎ𝑎𝑟𝑒𝑑𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) =
𝐹 𝑖𝑡𝑛𝑒𝑠𝑠(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
𝑁 𝑖𝑐ℎ𝑒𝐶𝑜𝑢𝑛𝑡(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜)
Para fines de implementación el Shared Fitness será colocado en la misma variable utilizada para almacenar el Fitness original, esto por cada Individuo.
El Niche Count es un valor que indica qué tan cercano en calidad se encuentra un Individuo con respecto de los demás. La forma de calcularlo es la siguiente:
∑︀𝑡𝑎𝑚𝑎˜𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´𝑜𝑛
𝑆𝐹 (𝐷(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜, 𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑗 ))
𝑁 𝑖𝑐ℎ𝑒𝐶𝑜𝑢𝑛𝑡(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜) = 𝑗=1
Donde 𝐷(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 , 𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑗 ) es la distancia que existe entre el Individuo i y el Individuo j; mientras que el SF es el Sharing Function.
Entonces el SF se define como:
⎧
𝐷(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 ,𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑗 ) 𝛼
) , 𝑠𝑖 𝐷 < 𝜎𝑠ℎ𝑎𝑟𝑒 .
⎨ 1−(
𝜎𝑠ℎ𝑎𝑟𝑒
𝑆𝐹 (𝐷(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 , 𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑗 )) =
⎩
0, 𝑒𝑛 𝑐𝑢𝑎𝑙𝑞𝑢𝑖𝑒𝑟 𝑜𝑡𝑟𝑜 𝑐𝑎𝑠𝑜.
Donde 𝛼 es una variable que casi siempre se asigna a 1 (aunque en este proyecto se le
da la libertad al usuario de seleccionar valores distintos) y 𝜎𝑠ℎ𝑎𝑟𝑒 marca el lı́mite en el
cual dos Individuos se consideran cercanos en calidad, es decir, viven en el mismo Niche.
Llegados a este punto, si bien la parte que se utilizará finalmente es el Shared Fitness,
sólo las técnicas concernientes a 𝐷(𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑖 , 𝐼𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑗 ) serán las que se implementen en esta sección, pues lo demás siempre se mantendrá estático.
Siendo más especı́ficos con base en lo anterior, existen dos tipos de funciones de Distancia:
UNAM
Facultad de Ciencias
Manual Técnico
39
De Similaridad Genotı́pica (ó Genotypic Similarity).
De Similaridad Fenotı́pica (ó Phenotypic Similarity).
La primera indica en pocas palabras que la comparación se hará usando únicamente caracterı́sticas relacionadas con el cromosoma, mientras que la segunda implicará la comparación de caracterı́sticas externas como las funciones objetivo evaluadas con las variables
de decisión de cada Individuo ó las variables de decisión por sı́ solas.
Eventualmente se desea que el usuario implemente sus propias funciones, por ello es que,
además de añadir el método en el listado localizado en Controller/XML/Features.xml,
deberá implementar las siguientes funciones:
calculate sigma share(population, sharing function parameters)
Realiza el cálculo del factor 𝜎𝑠ℎ𝑎𝑟𝑒 sobre el cual se hará el cuestionamiento de Individuos cercanos en calidad.
Es importante mencionar que la función debe regresar un escalar que representa
el lı́mite máximo para el cual dos Individuos se consideran en el mismo Niche.
Parameters
population (Instance) – La Población sobre la cual
se hará el cálculo correspondiente.
sharing function parameters (Dictionary)
– Un diccionario que puede contener opciones adicionales
para el cálculo de la distancia entre Individuos.
Returns Un valor escalar que representa el lı́mite de cercanı́a para
cualesquiera dos Individuos de una Población.
Return type Float
calculate distance(individual i, individual j, sharing function parameters)
Calcula la distancia de calidad que existe entre dos Individuos cualesquiera.
Dada la simpleza del método, se puede usar independientemente de las categorı́as
antes especificadas.
Es importante resaltar que la función debe regresar un escalar que aluda a la distancia entre los Individuos.
Parameters
individual i (Instance) – El Individuo para calcular distancia.
individual j (Instance) – El Individuo para calcular distancia.
UNAM
Facultad de Ciencias
40
Manual Técnico
sharing function parameters (Dictionary)
– Un diccionario que puede contener opciones adicionales
para el cálculo de la distancia entre Individuos.
Returns Un valor escalar que indica la distancia entre los Individuos.
Return type Float
A continuación se muestran las subcategorı́as correspondientes:
2.5.1.
GenotypicSimilarity (módulo)
La similaridad Genotı́pica (ó Genotypic Similarity), es una subcategorı́a que calcula las
distancias entre dos Individuos cualesquiera usando para ello caracterı́sticas Genotı́picas
de éstos, lo cual quiere decir que se emplearán rasgos meramente internos endémicos de
los Individuos.
Para fines del proyecto tı́picamente se utiliza el cromosoma y/o sus caracterı́sticas asociadas, no obstante siendo sensatos con el término, el cromosoma no es la única herramienta
que se puede usar sino cualquier rasgo interno.
Es necesario considerar que, por defecto las funciones antes mencionadas se encuentran
implementadas en cada uno de los elementos de este módulo, por ello es que primordialmente se mostrarán aquéllas que no se contemplen en el esquema original, es decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga información importante también se adjuntarán en el documento.
Ahora se muestran los elementos implementados para esta subcategorı́a:
2.5.1.1.
HammingDistance (script)
La Distancia de Hamming (ó Hamming Distance) es una implementación perteneciente a la subcategorı́a Genotypic Similarity (ó Similaridad Genotı́pica). Esta
consiste en comparar los alelos entre los cromosomas de los Individuos y devolver
un valor numérico que indica en cuántos alelos los cromosomas de los Individuos
resultaron tener valores diferentes.
Como consecuencia lógica, la magnitud de la Distancia de Hamming es inversamente proporcional a la calidad de los Individuos.
Es ampliamente usada para la Representación Cromosómica (véase Model/
ChromosomalRepresentation) de tipo Binario (ó Binary), aunque su uso no se limita sólo a esta codificación.
Con respecto del cálculo del 𝜎𝑠ℎ𝑎𝑟𝑒 , éste se hace tomando en cuenta el número
máximo permitido de genes diferentes entre dos cromosomas cualesquiera.
UNAM
Facultad de Ciencias
Manual Técnico
41
Dicha cantidad es deducida solicitándole al usuario únicamente el porcentaje máximo permitido, con base en éste se determina entonces el número en concreto.
2.5.2.
PhenotypicSimilarity (módulo)
La Similaridad Fenotı́pica (ó Phenotypic Similarity) es una subcategorı́a que calcula las
distancias entre cualesquiera dos Individuos usando caracterı́sticas concernientes al Fenotipo, es decir, rasgos exteriores de los Individuos.
Para fines relativos al proyecto, dichos atributos tradicionalmente no son otra cosa que las
funciones objetivo evaluadas de cada Individuo, usando para ello las variables de decisión
que cada uno lleva consigo.
Aún considerando lo anterior, siendo más generales, cualquier caracterı́stica externa que
se relacione con el Individuo puede ser utilizada.
Se hace mención en el hecho de que por defecto las funciones antes mencionadas se encuentran implementadas en cada uno de los elementos de este módulo, por ello es que
primordialmente se mostrarán aquéllas que no se contemplen en el esquema original, es
decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga información importante también se adjuntarán en el documento.
El presente módulo consta de los siguientes scripts:
2.5.2.1.
EuclideanDistance (script)
La Distancia Euclidiana (ó Euclidean Distance) es una implementación de cálculo
de distancia entre dos Individuos que pertenece a la subcategorı́a Phenotypic Similarity (ó Similaridad Fenotı́pica).
Esta versión está dirigida para las Funciones Objetivo (ó Objective Functions) que
poseen cada uno de los Individuos (ó Individuals) de una Población (ó Population).
Primero que nada para obtener el cálculo de 𝜎𝑠ℎ𝑎𝑟𝑒 la operación está regida por la
siguiente fórmula:
∑︀𝑛´
𝑢𝑚 𝑓 𝑢𝑛𝑐𝑖𝑜𝑛𝑒𝑠 𝑜𝑏𝑗𝑒𝑡𝑖𝑣𝑜
𝜎𝑠ℎ𝑎𝑟𝑒 =
𝑗=1
(𝑚𝑎𝑥(𝐹𝑗 )−𝑚𝑖𝑛(𝐹𝑗 ))
𝑡𝑎𝑚𝑎˜
𝑛𝑜 𝑝𝑜𝑏𝑙𝑎𝑐𝑖´
𝑜𝑛−1
Lo anterior significa que se van a obtener los valores máximo y mı́nimo de cada
función objetivo, se restan entre sı́ y al resultado anterior se le divide entre el tamaño de la Población menos uno; esto por cada generación.
La forma de hacer el cálculo de la distancia es la siguiente:
Supongamos que tenemos los vectores 𝑈 = (𝑢1 , 𝑢2 , ..., 𝑢𝑛 ) y 𝑉 = (𝑣1 , 𝑣2 , ..., 𝑣𝑛 ).
Entonces la Distancia Euclidiana se define como:
UNAM
Facultad de Ciencias
42
Manual Técnico
𝑑𝐸 (𝑈, 𝑉 ) =
√︀
(𝑣1 − 𝑢1 )2 + (𝑣2 − 𝑢2 )2 + ... + (𝑣𝑛 − 𝑢𝑛 )2
Para los fines que nos conciernen, los vectores 𝑈 𝑦 𝑉 serán las evaluaciones en las
funciones objetivos de cada Individuo participante.
Finalmente es menester mencionar que, aunque tradicionalmente esta técnica se usa
para Representaciones Cromosómicas (véase Model/ChromosomalRepresentation)
de tipo FloatPoint (ó Punto Flotante), en sentido estricto no se encuentra limitada
sólo a este tipo de codificación.
2.6.
MOEA (módulo)
En esta parte se encuentran desarrolladas todas las técnicas concernientes al uso de M.O.E.A.’s
(Multi-Objective Evolutionary Algorithms ó Algoritmos Evolutivos Multiobjetivo).
Un M.O.E.A. es la convergencia y culminación de todas las técnicas que se han implementado en la sección Model (ó Modelo) con la finalidad de ofrecer una solución óptima
ante un problema multiobjetivo mediante el uso de Algoritmos Evolutivos.
Primero, solucionar un problema multiobjetivo aterrizado en un lenguaje matemático
consiste en lo siguiente:
Tenemos un vector de funciones objetivo:
𝐹 (⃗𝑥) = [𝑓1 (⃗𝑥), 𝑓2 (⃗𝑥), ..., 𝑓𝑛 (⃗𝑥)]𝑇 ; 𝑐𝑜𝑛 𝑛 > 1.
Donde:
⃗𝑥 = [𝑥1 , 𝑥2 , ..., 𝑥𝑘 ]𝑇 ; 𝑘 > 1.
Representa al vector de variables de decisión que “alimenta” a cada función objetivo.
La meta es encontrar un vector especial de variables de decisión, denominado:
⃗ = [𝑥1 *, 𝑥2 *, ..., 𝑥𝑘 *]𝑇 ; 𝑘 > 1.
𝑥*
Tal que:
⃗ 6 𝑓𝑖 (⃗𝑥); 1 6 𝑖 6 𝑛; ∀𝑓 ∈ 𝐹 .
𝑓𝑖 (𝑥*)
Dicho de otra forma, se debe encontrar el vector de variables de decisión que minimize
todas y cada una de las funciones objetivo en existencia.
Adicionalmente, todo vector de variables de decisión debe estar sujeto a las restricciones:
ℎ𝑖 (⃗𝑥) = 0; 1 6 𝑖 6 𝑝 (𝑟𝑒𝑠𝑡𝑟𝑖𝑐𝑐𝑖𝑜𝑛𝑒𝑠 𝑑𝑒 𝑖𝑔𝑢𝑎𝑙𝑑𝑎𝑑).
𝑔𝑖 (⃗𝑥) 6 0; 1 6 𝑖 6 𝑚 (𝑟𝑒𝑠𝑡𝑟𝑖𝑐𝑐𝑖𝑜𝑛𝑒𝑠 𝑑𝑒 𝑑𝑒𝑠𝑖𝑔𝑢𝑎𝑙𝑑𝑎𝑑).
Las cuales para fines de este proyecto son aquéllas a las que se encuentran afianzadas
las variables de decisión (véase View/Main/DecisionVariable/VariableFrame.py).
UNAM
Facultad de Ciencias
Manual Técnico
43
Una definición adicional que sin lugar a dudas se verá utilizada es la de dominancia entre vectores de variables de decisión, para ello tomemos dos vectores 𝑈 = (𝑢1 , 𝑢2 , ..., 𝑢𝑘 )
y 𝑉 = (𝑣1 , 𝑣2 , ..., 𝑣𝑘 ), se dice que U domina a V ó V es dominada por U si:
∀𝑖 ∈ {1, ..., 𝑘} 𝑢𝑖 6 𝑣𝑖 ∧ ∃𝑖 ∈ {1, ..., 𝑘}; 𝑢𝑖 < 𝑣𝑖 .
Lo anterior significa que 𝑈 debe ser mejor que 𝑉 en cada uno de sus componentes para
garantizar la dominancia.
La simbologı́a que se suele usar para identificar este hecho es 𝑢 ≻ 𝑣.
Algo importante a mencionar es que en las definiciones se trata únicamente la minimización de funciones objetivo porque, en caso de querer la maximización, simplemente se
realiza la sustitución:
𝑓𝑖′ (⃗𝑥) = −𝑓𝑖 (⃗𝑥); 1 6 𝑖 6 𝑛, 𝑝𝑎𝑟𝑎 𝑎𝑙𝑔𝑢𝑛𝑎 𝑓 ∈ 𝐹.
Es decir, minimizando la función negativa se obtiene el máximo.
El proyecto ya contempla este tipo de casos (véase View/Main/ObjectiveFunction/
FunctionFrame).
Como dato adicional, es menester añadir que, en un escenario tı́pico muchas de las funciones objetivo entrarán en conflicto, esto quiere decir que en algunas se buscará el mı́nimo mientras que en otras, el máximo.
Con base en lo anterior, el funcionamiento de un M.O.E.A. (resolver un problema de
optimización multiobjetivo usando algoritmos genéticos) generalmente se lleva a cabo
de la siguiente manera:
1. Usando una Representación Cromosómica (véase Model/ChromosomalRepresentation),
crear la Población Padre y evaluar cada uno de los Individuos respecto a las funciones objetivo.
2. Asignar un Ranking a los Individuos de la Población Padre (véase Model/
Community/Community.py).
3. Con base en el Ranking, asignar el Fitness a cada uno de los Individuos (véase Model/Fitness).
4. Tomando en cuenta el Fitness, aplicar las operaciones de Selección, Cruza y Mutación con la finalidad de crear una Población Hija (véase Model/GeneticOperator).
Todos los métodos empleados en este punto deben funcionar acorde a la Representación Cromosómica del punto 1.
5. (Opcional) Utilizar el Fitness Compartido para aplicar una elección más minuciosa
de los mejores Individuos en la Población Hija (véase Model/SharingFunction).
6. Designar a la Población Hija como la nueva Población Padre.
UNAM
Facultad de Ciencias
44
Manual Técnico
7. Repetir los pasos 2 a 6 hasta haber alcanzado un número lı́mite de generaciones
(iteraciones).
A grandes rasgos la diferencia entre un M.O.E.A. y otro es la Presión Selectiva (ó Selective Pressure) que se aplica durante el procedimiento, para fines de este proyecto se trata
de la tolerancia para seleccionar a los Individuos de calidad media o baja frente a los mejores.
Una baja Presión Selectiva permite elegir Individuos no tan aptos; el caso es análogo para
una alta Presión Selectiva.
Es por eso que se han tomado los M.O.E.A.’s más representativos, pues se desea ilustrar
la consistencia y eficacia de dichos métodos en general a través de variadas circunstancias.
Tomando en cuenta lo anterior, la finalidad es que el usuario desarrolle sus propios M.O.E.A.’s,
por ello es que, además de añadir el método en el listado localizado en Controller/
XML/Features.xml, deberá implementar la siguiente función:
execute moea(execution task count, generations queue, generations, population size, vector functions, vector variables, available expressions, number of decimals, community instance,
algorithm parameters, representation instance, representation parameters, fitness instance, fitness parameters, sharing function instance, sharing function parameters, selection instance, selection parameters, crossover instance, crossover parameters, mutation instance,mutation parameters)
Devuelve la solución óptima para un conjunto de funciones objetivo vector functions
ligadas a un conjunto de restricciones vector variables tomando como fundamento
el uso de algoritmos genéticos.
El método se apoya de las caracterı́sticas subyacentes; en lo concerniente a la devolución de resultados se recomienda ver el método get results localizado en Model/Community/Community.py.
Parameters
execute task count (Integer) – El identificador
que se utiliza para orquestar el orden en que el método
será ejecutado con respecto de los demás (véase View/Additional/
ResultsGrapher/ResultsGrapherTopLevel.py).
generations queue (Instance) – Una estructura
auxiliar (Queue o Cola) que es necesaria para indicar a
la interfaz gráfica el progreso del método (véase Controller/Controller.py, View/MainWindow.py, View/Additional/
ResultsGrapher/ResultsGrapherTopLevel.py) .
UNAM
Facultad de Ciencias
Manual Técnico
45
generations (Integer) – El número de generaciones (iteraciones) que se emplearán para la ejecución del
método.
population size (Integer) – El tamaño de la Población (número de Individuos).
vector functions (List) – El vector con las funciones objetivo insertadas por el usuario.
vector variables (List) – El vector con las variables de decisión ingresadas por el usuario.
available expressions (Dictionary) – Un diccionario con expresiones creadas para que la evaluación de
funciones objetivo sea mucho más sencilla (véase Controller/Verifier.py, Controller/XML/PythonExpressions.xml,
View/Additional/MenuInternalOption/InternalOptionTab/
PythonExpressionFrame.py).
number of decimals (Integer) – La precisión decimal (número de decimales) que tendrán las soluciones
inherentes a los Individuos.
community instance (Instance) – Una instancia
de la clase Community (véase Controller/Verifier.py, Model/Community/Community.py).
algorithm parameters (Instance) – Un diccionario para añadir opciones adicionales para los M.O.E.A.’s.
representation instance (Instance) – Una
instancia de la técnica de Representación Cromosómica
(ó Chromosomal Representation) usada por el usuario
(véase Controller/Verifier.py, Model/
ChromosomalRepresentation).
representation parameters (Dictionary) –
Un diccionario con opciones adicionales a la técnica de
Representación Cromosómica usada.
fitness instance (Instance) – Una instancia de
la técnica de Fitness seleccionada por el usuario (véase
Controller/Verifier.py, Model/Fitness).
fitness parameters (Dictionary) – Un diccionario con parámetros adicionales para la técnica de Fitness
UNAM
Facultad de Ciencias
46
Manual Técnico
utilizada.
sharing function instance (Instance) – Una
instancia de la técnica de Sharing Function (ó Función
de Compartición) usada por el usuario (véase Controller/Verifier.py, Model/SharingFunction).
sharing function parameters (Dictionary) –
Un diccionario con opciones adicionales para la técnica de
Sharing Function seleccionada.
selection instance (Instance) – Una instancia
de la técnica de Selection (ó Selección) seleccionada por el
usuario (véase Controller/Verifier.py, Model/Operator/
Selection).
selection parameters (Dictionary) – Un diccionario con opciones adicionales para la técnica de Selection empleada.
crossover instance (Instance) – Una instancia
de la técnica de Crossover (ó Cruza) seleccionada por el
usuario (véase Controller/Verifier.py, Model/Operator/
Crossover).
crossover parameters (Dictionary) – Un diccionario con parámetros adicionales para la técnica de Cruza solicitada.
mutation instance (Instance) – Una instancia
de la técnica de Mutation (ó Mutación) empleada por el
usuario (véase Controller/Verifier.py, Model/Operator/
Mutation).
mutation parameters – Un diccionario con parámetros adicionales para la técnica de Mutación usada.
Returns El diccionario que resulta de aplicar el método get results
que se encuentra en Model/Community/Community.py.
Return type Dictionary
Se debe tomar en consideración que por defecto las funciones antes mencionadas se encuentran implementadas en cada uno de los elementos de este módulo, por ello es que
primordialmente se mostrarán aquéllas que no se contemplen en el esquema original, es
decir, funciones auxiliares.
En el caso muy especı́fico en el que alguna de las funciones obligatorias contenga inforUNAM
Facultad de Ciencias
Manual Técnico
47
mación importante también se adjuntarán en el documento.
A continuación se muestra la lista de los M.O.E.A.’s implementados:
2.6.1.
VEGA (script)
Se implementa la técnica M.O.E.A conocida como V.E.G.A. (Vector Evaluated Genetic
Algorithm ó Algoritmo Genético de Vectores Evaluados).
La forma de proceder del algoritmo es la siguiente:
1. Se crea la Población Padre (de tamaño 𝑛).
2. Tomando en cuenta las 𝑘 funciones objetivo y la Población Padre, se crean 𝑘 subpoblaciones de tamaño 𝑛/𝑘 cada una, si este número llega a ser irracional se pueden hacer ajustes con respecto de la distribución de los Individuos.
3. Por cada subpoblación, se aplica la técnica de Selección y obtienen los 𝑛/𝑘 Individuos, terminado esto se deben unificar todos los seleccionados de nuevo en una
súper Población.
4. Con la súper Población del paso 3, se crea a la Población Hija, la cual pasará a convertirse en la la nueva Población Padre.
5. Se repiten los pasos 2 a 4 hasta haber alcanzado el número de generaciones (iteraciones) lı́mite.
Como se puede apreciar es una implementación muy sencilla de optimización multiobjetivo, sin embargo el inconveniente que tiene es la fácil pérdida de material genético valioso.
Lo anterior significa que un Individuo que en una generación previa era el mejor para
una función objetivo 𝑖 al momento de ser separado y seleccionado en una subpoblación 𝑗
(y por ende analizado bajo la función objetivo 𝑗) puede ser muy malo en calidad y por
tanto no ser seleccionado; perdiéndose la ganancia genética hasta el momento obtenida
para la función objetivo 𝑖, donde 𝑖 ̸= 𝑗.
Por ello es que se puede decir que V.E.G.A. genera soluciones promedio que destacan
con una calidad media para todas las funciones objetivo.
Finalmente hay que comentar que para este algoritmo no se requiere aplicar un Ranking
especı́fico, no obstante se ha decidido utilizar el de Fonseca & Flemming (véase Model/Community/Community.py) pues es el más sencillo de implementar.
create subpopulations(comunidad, main population)
Método que divide a la Población principal en subpoblaciones de acuerdo al número de funciones objetivo.
Parameters
UNAM
Facultad de Ciencias
48
Manual Técnico
comunidad (Instance) – Una instancia de Community para poder crear poblaciones..
main population (Instance) – La Población que
será dividida.
Returns Una lista con las subpoblaciones (de tipo Population).
Return type List
2.6.2.
SPEAII (script)
Se desarrolla la implementación de la técnica M.O.E.A. conocida como S.P.E.A. II (Strength
Pareto Evolutionary Algorithm ó Algoritmo Evolutivo de Fuerza de Pareto).
El funcionamiento del algoritmo es el siguiente:
1. Se inicializa una Población llamada P y un conjunto inicialmente vacı́o llamado E
(E albergará Individuos también); ambos son de tamaño n.
2. Se asigna el Fitness a los Individuos de P y E (para ello se evalúan las funciones
objetivo de los Individuos de ambos conjuntos y se asigna el Ranking Zitzler &
Thiele).
3. A continuación se funden P y E en una súper Población (denominado S también
señalado en el algoritmo como Mating Pool, de tamaño n).Para ello primero se
añaden los Individuos NO DOMINADOS de P en S y posteriormente los NO DOMINADOS de E en S.
Aquı́ se distinguen dos casos:
a) Si llegasen a faltar Individuos se añaden al azar Individuos DOMINADOS de
P en S hasta completar la demanda.
b) Si después de la fusión el número de Individuos supera a n, entonces se hace
un truncamiento en S hasta ajustar su tamaño a n.
4. S será la nueva E, además se crea la Población Hija de la recién creada E (E-Child).
5. E-Child será la nueva P.
6. Se repiten los pasos 2 a 5 hasta que se haya alcanzado el lı́mite de generaciones
(iteraciones).
Finalmente lo que se regresa es E, ya que ahı́ es donde se han almacenado los mejores Individuos de todas las generaciones.
La caracterı́stica de este algoritmo es que tiene una Presión Selectiva alta ya que se da
prioridad a los Individuos no dominados (de ahı́ el nombre de Fuerza de Pareto ó los
más fuertes con respecto al principio de Pareto), y el hecho de mezclar a E y P en
UNAM
Facultad de Ciencias
Manual Técnico
49
una súper Población garantiza la conservación de los mejores Individuos sin importar
el transcurso de las generaciones (a eso se le conoce como Elitismo), pero también da
una tolerancia, aunque mı́nima, a los Individuos de menor calidad como en el punto 3.
Además al momento de actualizar S a E y E-Child a P se tiene una especie de seguro de
vida, es decir, si en algún momento la Población E-Child llegara a tener una calidad baja
se tiene el respaldo de E para una generación posterior para formar S.
Se debe tener en cuenta que el algoritmo originalmente no contempla ni una súper Población S ni E-Child sino que en los pasos 3 y 4 se utiliza solamente E para referirse tanto a
E-child como a S, sin embargo para no confundir al usuario en la funcionalidad del método se decidió colocar contenedores extra para poder diferenciar más precisamente a los
elementos involucrados.
Algo muy importante a mencionar es que en el paso 1 y al momento de crear la Población E-Child es necesario evaluar las funciones objetivo, asignar un Ranking y posteriormente un Fitness para que se puedan aplicar los operadores geneticos (véase Model/GeneticOperator), para este caso el Ranking es estrictamente el de Zitzler & Thiele;
la descripción completa de éste se encuentra en Model/Community/Community.py.
2.6.3.
MOGA (script)
Se desarrolla la técnica M.O.E.A. que lleva por nombre M.O.G.A. (Multi Objective Genetic Algorithm ó Algoritmo Genético Multi Objetivo).
Su funcionamiento es el siguiente:
1. Se crea la Población Padre, se evalúan las funciones objetivo de sus correspondientes Individuos.
2. Se asigna a los Individuos un Ranking (Fonseca & Flemming) y posteriormente se
calcula el Niche Count de la Población Padre.
3. Tomando en cuenta los valores del punto 2 se obtiene el Fitness para cada Individuo y posteriormente su Shared Fitness.
4. Se aplica el operador de selección sobre la Población Padre para determinar los
elegidos para dejar descendencia.
5. Se crea la Población Hija, se evalúan las funciones objetivo de sus correspondientes
Individuos.
6. Se asigna a los Individuos un Ranking (Fonseca & Flemming) y posteriormente se
calcula el Niche Count de la Población Hija.
7. Tomando en cuenta los valores del punto 6 se obtiene el Fitness para cada Individuo y posteriormente su Shared Fitness.
8. La Población Hija pasará a ser la nueva Población Padre.
UNAM
Facultad de Ciencias
50
Manual Técnico
9. Se repiten los pasos 4 a 8 hasta que se haya alcanzado el número lı́mite de generaciones (iteraciones).
Como se puede apreciar, la implementación de este algoritmo es muy sencilla, además
se rige casi en su totalidad por el Shared Fitness (ó Fitness Compartido), por lo que
la Presión Selectiva (ó Selective Pressure) incluida dependerá en gran medida de la
función de Distancia que se utilice, ası́ como de la magnitud indicada por el usuario.
Finalmente es menester mencionar que para esta implementación el Ranking utilizado debe ser estrictamente el de Fonseca & Flemming (véase Model/Community/Community.py).
2.6.4.
NSGAII (script)
En esta parte se lleva a cabo la implementación del M.O.E.A. denominado N.S.G.A. II
(Non-dominated Sorting Genetic Algorithm ó Algoritmo Genético de Ordenamiento
No Dominado).
La forma de proceder del método es la siguiente:
1. Se crea una Población Padre (de tamaño n), a la cual se le evalúan las funciones
objetivo de sus Individuos, se les asigna un Ranking (Goldberg) y posteriormente
se les otorga un Fitness.
2. Con base en la Población Padre se aplica el operador de Selección para elegir a los
Individuos que serán aptos para reproducirse.
3. Usando a los elementos del punto 2, se crea una Población Hija (de tamaño n).
4. Se crea una súper Población (denominado S, de tamaño 2n) que albergará todos
los Individuos tanto de la Población Padre como Hija; a S se le evalúan las funciones objetivo de sus Individuos, se les asigna un Ranking (Goldberg) y posteriormente se les otorga un Fitness.
5. La súper Población S se divide en subcategorı́as de acuerdo a los niveles de dominancia que existan, es decir, existirá la categorı́a de dominancia 0, la cual almacena
Individuos que tengan una dominancia de 0 Individuos (ningún Individuo los domina), existirá la categorı́a de dominancia 1 con el significado análogo y ası́ sucesivamente hasta haber cubierto todos los niveles de dominancia existentes.
6. Se construye la nueva Población Padre, pare ello constará de los Individuos de S
donde la prioridad será el nivel de dominancia, es decir, primero se añaden los elementos del nivel 0,luego los del nivel 1 y ası́ en lo sucesivo hasta haber adquirido n
elementos. Se debe aclarar que la adquisición de Individuos por nivel debe ser total,
esto significa que no se pueden dejar Individuos sueltos para el mismo nivel de dominancia.
Supongamos que a un nivel k existen tantos Individuos que su presunta adquisición
supera el tamaño n, en este caso se debe hacer lo siguiente:
UNAM
Facultad de Ciencias
Manual Técnico
51
a) Se crea una Población provisional (Prov) con los Individuos del nivel k, se
evalúan las funciones objetivo a cada uno de sus Individuos, se les asigna un
Ranking (Goldberg) y posteriormente se les asigna el Fitness.
Con los valores anteriores se calcula el Niche Count (véase Model/
SharingFunction) de los Individuos; una vez hecho ésto se seleccionan
desde Prov los Individuos faltantes con los mayores Niche Count, esto hasta completar el tamaño n de la nueva Población Padre.
7. Al haber conformado la nueva Población Padre, se evalúan las funciones objetivo
de sus Individuos, se les asigna el Ranking correspondiente (Goldberg) y se les
atribuye su Fitness.
8. Se repiten los pasos 2 a 7 hasta haber alcanzado el lı́mite de generaciones (iteraciones).
Como su nombre lo indica, la caracterı́stica de este algoritmo es la clasificación de los Individuos en niveles para su posterior selección.
Esto al principio propicia una Presión Selectiva moderada por la ausencia de elementos con dominancia baja que suele existir en las primeras generaciones, sin embargo
en iteraciones posteriores se agudiza la Presión Selectiva ya que eventualmente la mayorı́a de los Individuos serán alojados en las primeras categorı́as de dominancia, cubriendo casi instantáneamente la demanda de Individuos necesaria en el paso 6, por lo
que las categorı́as posteriores serán cada vez menos necesarias con el paso de los ciclos.
Por otra parte la fusión de las Poblaciones en S garantiza que siempre se conserven a los
mejores Individuos independientemente de la generación transcurrida, a eso se le llama
Elitismo.
Por cierto que en el algoritmo original no existe un nombre oficial para S sino más bien se
señala como una estructura genérica, sin embargo se le ha formalizado con un identificador para guiar apropiadamente al usuario en el flujo del algoritmo.
Para finalizar se señala que el uso del ranking de Goldberg (véase Model/Community/
Community.py) es indispensable.
3.
View (sección)
La capa View (ó Vista) contiene todos los elementos que serán alusivos a la interfaz gráfica. De acuerdo al modelo MVC (Model-View-Controller), opera exclusivamente con la
capa Controller (ó Controlador).
A continuación se muestran los elementos que conforman esta sección.
UNAM
Facultad de Ciencias
52
3.1.
Manual Técnico
MainWindow (clase)
Mezcla todas las estructuras gráficas que forman parte de la sección View (ó vista).
Se trata de una Ventana que contendrá todas las opciones necesarias para que el
usuario pueda ejecutar a voluntad M.O.E.A.’s (Multi Objective Evolutionary Algorithm ó Algoritmo Evolutivo Multi Objetivo)
El flujo que se suele seguir es el siguiente:
El usuario ingresa las caracterı́sticas que desea que contenga el M.O.E.A. que
será ejecutado.
Posteriormente el Controller (ó Controlador, véase Controller/Controller.py)
verifica la consistencia de los datos anteriores para que no haya conflicto en
el lado del Model (ó Modelo).
Si no existe problema alguno se prosigue con el proceso, en otro caso se arroja un mensaje de error.
Siguiendo con el flujo normal se ejecutará una instancia del M.O.E.A. solicitado en la capa de Model (ó Modelo), la cual tendrá una ventana asociada en
View (ó Vista) que indicará el progreso del primero.
Cuando una instancia termine de ejecutarse, la ventana del progreso desaparece y en su lugar se muestra otra conteniendo los resultados del M.O.E.A.
(véase View/Additional/ResultsGrapher/ResultsGrapherToplevel.py).
Es importante mencionar que esta clase y el proyecto en general están diseñados
para que se puedan crear varias instancias simultáneamente, con ello se espera
aprovechar al máximo los recursos computacionales en los que el proyecto fuera
a ejecutarse.
Returns Tkinter.Frame
Return type Instance
change frame(current frame name)
Note: Este método es privado.
Hace el cambio en la Ventana Principal ocultando un Frame y mostrando
otro.
Parameters
current frame name (Tkinter.Frame) – El
Frame que se va a mostrar en la Ventana Principal.
UNAM
Facultad de Ciencias
Manual Técnico
53
check queues()
Note: Este método es privado.
Una vez iniciado un proceso que ejecuta un M.O.E.A., este método revisa
periódicamente las colas (Queues) sobre las cuales los procesos escribirán
todo tipo de información pertinente.
get information()
Note: Este método es privado.
Método que obtiene los datos ingresados por el usuario de cada uno de los
Frames asociados a esta Ventana Principal.
Returns Un diccionario con toda las preferencias del usuario
recolectadas para cada uno de los Frames disponibles.
Return type Dictionary
init procedure(event)
Note: Este método es privado.
Inicia el procedimiento para ejecutar un M.O.E.A.
Los pasos que se realizan son:
Recolecta las preferencias ingresadas por el usuario en los Frames que
conforman la Ventana Principal.
Se sanitizan dichos datos con ayuda del Controller.
En caso de no haber problemas con la sanitización, se ejecuta el proceso alojándolo en un hilo (Thread) para que permita seguir teniendo
acceso a la Ventana Principal; por el contrario si hubo alguna falla regresa un mensaje de error.
Gracias a este método el proyecto entero tiene la caracterı́stica de ser MultiHilo (ó Multi-Threading), es decir, se pueden ejecutar varios procedimientos de manera independiente.
Parameters
UNAM
Facultad de Ciencias
54
Manual Técnico
event (String) – El evento del elemento gráfico
que activa esta función.
initialize frames()
Note: Este método es privado.
Método que inicializa los Frames que se colocarán en la Ventana Principal
como opciones.
load images()
Note: Este método es privado.
Carga las imágenes que se encuentran en el directorio View/Images para que
puedan ser usadas por los Frames.
Es importante recalcar que el método sólo carga imágenee .gif ya que son
la extensión más estable para que se muestren las imágenes en la interfaz
gráfica.
Returns Un diccionario con todas las imágenes cargadas.
Return type Dictionary
obtain results(execution task count, generations queue, gathered information, sanitized information)
Note: Este método es privado.
Ejecuta un M.O.E.A..
Esta es la función que se coloca en un hilo para ser llevada a cabo de manera
independiente con la finalidad de dejar libre la Ventana Principal y de manera
secundaria ejecutar varios procedimientos simultáneamente.
Parameters
execution task count (Integer) – El número de proceso actual.
generations queue (Instance) – Una referencia a una cola (Queue) donde los procesos escribirán su avance en cuanto a las generaciones transcurridas.
UNAM
Facultad de Ciencias
Manual Técnico
55
gathered information (Dictionary) – La
información que el usuario ingresó al momento de
iniciar el proceso actual.
sanitized information (Dictionary) –
La información anterior sanitizada.
restore settings(event)
Note: Este método es privado.
Limpia y deja por defecto los valores estándar del Frame mostrado actualmente en la Ventana Principal.
El método no aplica para regresar a M.O.P.’s (Multi Objective Problems)
cargados anteriormente.
Parameters
event (String) – El evento del elemento gráfico
que acciona esta función.
update frame(event)
Note: Este método es privado.
Muestra en la Ventana Principal el Frame actual.
Parameters
event (String) – El evento del elemento gráfico
que activa la función.
load mop example(elements)
Carga el M.O.P (Multi Objective Problem) seleccionado a los Frames correspondientes (Objective Functions y Decision Variables).
Parameters
elements (Array) – Un arreglo que contiene dos
elementos, el primero son las funciones objetivo precargadas mientras que el segundo son las variables
de decisión también precargadas. Ambas provienen del menú secundario (véase View/Additional/
MenuInternalOption/InternalOptionTab/
UNAM
Facultad de Ciencias
56
Manual Técnico
MOPExampleFrame.py, Controller/XML/
MOPExamples.xml).
resource path(relative path)
Esta función se utiliza para poder crear ejecutables apropiadamente.
A grandes rasgos el ejecutable se empaqueta en un directorio llamado MEIPASS,
entonces aquı́ se implementa la búsqueda de dicho archivo devolviendo un
path (ruta).
Returns La ruta del directorio MEIPASS.
Return type String
run()
Lanza la Ventana Principal.
3.2.
Main (módulo)
Contiene todos los elementos gráficos para que el usuario pueda configurar los atributos
que intervienen en la ejecución de un M.O.E.A.
A continuación se colocan todos los elementos que constituen el módulo en cuestión:
3.2.1.
Home (módulo)
Contiene toda la información posible para poder describir tanto los elementos que conforman el programa como su correcto uso.
Los elementos que constituyen a este módulo son:
3.2.1.1.
HomeFrame (clase)
Unifica dos elementos: Canvas e IntroductionFrame.
La razón de haber hecho esto es que, cuando se añaden demasiados elementos al
IntroductionFrame, se tiene que agregar una barra de desplazamiento para poder
acceder a los que se encuentran hasta abajo.
Dentro del ambiente de Tkinter, el elemento más sencillo para lograr esto es un
Canvas, por ello se anida el IntroductionFrame al Canvas.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
UNAM
Facultad de Ciencias
Manual Técnico
57
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
update scrollbar(event=None)
Note: Este método es privado.
Actualiza la barra de desplazamiento de acuerdo al número de elementos
existentes en el Frame, esto para poder hacer un recorrido apropiado de la
barra.
Parameters
event (String) – Elemento que ejecutó esta función.
move to section(y coordinate)
Mueve la barra de desplazamiento (y por ende el contenido) con base en la
coordenada (en Y) que se le pase como parámetro.
Parameters
y coordinate – Coordenada que se necesita para
hace el desplazamiento. Oscila entre 0 y 1.
restore settings()
Restaura la configuración del Frame a la que tenı́a por defecto.
La clase actual se apoya del elemento mostrado a continuación:
3.2.1.1.1.
IntroductionFrame (clase)
Contiene información básica y concisa sobre el producto de software, la cual es organizada y mostrada de acuerdo al número de secciones existentes en éste.
De manera secundaria proporciona la infraestructura para poder darle al usuario
un desplazamiento más rápido entre dichas secciones.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
UNAM
Facultad de Ciencias
58
Manual Técnico
canvas function (Instance) – Una función alusiva
al funcionamiento del Canvas.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame.
Returns Tkinter.Frame
Return type Instance
go to selected section(event)
Note: Este método es privado.
Con base en la liga elegida por el usuario, realiza el desplazamiento hacia la
sección correspondiente.
Parameters
event (String) – Elemento que ejecutó esta función.
3.2.2.
DecisionVariable (módulo)
Proporciona los elementos gráficos para que el usuario pueda insertar, modificar y eliminar variables de decisión con sus respectivos rangos.
Los elementos que constituyen al módulo son:
3.2.2.1.
DecisionVariableFrame (clase)
Realiza la fusión de Canvas y VariableFrame, debido a que, cuando se agregan numerosas variables al VariableFrame, se debe insertar una barra de desplazamiento
para poder acceder a aquéllos que se encuentren hasta abajo.
Dentro del ambiente de Tkinter, el elemento más sencillo para lograr este efecto
es un Canvas, por ello se anida el VariableFrame al Canvas.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
UNAM
Facultad de Ciencias
Manual Técnico
59
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
activate scroll(event)
Note: Este método es privado.
Actualiza la barra de desplazamiento y con base en esta acción la activa o
desactiva.
Parameters
event (String) – Elemento que ejecutó esta función.
update scrollbar(event=None)
Note: Este método es privado.
Actualiza la barra de desplazamiento de acuerdo al número de elementos
existentes en el Frame, esto para poder hacer un recorrido apropiado de la
barra.
Parameters
event (String) – Elemento que ejecutó esta función.
get information()
Regresa la información recabada en el Frame.
Returns
Return type Dictionary
insert mop example(variables)
Inserta un M.O.P (Multi Objective Problem ó Problema Multi Objetivo).
En este caso significa que se insertarán las variables con sus respectivos rangos en el Frame para poder hacer pruebas rápidas en el programa, habiendo
antes limpiado por completo el contenido del Frame.
(véase Controller/XML/MOPExample.xml)
UNAM
Facultad de Ciencias
60
Manual Técnico
(véase View/Additional/MenuInternalOption/InternalOptionFrame.py).
Parameters
functions (List) – Lista de variables para ser
insertadas en el Frame.
restore settings()
Restaura el contenido del Frame, en este caso significa que se eliminará todo
lo que esté en éste y se dejará una casilla vacı́a libre.
La clase actual se basa en el siguiente elemento:
3.2.2.1.1.
VariableFrame (clase)
Proporciona bases gráficas para que el usuario pueda insertar variables de decisión,
ası́ como información relativa a éstas.
En términos generales, el usuario insertará casillas para ingresar variables de decisión, indicando también el valor mı́nimo y máximo que podrán tener.
Es importante comentar que todas las variables de decisión deben contener rangos
finitos, es decir, no se contemplan valores infinitos, aunque algunos M.O.P.’s (Multi
Objective Problems ó Problemas Multi Objetivo) manejan este tipo de rangos.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
add variable(event)
Note: Este método es privado.
Agrega una casilla al Frame.
Esta función se usa si fue ejecutada por un evento.
Parameters
UNAM
Facultad de Ciencias
Manual Técnico
61
event (String) – Identificador del elemento
gráfico que activó la función.
delete single variable(event)
Note: Este método es privado.
Elimina una casilla y todos los elementos gráficos que la acompañan.
También elimina todo rastro que se encuentre en las estructuras lógicas.
Parameters
event (String) – Identificador del elemento
gráfico que activó la función.
grid widgets()
Note: Este método es privado.
Coloca elementos en el Frame.
get current elements()
Regresa el número actual de casillas en el Frame.
Returns Cantidad de elementos en la estructura rows, donde se
guardan las casillas (Entries).
Return type Integer
get information()
Toma la información del Frame y regresa las variables con sus rangos que
el usuario ingresó.
Returns Un diccionario que contiene una lista con las variables
(y rangos) escritas.
Return type Dictionary
insert mop example(variables)
Inserta un M.O.P (Multi Objective Problem) que no es más que un conjunto de variables con sus rangos para que se pueda hacer más rápidamente una
prueba.
Previo a ésto se limpia el Frame para insertar únicamente el M.O.P.
(véase Controller/XML/MOPExample.xml)
(véase View/Additional/MenuInternalOption/InternalOptionFrame.py).
UNAM
Facultad de Ciencias
62
Manual Técnico
Parameters
functions (List) – Conjunto de variables para
insertar en el Frame.
insert variable(variable=None)
Coloca en el Frame una colección de elementos:
[casilla para insertar variable ,casilla de rango minimo, casilla de rango máximo, botón para eliminar]
Si el parámetro function es None, se añade la casilla vacı́a, de lo contrario
se agrega ésta con la variable y sus rangos.
Parameters
function (String) – Una terna (nombre de la
variable, rango máximo, rango mı́nimo) para ser insertada en las casillas correspondientes.
restore settings()
Restaura el contenido del Frame a sus valores por defecto.
Esto significa que borrará cualquier contenido que se encuentre en existencia y dejará una casilla vacı́a.
3.2.3.
ObjectiveFunction (módulo)
Proporciona los elementos gráficos para que el usuario pueda insertar, modificar y eliminar funciones objetivo.
Sus elementos que lo conforman son:
3.2.3.1.
ObjectiveFunctionFrame (clase)
Unifica dos elementos: Canvas y FunctionFrame.
La razón de haber hecho esto es que, cuando se agregan muchas funciones al FunctionFrame, se tiene que agregar una barra de desplazamiento para poder acceder a
los que se encuentran hasta abajo.
Dentro del ambiente de Tkinter, el elemento más sencillo para lograr esto es un
Canvas, por ello se anida el FunctionFrame al Canvas.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
UNAM
Facultad de Ciencias
Manual Técnico
63
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
activate scroll(event)
Note: Este método es privado.
Actualiza la barra de desplazamiento y con base en esta acción la activa o
desactiva.
Parameters
event (String) – Elemento que ejecutó esta función.
update scrollbar(event=None)
Note: Este método es privado.
Actualiza la barra de desplazamiento de acuerdo al número de elementos
existentes en el Frame, esto para poder hacer un recorrido apropiado de la
barra.
Parameters
event (String) – Elemento que ejecutó esta función.
get information()
Regresa la información recabada en el Frame.
Returns Un diccionario que contiene una lista con las funciones
escritas.
Return type Dictionary
insert mop example(functions)
Inserta un M.O.P (Multi Objective Problem).
En este caso significa que se insertarán funciones para poder hacer pruebas
rápidas en el programa.
UNAM
Facultad de Ciencias
64
Manual Técnico
(véase Controller/XML/MOPExample.xml)
(véase View/Additional/MenuInternalOption/InternalOptionFrame.py).
Parameters
functions (List) – Lista de funciones para ser
insertadas en el Frame.
restore settings()
Restaura el contenido del Frame, en este caso significa que se eliminará todo
lo que esté en éste y se dejará una casilla vacı́a libre.
La clase actual toma como fundamento lo siguiente:
3.2.3.1.1.
FunctionFrame (clase)
Esta clase proporciona una base gráfica para que el usuario pueda agregar tantas
functiones objetivo como desee.
A grandes rasgos el usuario podrá agregar casillas donde se colocarán las funciones
objetivo, esto utilizando un botón.
De igual manera, las casillas pueden ser eliminadas usando un ı́cono que estará cerca de cada una de éstas.
Importante es mencionar que las funciones deben estar escritas en sintaxis de Python.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
add function(event)
Note: Este método es privado.
Agrega una casilla al Frame.
Esta función se usa si fue ejecutada por un evento.
Parameters
UNAM
Facultad de Ciencias
Manual Técnico
65
event (String) – Identificador del elemento
gráfico que activó la función.
delete single function(event)
Note: Este método es privado.
Elimina una casilla y todos los elementos gráficos que la acompañan.
También elimina todo rastro que se encuentre en las estructuras lógicas.
Parameters
event (String) – Identificador del elemento
gráfico que activó la función.
grid widgets()
Note: Este método es privado.
Coloca elementos en el Frame.
get current elements()
Regresa el número actual de casillas en el Frame.
Returns Cantidad de elementos en la estructura rows, donde se
guardan las casillas (Entries).
Return type Integer
get information()
Toma la información del Frame y regresa las funciones objectivo que el usuario insertó.
Returns Un diccionario que contiene una lista con las funciones
escritas.
Return type Dictionary
insert function(function=None)
Coloca en el Frame una colección de elementos:
[casilla para insertar funcion, opción de maximizar, opción de minimizar,
botón para eliminar]
Si el parámetro function es None, se agrega la casilla vacı́a, de lo contrario
se añade ésta con la función.
Parameters
UNAM
Facultad de Ciencias
66
Manual Técnico
function (String) – Una función para ser insertada en el primer elemento de la colección.
insert mop example(functions)
Inserta un M.O.P (Multi Objective Problem) que no es más que un conjunto
de funciones para que se pueda hacer más rápidamente una prueba.
Previo a ésto se limpia el Frame para insertar únicamente el M.O.P.
(véase Controller/XML/MOPExample.xml)
(véase View/Additional/MenuInternalOption/InternalOptionFrame.py).
Parameters
functions (List) – Conjunto de funciones para
insertar en el Frame.
restore settings()
Restaura el contenido del Frame a sus valores por defecto.
Esto significa que borrará cualquier contenido que se encuentre en existencia y dejará una casilla vacı́a.
3.2.4.
Population (módulo)
Proporciona las estructuras gráficas para que el usuario pueda configurar atributos de la
Población.
Los elementos que conforman al módulo son los siguientes:
3.2.4.1.
PopulationFrame (clase)
Unifica y mantiene un control sobre las clases PopulaceFrame y FitnessFrame, esto
con el fin de poder colocar los elementos apropiadamente y agilizar el intercambio
de información con el usuario.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
UNAM
Facultad de Ciencias
Manual Técnico
67
get information()
Toma la información propiciada en cada Frame y después la unifica para regresar un sólo conjunto de información.
Returns Un diccionario con la información de PopulaceFrame y
FitnessFrame.
Return type Dictionary
restore settings()
Restaura los valores por defecto en ambos Frames.
3.2.4.2.
TemplatePopulationFrame (clase)
Esta clase proporciona la infraestructura gráfica para que el usuario pueda elegir
técnicas y configurar atributos concernientes al Fitness de una Población y a la Población en general.
A grandes rasgos se trata de una plantilla que deberán implementar las clases FitnessFrame y PopulaceFrame.
La clase permite la selección de cada posible técnica disponible y automáticamente
se muestran los parámetros necesarios (si los hay) para cada una de éstas.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
create dynamic widgets()
Note: Este método es privado.
Inicializa los elementos dinámicos del Frame, esto es, de acuerdo al tipo que
lleva cada parámetro se creará un widget diferente.
update widgets(event=None)
UNAM
Facultad de Ciencias
68
Manual Técnico
Note: Este método es privado.
Realiza solamente la actualización y colocación de elementos dinámicos en
el Frame.
Si el parámetro event es distinto de None, significa que se lanzó un evento
que provocará que se actualicen los parámetros de acuerdo con la técnica seleccionada.
Parameters
event (String) – Contiene el valor del elemento
que ejecutó esta función.
get information()
Recolecta la información que ha seleccionado e introducido el usuario, también la organiza para que se pueda utilizar apropiadamente.
Returns
Un diccionario que contiene:
Clase,
Técnica,
Parametros
Return type Dictionary
grid widgets()
Permite la colocación adecuada de elementos estáticos y dinámicos, considerando además el espacio o caracterı́sticas necesarias de redimensionamiento
para éstos últimos.
restore settings()
Asigna los valores por defecto tanto de las técnicas como de sus respectivos
parámetros, también limpia aquéllos en donde se hayan insertado valores.
Los siguientes elementos implementan la plantilla actual:
3.2.4.2.1.
PopulaceFrame (clase)
Esta clase proporciona la infraestructura gráfica para que el usuario pueda elegir métodos y caracterı́sticas concernientes a la conformación de la Población.
También hereda atributos de la clase TemplatePopulationFrame con el fin de esUNAM
Facultad de Ciencias
Manual Técnico
69
tablecer una forma más rápida y ordenada de colocar componentes y recolectar la
información de éstos.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
get information()
Recolecta la información genérica (usando el método de la clase Padre),
y también se le añade aquélla recolectada exclusivamente en esta clase.
Returns
Un diccionario que contiene:
Métodos genéricos,
Número de Generaciones,
Tamaño de la Población,
Número de Decimales.
Return type Dictionary
restore settings()
Por un lado, restaura el contenido de los elementos pertenecientes sólo a esta
clase, y por el otro, activa el método de la clase Padre que realiza una restauración de los elementos genéricos.
3.2.4.2.2.
FitnessFrame (clase)
Esta clase proporciona la infraestructura gráfica para que el usuario pueda elegir
métodos concernientes a la asignación del Fitness para la Población.
Además hereda atributos de la clase TemplatePopulationFrame para facilitar la colocacion y extracción de información pertinente para el usuario.
Parameters
UNAM
Facultad de Ciencias
70
Manual Técnico
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
get information()
Llama al método de la clase Padre, el cual recopila toda la información elegida por el usuario y la regresa en forma de diccionario.
Returns Diccionario con información de los métodos genéricos.
Return type Dictionary
restore settings()
Llamar al método de la clase Padre, el cual restaura los valores por defecto
de los elementos dinámicos y estáticos del Frame.
3.2.5.
GeneticOperator (módulo)
Proporciona los elementos gráficos para que el usuario pueda realizar operaciones relacionadas con la Selección, Cruza y Mutación de Individuos de una Población.
Los elementos que lo conforman son:
3.2.5.1.
GeneticOperatorFrame (clase)
Reúne y controla las clases SelectionFrame, CrossoverFrame y MutationFrame con
la finalidad de colocar los elementos gráficos apropiadamente y agilizar el intercambio de información con el usuario.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
UNAM
Facultad de Ciencias
Manual Técnico
71
Returns Tkinter.Frame
Return type Instance
get information()
Toma la información propiciada en cada Frame y después la unifica para regresar un sólo conjunto de información.
Returns Un diccionario con la información de SelectionFrame,
CrossoverFrame y MutationFrame.
Return type Dictionary
restore settings()
Realiza la restauración de información y contenido en cada uno de los Frames.
3.2.5.2.
TemplateGeneticOperatorFrame (clase)
Proporciona la infraestructura gráfica para que el usuario pueda elegir técnicas y
configurar atributos concernientes a la Selección, Cruza y Mutación de Individuos
de una Población.
A grandes rasgos se trata de una plantilla que deberán implementar las clases SelectionFrame, CrossoverFrame y MutationFrame.
La clase permite la selección de cada posible técnica disponible y automáticamente
se muestran los parámetros necesarios (si los hay) para cada una de éstas.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
sort techniques (Boolean) – Indica si las técnicas
disponibles se ordenan alfabéticamente o no.
Returns Tkinter.Frame
Return type Instance
dynamic widgets()
UNAM
Facultad de Ciencias
72
Manual Técnico
Note: Este método es privado.
Inicializa los elementos dinámicos del Frame, esto es, de acuerdo al tipo que
lleva cada parámetro se creará un widget diferente.
update widgets(event=None)
Note: Este método es privado.
Realiza solamente la actualización y colocación de elementos dinámicos en
el Frame.
Si el parámetro event es distinto de None, significa que se lanzó un evento
que provocará que se actualicen los parámetros de acuerdo con la técnica seleccionada.
Parameters
event (String) – Contiene el valor del elemento
que ejecutó esta función.
get information()
Recolecta la información que ha seleccionado e introducido el usuario, también la organiza para que se pueda utilizar apropiadamente.
Returns
Un diccionario que contiene:
Clase,
Técnica,
Parámetros
Return type Dictionary
grid widgets()
Permite la colocación adecuada de elementos estáticos y dinámicos, considerando además el espacio o caracterı́sticas necesarias de redimensionamiento
para éstos últimos.
restore settings()
Asigna los valores por defecto tanto de las técnicas como de sus respectivos
parámetros, también limpia aquéllos en donde se hayan insertado valores.
Las clases que implementan esta plantilla son las siguientes:
UNAM
Facultad de Ciencias
Manual Técnico
3.2.5.2.1.
73
SelectionFrame (clase)
Esta clase proporciona la infraestructura gráfica para que el usuario pueda elegir
métodos y caracterı́sticas relacionadas con la selección de Individuos.
También hereda atributos de la clase TemplateGeneticOperatorFrame para facilitar
la carga de elementos en el Frame y su correspondiente recolección de información.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
get information()
Recolecta la información relativa a esta clase haciendo uso del método de
la clase Padre.
Returns Diccionario con información de los métodos genéricos.
Return type Dictionary
restore settings()
Ejecuta el método de la clase Padre, el cual restaura los valores por defecto
de los elementos dinámicos y estáticos del Frame.
3.2.5.2.2.
CrossoverFrame (clase)
Esta clase proporciona la infraestructura gráfica para que el usuario pueda elegir
técnicas y caracterı́sticas concernientes a la Cruza entre Individuos.
También hereda atributos de la clase TemplateGeneticOperatorFrame para facilitar
la carga de elementos en el Frame y su correspondiente recolección de información.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
UNAM
Facultad de Ciencias
74
Manual Técnico
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
get information()
Recolecta la información genérica (usando el método de la clase Padre),
y también se le añade aquélla recolectada exclusivamente en esta clase.
Returns
Un diccionario que contiene:
Métodos genéricos,
Probabilidad de cruza.
Return type Dictionary
restore settings()
Ejecuta el método de la clase Padre, el cual restaura los valores por defecto
de los elementos dinámicos y estáticos del Frame.
3.2.5.2.3.
MutationFrame (clase)
Esta clase proporciona la infraestructura gráfica para que el usuario pueda elegir
técnicas y caracterı́sticas relativas a la Mutación de Individuos.
También hereda atributos de la clase TemplateGeneticOperatorFrame para facilitar la carga automática de elementos en el Frame y su consecuente recolección de
información.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
UNAM
Facultad de Ciencias
Manual Técnico
75
get information()
Recolecta la información genérica (usando el método de la clase Padre),
y también se le añade aquélla recolectada exclusivamente en esta clase.
Returns
Un diccionario que contiene:
Métodos genéricos,
Probabilidad de mutación.
Return type Dictionary
restore settings()
Ejecuta el método de la clase Padre, el cual restaura los valores por defecto
de los elementos dinámicos y estáticos del Frame.
3.2.6.
MOEA (módulo)
Proporciona los elementos gráficos para que el usuario realice configuraciones concernientes a los M.O.E.A.s (Multi-Objective Evolutionary Algorithms ó Algoritmos Evolutivos Multiobjetivo) y sus atributos relacionados.
Sus elementos son los siguientes:
3.2.6.1.
MOEAFrame (clase)
Unifica los Frames AlgorithmFrame y SharingFunctionFrame, la razón de ésto es
para facilitar el acomodo de componentes de manera individual, para ası́ garantizar
un acceso asequible a la información.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
get information()
Toma la información solicitada en cada Frame y después la unifica para regresar un sólo conjunto de información.
UNAM
Facultad de Ciencias
76
Manual Técnico
Returns Un diccionario con la información de AlgorithmFrame
y SharingFunctionFrame.
Return type Dictionary
restore settings()
Restaura los valores por defecto en cada Frame.
La clase actual se apoya de los siguientes elementos:
3.2.6.1.1.
AlgorithmFrame (clase)
Esta clase proporciona una base gráfica para que el usuario pueda seleccionar técnicas con sus parámetros correspondientes (si es que tienen) referentes a los M.O.E.A.’s
(Multi-Objective Evolutionary Algorithms ó Algoritmos Evolutivos Multiobjetivo).
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
create dynamic widgets()
Note: Este método es privado.
Inicializa los elementos dinámicos del Frame, esto es, de acuerdo al tipo que
lleva cada parámetro se creará un widget diferente.
grid widgets()
Note: Este método es privado.
Coloca elementos en el Frame, tanto estáticos como dinámicos.
UNAM
Facultad de Ciencias
Manual Técnico
77
update widgets(event=None)
Note: Este método es privado.
Realiza solamente la actualización y colocación de elementos dinámicos en
el Frame.
Si el parámetro event es distinto de None, significa que se lanzó un evento
que provocará que se actualicen los parámetros de acuerdo con la técnica seleccionada.
Parameters
event (String) – Contiene el valor del elemento
que ejecutó esta función.
get information()
Recolecta la información que ha seleccionado e introducido el usuario, también la organiza para que se pueda utilizar apropiadamente.
Returns
Un diccionario que contiene:
Clase,
Técnica,
Parámetros.
Return type Dictionary
restore settings()
Asigna los valores por defecto tanto de las técnicas como de sus respectivos
parámetros, también limpia aquéllos en donde se hayan insertado valores.
3.2.6.1.2.
SharingFunctionFrame (clase)
Esta clase proporciona una base gráfica para que el usuario pueda seleccionar métodos con sus respectivos parámetros (si es que tienen) referentes a Sharing Function.
Una técnica de Sharing Function sirve para aplicar una selección más intensiva de
Individuos en caso de haber un “empate” entre éstos.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
UNAM
Facultad de Ciencias
78
Manual Técnico
name (String) – Identificador (único) que tendrá el Frame.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XMLParser.py).
Returns Tkinter.Frame
Return type Instance
create dynamic widgets()
Note: Este método es privado.
Inicializa los elementos dinámicos del Frame, esto es, de acuerdo al tipo que
lleva cada parámetro se creará un widget diferente.
grid widgets()
Note: Este método es privado.
Coloca elementos en el Frame, tanto estáticos como dinámicos.
update widgets(event=None)
Note: Este método es privado.
Realiza solamente la actualización y colocación de elementos dinámicos en
el Frame.
Si el parámetro event es distinto de None, significa que se lanzó un evento
que provocará que se actualicen los parámetros de acuerdo con la técnica seleccionada.
Parameters
event (String) – Contiene el valor del elemento
que ejecutó esta función.
get information()
Recolecta la información que ha seleccionado e introducido el usuario, también la organiza para que se pueda utilizar apropiadamente.
Returns
UNAM
Facultad de Ciencias
Manual Técnico
79
Un diccionario que contiene:
Clase,
Técnica,
Parámetros.
Return type Dictionary
restore settings()
Asigna los valores por defecto tanto de las técnicas como de sus respectivos
parámetros, también limpia aquéllos en donde se hayan insertado valores.
3.3.
Additional (módulo)
Proporciona elementos gráficos que, aunque no tienen cabilda en la Ventana Principal,
sı́ contienen herramientas auxiliares de importancia.
El módulo consta de los siguientes elementos:
3.3.1.
GenerationSignalToplevel (clase)
Se trata de un Toplevel (ventana independiente) que muestra el progreso de las
generaciones al momento de ejecutar un Task.
Esta ventana aunque es creada y mostrada en los procesos de la capa View, será en
Model/MOEA en donde se utilice y actualice, ya que la idea es crear una “señal”
que indique al usuario el progreso del MOEA en ejecución para que se dé una idea
del desempeño del algoritmo.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
path image logo (String) – La ruta al logotipo que
se usa en esta ventana independiente.
execution task number (Integer) – Número que
indica el actual Task en ejecución (véase View/Additional/
ResultsGrapher/ResultsGrapherToplevel.py).
Returns Tkinter.Toplevel
Return type Instance
UNAM
Facultad de Ciencias
80
Manual Técnico
center()
Note: Este método es privado.
Centra la ventana independiente con respecto de la Ventana Principal.
En otras palabras, la ventana independiente será colocada en el centro de la
Ventana Principal.
do nothing()
Note: Este método es privado.
Simplemente es una función “dummy” que no realiza nada.
Es utilizada como sustituto de la función del ı́cono “Cerrar” y ası́ evitar que
el usario intencionadamente intente ocluir la ventana del número de generaciones.
close()
Oculta y elimina toda referencia gráfica y lógica de la ventana independiente,
indicando ası́ que el número de generaciones ha alcanzado su lı́mite.
hide()
Oculta la ventana independiente de la pantalla pero no la elimina de los registros gráficos.
show()
Reactiva la ventana independiente, realizando además durante esta ejecución un par de consignas más para dar una experiencia de usuario suficiente y
concisa.
update current generation(current generation)
Actualiza la generación actual en la ventana independiente.
Tı́picamente esta función será usada en todos los algoritmos de la capa Model/MOEA, pues es allı́ donde se designará el progreso del algoritmo que a su
vez se verá reflejado en la capa de View.
Parameters
current generation (Integer) – La generación que está corriendo actualmente en el MOEA.s
Returns 1 si se ha alcanzado la generación lı́mite, 0 en otro caso.
Return type Integer
UNAM
Facultad de Ciencias
Manual Técnico
81
update number of generations(number of generations)
Actualiza el número total de generaciones.
Generalmente esta función será llamada desde Controller/Controller.py ya
que ahı́ es donde se decide si las configuraciones iniciales son adecuadas para
poder ejecutar el algoritmo.
Parameters
number of generations (Integer.) – El
número de generaciones total que tendrá el MOEA.
3.4.
MenuInternalOption (módulo)
Contiene elementos gráficos que permiten acceder a configuraciones internas del programa y también a M.O.P.s (Multi-Objective Problems) previamente cargados para hacer
uso fácil de ellos.
3.4.1.
MenuInternalOption (clase)
Se crea el Menú de Opciones Internas o Menú Secundario.
Básicamente se trata de una serie de caracterı́sticas que, aunque no forman parte
esencial del programa, sı́ ofrecen alternativas que pueden facilitar la experiencia de
usuario.
Este menú será atado al Frame Principal y desde allı́ el usuario podrá tener acceso a las opciones que aquı́ se describen.
Parameters
parent (Tkinter.Frame) – El Frame Padre al que
pertenece esta implementación.
path image logo (String) – La ruta al logotipo que
se usa en esta ventana independiente.
features (Dictionary) – Un diccionario con las
caracterı́sticas que deberá tener cada una de las opciones
listadas.
Returns Tkinter.Menu
Return type Instance
launch about toplevel()
UNAM
Facultad de Ciencias
82
Manual Técnico
Note: Este método es privado.
Abre la ventana independiente (Toplevel) About. También verifica que se
abra una y sólo una instancia de dicha ventana.
launch internal option toplevel()
Note: Este método es privado.
Abre la ventana independiente (Toplevel) Internal Options (o simplemente
Options).
También verifica que se abra una y sólo una instancia de dicha ventana.
about toplevel custom close()
Indica que la única instancia que debe crearse para la opción About está disponible.
internal option toplevel custom close()
Indica que la única instancia que debe crearse para la opción Options está disponible.
El módulo consta de las siguientes caracterı́sticas:
3.4.1.1.
InternalOptionToplevel (clase)
Contiene un Menú pequeño con pestañas que indican las caracterı́sticas internas del
sistema a las que puede tener acceso el usuario.
En su mayorı́a se trata de caracterı́sticas que muestran los métodos, técnicas y sistemas auxiliares que garantizan un manejo más armonioso del programa y si ası́ lo
desea el usuario, modificarlos para ajustar su desempeño.
Parameters
parent (Tkinter.Menu) – El elemento Padre al que
pertenece la actual ventana independiente (Toplevel).
path image logo (String) – La ruta al logotipo que
se usa en esta ventana independiente.
features (Dictionary) – Un diccionario que contiene las caracterı́sticas necesarias que serán mostradas en
esta ventana independiente.
UNAM
Facultad de Ciencias
Manual Técnico
83
custom function (Instance) – Una variable que
contiene una función, la cual redefinirá más apropiadamente el comportamiento de la actual Ventana Principal con
respecto de su Frame Padre.
Returns La ventana independiente que contiene la información
Return type Tkinter.Toplevel
center()
Note: Este método es privado.
Centra la ventana independiente con respecto de la Ventana Principal.
En otras palabras, la ventana independiente será colocada en el centro de la
Ventana Principal.
close()
Note: Este método es privado.
Cierra y elimina todo rastro de esta ventana independiente.
3.4.1.2.
InternalOptionTab (módulo)
Contiene las partes gráficas que conformarán cada una de las pestañas concernientes al Toplevel (ventana independiente) de opciones internas (InternalOptionToplevel).
Consta de los siguientes elementos:
3.4.1.2.1.
MOPExampleFrame (clase)
Unifica dos elementos: Canvas y MOPFrame.
La razón de esto es que, en promedio la información mostrada por MOPFrame rebasará el tamaño de la ventana de la información final (véase View/Additional/
ResultsGrapher/ResultsGrapherTopLevel.py), es entonces que se deben agregar barras de desplazamiento para poder acceder al contenido que quedarı́a oculto.
Uno de los elementos en Tkinter más sencillos que cumplen con este cometido es
un Canvas. Luego entonces esa es la razón de tal fusión.
Parameters
UNAM
Facultad de Ciencias
84
Manual Técnico
parent (Tkinter.Toplevel) – El elemento Padre al
que pertenece el actual Frame.
features (Dictionary) – Un diccionario que contiene las caracterı́sticas necesarias que serán mostradas en
este Frame.
Returns El Frame que contiene la información señalada.
Return type Tkinter.Frame
update scrollbar(event)
Note: Este método es privado.
Actualiza la barra de desplazamiento de acuerdo al número de elementos
existentes en el Frame, esto para poder hacer un recorrido apropiado de la
barra.
Parameters
event (String) – Elemento que ejecutó esta función.
La clase actual tiene como base el siguiente elemento:
3.4.1.2.2.
MOPFrame (clase)
Muestra la información relativa a los M.O.P.’s y provee de métodos que facilitan la
carga de éstos en la Ventana Principal.
Un M.O.P. (Multi Objective Problem) es un conjunto de funciones y variables
bien definidas que ya han sido previamente estudiadas, ası́ como su comportamiento en conjunto; la idea es proporcionarle al usuario un ambiente de carga fácil de
datos para que pueda probar los ejemplos ya tratados por muchos autores en los
libros que se citarán en el trabajo escrito.
Parameters
parent (Tkinter.Frame) – El elemento Padre al que
pertenece el actual Frame.
grandparent (Tkinter.Toplevel) – El elemento
Padre del Padre al que pertenece el actual Frame.
features (Dictionary) – Un diccionario que contiene las caracterı́sticas necesarias que serán mostradas en
UNAM
Facultad de Ciencias
Manual Técnico
85
este Frame.
Returns El Frame que contiene la información señalada.
Return type Tkinter.Frame
get mop example(event)
Note: Este método es privado.
Con base en la selección de M.O.P. hecha por el usuario, se carga éste en la
Ventana Principal.
Parameters
event (String) – El evento del elemento gráfico
que activa esta función.
update current mop(event=None)
Note: Este método es privado.
Despliega la información relacionada con el M.O.P. seleccionado.
Parameters
event (String) – El evento del elemento gráfico
que activa esta función.
3.4.1.2.3.
FeatureFrame (clase)
Unifica dos elementos: Canvas y CharacteristicFrame.
La razón de esto es que, en promedio la información mostrada por CharacteristicFrame rebasará el tamaño de la ventana de la información final (véase View/
Additional/ResultsGrapher/ResultsGrapherTopLevel.py), es entonces que se
deben agregar barras de desplazamiento para poder acceder al contenido que quedarı́a oculto.
Uno de los elementos en Tkinter más sencillos que cumplen con este cometido es
un Canvas. Luego entonces esa es la razón de tal fusión.
Parameters
parent (Tkinter.Toplevel) – El elemento Padre al
que pertenece el actual Frame.
UNAM
Facultad de Ciencias
86
Manual Técnico
features (Dictionary) – Un diccionario que contiene las caracterı́sticas necesarias que serán mostradas en
este Frame.
Returns El Frame que contiene la información señalada.
Return type Tkinter.Frame
update scrollbar(event)
Note: Este método es privado.
Actualiza la barra de desplazamiento de acuerdo al número de elementos
existentes en el Frame, esto para poder hacer un recorrido apropiado de la
barra.
Parameters
event (String) – Elemento que ejecutó esta función.
La clase actual se apoya del siguiente elemento:
3.4.1.2.4.
CharacteristicFrame (clase)
Despliega información concerniente a todas las técnicas (con sus respectivos parámetros) disponibles para el usuario.
Se agrupan éstas en las mismas categorı́as que presenta el programa, más en concreto, las secciones que conforman a la Ventana Principal (véase View/
MainWindow.py).
También señala someramente las instrucciones necesarias para que el programa
pueda reconocer cualquier técnica que desarrolle el usuario.
Parameters
parent (Tkinter.Toplevel) – El elemento Padre al
que pertenece el actual Frame.
features (Dictionary) – Un diccionario que contiene las caracterı́sticas necesarias que serán mostradas en
este Frame.
Returns El Frame que contiene la información señalada.
Return type Tkinter.Frame
UNAM
Facultad de Ciencias
Manual Técnico
3.4.1.2.5.
87
PythonExpressionFrame (clase)
Realiza la fusión de Canvas y ExpressionFrame, debido a que, cuando se agregan
numerosas variables al ExpressionFrame, se debe insertar una barra de desplazamiento para poder acceder a aquéllos que se encuentren hasta abajo.
Dentro del ambiente de Tkinter, el elemento más sencillo para lograr este efecto
es un Canvas, por ello se anida el ExpressionFrame al Canvas.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
features (Dictionary) – Conjunto de técnicas con
sus respectivos parámetros para que se puedan cargar automáticamente en este Frame (véase Controller/XML/
PythonExpressions.xml).
Returns Tkinter.Frame
Return type Instance
activate scroll(event=None)
Note: Este método es privado.
Actualiza la barra de desplazamiento y con base en esta acción la activa o
desactiva.
Parameters
event (String) – Elemento que ejecutó esta función.
update scrollbar(event=None)
Note: Este método es privado.
Actualiza la barra de desplazamiento de acuerdo al número de elementos
existentes en el Frame, esto para poder hacer un recorrido apropiado de la
barra.
Parameters
event (String) – Elemento que ejecutó esta función.
UNAM
Facultad de Ciencias
88
Manual Técnico
La clase actual toma como referencia el siguiente elemento:
3.4.1.2.6.
ExpressionFrame (clase)
Ofrece opciones simples para mostrar y añadir expresiones de Python.
Lo anterior ocurre ya que al momento de crear y evaluar funciones objetivo hay
algunas palabras reservadas que no pueden ser usadas en Python directamente si no
se hace un renombramiento apropiado.
Dicha información se encuentra en Controller/XML/PythonExpressions.xml
Parameters
parent (Tkinter.Toplevel) – El elemento Padre al
que pertenece el actual Frame.
features (Dictionary) – Un diccionario que contiene las caracterı́sticas necesarias que serán mostradas en
este Frame.
Returns El Frame que contiene la información señalada.
Return type Tkinter.Frame
add expression(event)
Note: Este método es privado.
Inserta una casilla que conforma una expresión dentro del Frame.
Parameters
event (String) – Identificador del elemento
gráfico que activó la función.
delete single expression(event)
Note: Este método es privado.
Elimina una expresión y todos los elementos gráficos que la acompañan.
También elimina todo rastro que se encuentre en las estructuras lógicas.
Parameters
event (String) – Identificador del elemento
gráfico que activó la función.
UNAM
Facultad de Ciencias
Manual Técnico
89
get information()
Note: Este método es privado.
Toma la información del Frame (en especı́fico de las casillas) y regresa las
expresiones con sus respectivos equivalentes en Python.
Returns Una lista que contiene arreglos de dos elementos donde
el primero es la expresión normal mientras que el segundo
es la expresión equivalente en Python.
Return type List
insert expression(expression=None)
Note: Este método es privado.
Coloca en el Frame una colección de elementos:
[etiqueta para expresión normal, expresión normal, etiqueta para expresión de
Pyrhon, expresión de Python, botón para eliminar]
Si el parámetro expression es None, se añade la casilla vacı́a, de lo contrario
se agrega ésta con la información pertinente.
Parameters
expression (Array) – Un arreglo con dos elementos, el primero contiene la expresión normal
mientras que el segundo maneja la información de
la expresión equivalente en Python.
load expressions()
Note: Este método es privado.
Carga las expresiones a manera de contenido gráfico en el Frame.
Dichas expresiones son tomadas del archivo Controller/XML/
PythonExpressions.xml.
save changes(event)
UNAM
Facultad de Ciencias
90
Manual Técnico
Note: Este método es privado.
Toma la información existente en las casillas y procede a sobreescribir el archivo Controller/XML/PythonExpressions.xml con la información recién
recabada.
Parameters
event (String) – Identificador del elemento
gráfico que activó la función.
get current elements()
Regresa el número actual de casillas en el Frame.
Returns Cantidad de elementos en la estructura rows, donde se
guardan las casillas (Entry’s).
Return type Integer
3.4.1.3.
AboutToplevel (clase)
Esta ventana independiente (Toplevel) proporciona información básica del programa ası́ como de sus desarrolladores.
Parameters
parent (Tkinter.Menu) – El elemento Padre al que
pertenece la actual ventana independiente (Toplevel).
path image logo (String) – La ruta al logotipo que
se usa en esta ventana independiente.
custom function (Instance) – Una variable que
contiene una función, la cual redefinirá más apropiadamente el comportamiento de la actual Ventana Principal con
respecto de su Frame Padre.
Returns Tkinter.Toplevel
Return type Instance
center()
Note: Este método es privado.
UNAM
Facultad de Ciencias
Manual Técnico
91
Centra la ventana independiente con respecto de la Ventana Principal.
En otras palabras, la ventana independiente será colocada en el centro de la
Ventana Principal.
close(custom function)
Note: Este método es privado.
Cierra y elimina todo rastro de esta ventana independiente.
Parameters
custom function (Instance) – Una variable
que contiene una función que ha de ejecutarse dentro
de este método.
3.4.2.
ResultsGrapher (módulo)
Proporciona los elementos gráficos para poder presentar las gráficas de los resultados que
ha arrojado la ejecución de algún M.O.E.A.
Consta de los siguientes elementos:
3.4.2.1.
ResultsGrapherToplevel (clase)
Esta clase lanza una ventana independiente que muestra los resultados arrojados
por una configuración previa del usuario.
Primero que nada es menester mencionar que una ventana independiente es un Toplevel en Tkinter, la cual es casi ajena a la Ventana Principal (véase View/Main/
MainWindow.py), pero si ésta última es cerrada, se eliminarán también las ventanas independientes creadas.
Cada ventana independiente mostrará el número de Task, es decir, el orden en el
que fue procesada la información con respecto de otros Tasks.
Entiéndase por Task a una ejecución de algún algoritmo MOEA bajo un cierto conjunto de configuraciones iniciales.
Ası́, los Tasks serán mostrados en una ventana independiente. La numeración de los
Tasks irá siempre en orden progresivo, lo que significa que el número será reinicializado sólamente volviendo a ejecutar el programa principal.
De esta manera es posible tener varias ventanas independientes abiertas y en cuestiones más generales, es posible ejecutar varios Tasks simultáneamente, ya que el
programa es multi-threading en ese sentido.
UNAM
Facultad de Ciencias
92
Manual Técnico
Finalmente, la información será mostrada en dos pestañas: en una (SummaryFrame) se otorga un resumen de todas las funciones objetivo, variables de decisión,
MOEA usado y configuraciones adicionales en el Task.
En la otra (GraphFrame) se colocan todas las gráficas pertinentes producto de
la ejecución del MOEA con las funciones objectivo, variables de decisión y configuraciones ingresadas (véase Model/Community/Community.py) (véase View/
Additional/ResultsGrapher/GraphFrame.py).
Si por cualquier circunstancia llega a haber una falla interna durante la ejecución
del proceso, ninguna de las dos pestañas será mostrada y en su lugar aparecerá una
de error (ErrorFrame), especificando además el tipo de error y en qué parte de
Model (ó Modelo) ocurrió.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
path image logo (String) – La ruta al logotipo que
se usa en esta ventana independiente.
execution task count (Integer) – Número que
indica el actual Task en ejecución.
main features (Dictionary) – Diccionario que
contiene, entre otras cosas, los nombres de los parámetros
asociados a cada técnica.
gathered information (Dictionary) – Diccionario que contiene todas las configuraciones recabadas ingresadas por el usuario (véase View/Main/MainWindow.py).
final results (Dictionary) – Diccionario que
contiene la información procesada lista para graficar(véase
View/Additional/ResultsGrapher/GraphFrame.py).
Returns Tkinter.Toplevel
Return type Instance
center()
Note: Este método es privado.
Centra la ventana independiente con respecto de la Ventana Principal.
En otras palabras, la ventana independiente será colocada en el centro de
Ventana Principal.
UNAM
Facultad de Ciencias
Manual Técnico
93
create renamed settings()
Note: Este método es privado.
Tal como su nombre lo dice, renombra las funciones objetivo y variables de
decisión para posteriormente almacenarlas en una estructura por cada tipo.
Renombrar una función o variable de decisión es hacer un mapeo que consista en:
Elemento renombrado -> elemento original.
Para el caso de la función objetivo, el renombramiento se da anteponiendo
la letra F seguido de la posición en la que fue insertada originalmente por el
usuario.
El caso es análogo para la variable de decisión, sólo que la letra es V.
La idea de renombrar las funciones y variables surge como alternativa al
momento de graficar los datos (véase View/Additional/ResultsGrapher/
GraphFrame.py), ya que el usuario puede ingresar funciones muy largas o
variables con identificadores muy complejos y esto en la parte gráfica se verı́a
muy amontonado; por ello fue preferible mostrar la parte renombrada en la
sección de GraphFrame y colocar la muestra original en el SummaryFrame.
La clase actual consta de los siguientes elementos:
3.4.2.1.1.
GraphFrame (clase)
Proporciona un Frame que contiene gráficas alimentadas por los resultados obtenidos al ejecutar algún MOEA, el cual ha sido refinado por las configuraciones recabadas de la Ventana Principal (véase Model/MOEA).
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
execution task count (Integer) – Número que
indica el actual Task en ejecución.
objective functions (List) – Lista que contiene
las funciones objetivo renombradas.
decision variables (List) – Lista que contiene las
variables de decisión renombradas.
final results (Dictionary) – Diccionario que
contiene la información para graficar. Se divide en dos caUNAM
Facultad de Ciencias
94
Manual Técnico
tegorı́as principales: Frente de Pareto y Mejor Individuo
por Generación.
Returns Tkinter.Frame
Return type Instance
change canvas category()
Note: Este método es privado.
Realiza el cambio de Canvas de la categorı́a de funciones objetivo a la de variables y decision y viceversa, tomando en cuenta factores como por ejemplo
si alguna de las dos categorı́as tiene un OptionMenu asociado (para entonces colocarlo apropiadamente) e identificando siempre el último Canvas
seleccionado de la categorı́a anterior para que cuando sea oportuno se vuelva
a colocar.
change inner canvas(event)
Note: Este método es privado.
Realiza el cambio de Canvas dentro de una misma categorı́a, esto en caso en
que los datos hayan arrojado más de una gráfica.
El cambio se hace con ayuda de su OptionMenu asociado.
Parameters
event (String) – Elemento que ejecutó esta función.
create 2d canvas(x label, x index, y label, y index, collection points)
Note: Este método es privado.
Crea una gráfica en 2 dimensiones que es envuelta en un Canvas.
Parameters
x label (String) – Nombre para el eje X de la
gráfica.
x index (Integer) – Posición dentro de collection points para los datos del eje X.
UNAM
Facultad de Ciencias
Manual Técnico
95
y label (String) – Nombre para el eje Y de la
gráfica.
y index (Integer) – Posición dentro de collection points para los datos del eje Y.
collection points (Dictionary) – Diccionario que contiene los puntos a graficar.
Returns Canvas
Return type matplotlib.backends.backend tkagg.FigureCanvasTkAgg
create 3d canvas(x label, x index, y label, y index, z label, z index,
collection points)
Note: Este método es privado.
Crea una gráfica en 3 dimensiones que es envuelta en un Canvas.
Parameters
x label (String) – Nombre para el eje X de la
gráfica.
x index (Integer) – Posición dentro de collection points para los datos del eje X.
y label (String) – Nombre para el eje Y de la
gráfica.
y index (Integer) – Posición dentro de collection points para los datos del eje Y.
z label (String) – Nombre para el eje Z de la
gráfica.
z index (Integer) – Posición dentro de collection points para los datos del eje Z.
collection points (Dictionary) – Diccionario que contiene los puntos a graficar.
Returns Canvas
Return type matplotlib.backends.backend tkagg.FigureCanvasTkAgg
create decision variables canvas(decision variables, collection points)
UNAM
Facultad de Ciencias
96
Manual Técnico
Note: Este método es privado
Crea los Canvas para las variables de decisión.
Parameters
decision variables (List) – Lista que contiene las variables de decisión renombradas.
collection points (Dictionary) – Diccionario que contiene los valores de las funciones
objetivo de todos los Individuos en la Población final.
create objective functions canvas(objective functions, collection points)
Note: Este método es privado.
Crea los Canvas para las funciones objetivo.
Parameters
objective functions (List) – Lista que contiene las funciones objetivo renombradas.
collection points (Dictionary) – Diccionario que contiene los valores de las funciones
objetivo de todos los Individuos en la Población final.
La clase actual toma como referencia el siguiente elemento:
3.4.2.1.2.
CustomNavigationToolbar2TkAgg (clase)
Proporciona una Barra de Navegación (ó NavigationToolbar) que se anexa a cada
una de las gráficas con el fin de facilitar la exploración y almacenamiento de los datos obtenidos.
Por defecto la barra de navegación original se encuentra obsoleta a las necesidades inherentes a este proyecto, por ello es que se crea una barra personalizada que
responde a requerimientos tales como la obtención apropiada de imágenes relativas
a las gráficas ası́ como su correcto funcionamiento sin importar el sistema operativo
empleado.
Parameters
UNAM
Facultad de Ciencias
Manual Técnico
97
canvas (matplotlib.backends.backend tkagg.
FigureCanvasTkAgg) – La estructura que contiene
tanto a la gráfica como a la Barra de Navegación.
window (Tkinter.Frame) – El Frame que contiene a
canvas.
parent frame (Tkinter.Frame) – El Frame que
contiene a window, en este caso ResultsGrapherToplevel.py.
execution task count (Integer) – Un identificador que precisa el número de tarea (Task) en ejecución
(véase View/Additional/ResultsGrapher/
ResultsGrapherToplevel.py).
image text (String) – El nombre que tendrán por
defecto las imágenes resultantes al guardarse en el equipo
de cómputo.
Returns matplotlib.backends.backend tkagg.NavigationToolbar2TkAgg
Rype Instance
save figure(*args)
Note: Este método sobreescribe al original.
Arroja una ventana emergente modificada para guardar archivos, en este caso
las gráficas.
Las modificaciones con respecto de la función original consisten en agregar
un tı́tulo para tener conocimiento de las imágenes del Task que se van a guardar.
Además se modifica el comportamiento de la ventana para adherirlo a la ventana del Task y no a la Ventana Principal.
Parameters
args (Tuple) – Un listado con parámetros que
aunque no se ocupan en el método se coloca porque
ası́ lo estructuraron los desarrolladores originales de
la biblioteca.
3.4.2.1.3.
UNAM
SummaryFrame (clase)
Facultad de Ciencias
98
Manual Técnico
Unifica dos elementos: Canvas y ContentFrame.
La razón de esto es que, en promedio la información mostrada por ContentFrame
rebasará el tamaño de la ventana de la información final (véase View/Additional/
ResultsGrapher/ResultsGrapherTopLevel.py), es entonces que se deben agregar barras de desplazamiento para poder acceder al contenido que quedarı́a oculto.
Uno de los elementos en Tkinter más sencillos que cumplen con este cometido es
un Canvas. Luego entonces esa es la razón de tal fusión.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
renamed objective functions (Dictionary)
– Diccionario de funciones objetivo renombradas (véase
View/Additional/ResultsGrapher/ResultsGrapherToplevel.py).
renamed decision variables (Dictionary) –
Diccionario de variables de decisión renombradas (véase
View/Additional/ResultsGrapher/ResultsGrapherToplevel.py).
main features (Dictionary) – Diccionario que
contiene, entre otras cosas, los nombres de los parámetros
asociados a cada técnica.
gathered information (Dictionary) – Diccionario que contiene todas las configuraciones recabadas ingresadas por el usuario (véase View/Main/MainWindow.py).
Returns Tkinter.Frame
Return type Instance
update scrollbar(event)
Note: Este método es privado.
Actualiza la barra de desplazamiento de acuerdo al número de elementos
existentes en el Frame, esto para poder hacer un recorrido apropiado de la
barra.
Parameters
event (String) – Elemento que ejecutó esta función.
La clase actual toma como base el siguiente elemento:
UNAM
Facultad de Ciencias
Manual Técnico
3.4.2.1.4.
99
ContentFrame (clase)
Recaba el contenido de todas las funciones objetivo, variables de decisión y demás
parámetros que el usuario ingresó para poder ejecutar un Task determinado.
Es entonces que plasma toda esta información en un Frame para que el usuario pueda cotejar los datos ingresados con los resultados obtenidos (véase View/Additional/
ResultsGrapher/GraphFrame.py).
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
renamed objective functions (Dictionary)
– Diccionario de funciones objetivo renombradas (véase
View/Additional/ResultsGrapher/ResultsGrapherToplevel.py).
renamed decision variables (Dictionary) –
Diccionario de variables de decisión renombradas (véase
View/Additional/ResultsGrapher/ResultsGrapherToplevel.py).
main features (Dictionary) – Diccionario que
contiene, entre otras cosas, los nombres de los parámetros
asociados a cada técnica.
gathered information (Dictionary) – Diccionario que contiene todas las configuraciones recabadas ingresadas por el usuario (véase View/Main/MainWindow.py).
Returns Tkinter.Frame
Return type Instance
3.4.2.1.5.
ErrorFrame (clase)
Este Frame surge si durante el proceso interno en el Modelo (véase Model/MOEA)
se suscita algún error del cual el método no se pueda recuperar.
Entonces aquı́ se desplegará toda la información relativa a la falla, ası́mismo funciona como medida de contingencia para darle una salida al programa y evitar que
se quede atorado.
Parameters
parent (Tkinter.Frame) – Frame padre al que pertenece.
final results (Dictionary) – Diccionario que
contiene en este caso las caracterı́sticas alusivas a la falla
UNAM
Facultad de Ciencias
100
Manual Técnico
(véase Model/MOEA).
Returns Tkinter.Frame
Return type Instance
4.
Controller (sección)
Su función principal es la de establecer medidas de comunicación entre la Vista (ó View)
y el Modelo (ó Model) de tal manera que el Controller (ó Controlador) recibe los datos
recabados en la Vista y los transfiere al Modelo para que se puedan llevar a cabo las operaciones pertinentes y una vez concluidas dichas labores los resultados pasan por éste para llegar a la Vista y desde ahı́ graficarse apropiadamente.
De manera secundaria el Controlador ofrece métodos de saneamiento de los datos recabados en la Vista, con la finalidad de evitar al máximo disturbios indeseables en la sección
Modelo y que éste opere con total eficiencia, además de alimentar a la Vista con las técnicas (y sus respectivos parámetros) disponibles en la sección Modelo para ası́ permitirle
al usuario operar con éstas de manera expedita.
Dicho almacén se encuentra en la sección Controller/XML, donde se deduce que las
técnicas y caracterı́sticas secundarias se encuentran plasmadas en archivos .xml.
El proyecto contempla métodos para operar con dichos archivos y el usuario entonces
sólo tendrá que preocuparse por dar de alta la técnica pertinente en el archivo .xml adecuado (además de implementarla en Modelo) para que ésta sea reconocida en la sección Vista y se pueda hacer uso de ella.
A continuación se muestran los componentes principales de la sección Controller:
4.1.
Controller (clase)
Proporciona la infraestructura adecuada para poder comunicar la sección Vista
(ó View) con la sección Modelo (ó Model), apoyándose de las clases XMLParser y
Verifier.
El ciclo normal consiste en otorgar a la capa Vista (ó View) la información recabada en los archivos .xml con ayuda de la clase XMLParser con la finalidad de notificar al usuario de todas las técnicas disponibles.
Una vez ejecutada la opción de iniciar un proceso genético por el usuario, se recaban los datos ingresados por el usuario, los cuales pasan por un proceso de verificación y transformación empleando para ello los métodos de la clase Verifier.
En caso de haber al menos una falla en alguno de los procedimientos mencionados
anteriormente se regresa un mensaje de error, en otro caso se pasa la información
UNAM
Facultad de Ciencias
Manual Técnico
101
respectiva a la capa Model para que pueda operar con ésta.
En cualquiera de los dos casos anteriores se regresa la información resultante a la
Vista.
Returns Controller.Controller
Return type Instance
execute procedure(execution task count, generations queue, sanitized information)
Realiza la ejecución de algún algoritmo M.O.E.A. (Multi-Objective Evolutionary Algorithm) y se encarga de obtener los resultados apropiadamente.
Parameters
execution task count (Integer) – Una caracterı́stica numérica que identifica inequı́vocamente
a esta función que será ejecutada de las demás, ya
que el objetivo del proyecto es poder ejecutar varios de estos métodos de manera concurrente (véase
View/Additional/
ResultsGrapher/ResultsGrapherToplevel.py).
generations queue (Instance) – Una instancia a una cola (Queue), la cual servirá para escribir a
esa estructura el número actual de generación por el
que cursa el algoritmo. Esta acción es para fines de
concurrencia (véase View/MainWindow.py).
sanitized information (Dictionary) –
Los parámetros que ingresó el usuario debidamente
verificados y saneados.
Returns Un diccionario con información de los resultados de
haber ejecutado el M.O.E.A. seleccionado por el usuario,
la estructura del mismo puede verse en Model/Community/
Community.py.
Return type Dictionary
load features()
Regresa los datos correspondientes (debidamente verificados) a las
técnicas disponibles para el usuario, los cuales se mostrarán en
View/MainWindow.py (véase View/Additional/MenuInternalOption/
InternalOptionTab/FeatureFrame.py).
Esta técnica tiene como base los sı́miles que se encuentran en Controller/
XMLParser.py y Controller/Verifier.py.
UNAM
Facultad de Ciencias
102
Manual Técnico
Returns Una estructura con los métodos disponibles para el
usuario.
Return type Dictionary
load mop examples()
Obtiene los datos correspondientes (previamente verificados) a los M.O.P.’s
(Multi-Objective Problems) que se utilizan en View/
MainWindow.py (véase View/Additional/MenuInternalOption/
InternalOptionTab/MOPExampleFrame.py).
Esta técnica tiene como base las análogas que se encuentran en Controller/XMLParser.py y Controller/Verifier.py.
Returns Una estructura con los M.O.P.’s disponibles para el
usuario.
Return type Dictionary
load python expressions()
Obtiene los datos correspondientes (previamente verificados) a las expresiones de Python, las cuales se usan para evaluar funciones objetivo más eficientemente (véase View/Additional/MenuInternalOption/
InternalOptionTab/PythonExpressionFrame.py).
Esta función se apoya de las homónimas localizadas en
Controller/XMLParser.py y Controller/Verifier.py.
Returns Una estructura con las expresiones de Python disponibles.
Return type Dictionary
sanitize settings(general information, features)
Lleva a cabo la verificación y saneamiento de todos los datos que ha ingresado el usuario en la sección View (véase View/MainWindow).
Parameters
general information (Dictionary) – El
conjunto de datos que el usuario ha ingresado o seleccionado.
features (Dictionary) – Una colección de todos los elementos con sus caracterı́sticas disponibles
para el usuario.
Returns El diccionario que contiene todos los datos debidamente saneados.
UNAM
Facultad de Ciencias
Manual Técnico
103
Return type Dictionary
save python expressions(data)
Inserta las expresiones de Python que ha ingresado el usuario en el archivo
.xml correspondiente.
Parameters
data (List) – Un conjunto de las expresiones que
ha ingresado el usuario. Cada elemento es a su vez
una lista con dos elementos, el primero es la expresión original (la que es comprensible por el usuario), mientras que la segunda es la expresión equivalente en Python.
Returns Mensaje “OK” si la inserción ha sido exitosa, mientras que en caso de que haya habido un error entonces el
mensaje es “ERROR”.
Return type String
4.2.
XMLParser (clase)
Permite leer y escribir a archivos .xml (los que se localizan en Controller/XML),
los cuales tienen almacenados:
Los nombres de las técnicas con sus parámetros que se encuentran disponibles en la sección Model (Features.xml).
La colección de palabras reservadas para poder emplear funciones y constantes auxiliares en las funciones objetivo
(PythonExpressions.xml).
El conjunto de M.O.P.’s (Multi-Objective Problems, localizados en MOPExamples.xml).
Dichos archivos proporcionan la información necesaria a la interfaz gráfica (véase
View/MainWindow.py).
Returns Controller.XMLParser
Return type Instance
indent(element, level=0)
Indenta (coloca espacios) apropiadamente en un documento .xml para poder
distinguir más rápidamente los distintos niveles que existen en éste.
Parameters
UNAM
Facultad de Ciencias
104
Manual Técnico
element (String) – Una lı́nea del archivo .xml
level (Integer) – El nivel en el que se está haciendo el proceso de identado.
load xml features(features filename)
Realiza la lectura del archivo que contenga el listado de técnicas y sus parámetros disponibles (véase Model) y carga todos los elementos que se encuentran en éste.
Parameters
features filename (String) – Nombre del
archivo en cuestión.
Returns Un diccionario que contiene todos los elementos del
archivo.
Return type Dictionary
load xml mop examples(features filename)
Lleva a cabo la lectura del archivo que contenga el listado de M.O.P.’s (MultiObjective Problems) y carga todos los elementos que se encuentran en éste.
Un M.O.P es una mezcla de variables de decisión y funciones objetivo ya
estudiadas, se utilizan para reproducir su comportamiento y ası́ garantizar,
además de un correcto funcionamiento del programa, una opción rápida para
probar las técnicas que se ofrecen.
Parameters
features filename (String) – Nombre del
archivo en cuestión.
Returns Un diccionario que contiene todos los elementos del
archivo.
Return type Dictionary
load xml python expressions(features filename)
Realiza la lectura del archivo que contenga el listado de expresiones en Python y carga todos los elementos que se encuentran en éste.
La idea detrás de esto es que, al momento de crear y/o evaluar funciones objetivo existen algunas palabras reservadas que no pueden ser usadas directamente como son las funciones trigonométricas, por eso es que estas expresiones sirven como intermediarias entre el usuario y el intérprete de Python.
En ocasiones a este tipo de expresiones, no sólo en el ámbito actual sino en
general, se les conoce como azúcar sintáctica.
UNAM
Facultad de Ciencias
Manual Técnico
105
Parameters
features filename (String) – Nombre del
archivo en cuestión.
Returns Un diccionario que contiene todos los elementos del
archivo.
Return type Dictionary
write xml python expressions(features filename, features)
Sobreescribe el archivo donde se encuentra el listado de expresiones en Python.
El objetivo es que, una vez ejecutándose el programa y a través del menú pertinente (véase View/Additional/MenuInternalOption/
InternalOptionTab/PythonExpressionFrame.py), el usuario pueda añadir
o eliminar las expresiones de Python que desee.
En ocasiones a este tipo de expresiones, no sólo en el ámbito actual sino en
general, se les conoce como azúcar sintáctica.
Parameters
features filename (String) – Nombre del
archivo en cuestión.
features (List) – La estructura que contiene las
expresiones para ser guardadas en el archivo .xml.
4.3.
Verifier (clase)
Realiza principalmente la verificación y transformación adecuada de los datos
que el usuario introduce en View/MainWindow.py para alimentar a los algoritmos que se encuentran en la sección Model (más en concreto Model/MOEA).
En caso de haber algún error regresa los mensajes de error adecuados para que puedan ser interpretados por la capa Vista y precisar al usuario el acontecimiento ocurrido.
Por otra parte si se ha llevado a cabo la verificación correctamente se obtiene la información transformada apropiadamente.
De manera secundaria también ofrece métodos de verificación para la extracción y
colocación de datos en los archivos .xml (véase XMLParser y el directorio Controller/XML).
Returns Controller.Verifier
Return type Instance
UNAM
Facultad de Ciencias
106
Manual Técnico
cast parameter(parameter value, parameter settings)
Note: Este método es privado.
Verifica un parámetro asociado a alguna técnica. Primero asegura que el
parámetro se pueda evaluar correctamente, posteriormente convierte apropiadamente el tipo de dato pasando de String a Boolean, Integer ó Float según
corresponda.
Parameters
parameter value (Float) – El valor actual del
parámetro.
parameter settings (Dictionary) – Un
diccionario que contiene el tipo del parámetro (bool,
integer ó float) y el rango que debe tomar tanto inferior como superior.
Returns El valor saneado del parámetro si no hay fallas, pero
si se encuentra algún desperfecto entonces se regresa un
diccionario con la información detallada del desperfecto.
Return type (Boolean, Integer, Float)/Dictionary
verify instance(name class)
Note: Este método es privado.
Devuelve una instancia del nombre de la clase que se le pase como parámetro.
Esta funcionalidad es útil sobre todo para la sección Model ya que uno de los
objetivos es proporcionar al usuario de una infraestructura rápida con técnicas fácilmente intercambiables sin necesidad de estar importando explı́citamente cada una de éstas.
De esta forma con base en una instancia se puede ejecutar cualquier método de manera dinámica.
Parameters
name class (String) – el nombre de la clase
(con su ruta) de la cual se desea obtener una instancia.
Returns Una instancia de la clase solicitada si el proceso es exiUNAM
Facultad de Ciencias
Manual Técnico
107
toso, en otro caso se obtiene un diccionario con los detalles
de la falla.
Return type Instance/Dictionary
get dynamic function(complete function)
Obtiene una instancia de una función en un String de la forma biblioteca.función.
Este método se usa para convertir las expresiones de Python en instancias
que serán utilizadas al momento de evaluar funciones objetivo (véase View/
Additional/MenuInternalOption/InternalOptionTab/
PythonExpressionFrame.py, Controller/XML/PythonExpressions.xml)
Parameters
complete function (String) – un String
preferentemente de la forma biblioteca.función (el
punto debe ir incluido).
Returns Una instancia de la función asociada a la biblioteca.
Return type Instance
sanitize decision variables(vector variables)
Verifica el conjunto de elementos de la categorı́a “Decision Variables” (véase
View/Main/DecisionVariable/DecisionVariableFrame.py), los cuales son
precisamente las variables de decisión.
Primero se asegura que cada variable de decisión se pueda evaluar correctamente, posteriormente convierte apropiadamente el tipo de dato de sus respectivos rangos, pasando de String a Float.
Parameters
vector variables (Dictionary) – El vector
que contiene las variables de decisión con sus correspondientes rangos.
Returns Un diccionario con las variables de decisión y sus rangos debidamente saneados.
Return type Dictionary
sanitize genetic operators settings(genetic operators settings,features,
vector variables, number of decimals)
Revisa la integridad y sanea los datos que ingresó el usuario concernientes a
la sección “Genetic Operators Settings” (véase View/Main
/GeneticOperator/GeneticOperatorFrame.py).
Parameters
UNAM
Facultad de Ciencias
108
Manual Técnico
genetic operators settings (Dictionary)
– El listado de técnicas y sus parámetros que el usuario eligió en la sección correspondiente.
features (Dictionary) – El conjunto de las
opciones disponibles para esta sección, ası́ como sus
caracterı́sticas.
vector variables (List) – El vector de variables de decisión.
number of decimals (Integer) – El número
de decimales que llevará cada solución en Population.
Returns Un diccionario que, dependiendo de los resultados,
puede contener o información del error encontrado durante
el procedimiento o todos los datos debidamente verificados
y transformados.
Return type Dictionary
sanitize moeas settings(moeas settings, features)
Verifica integridad y lleva a cabo el saneamiento de los datos que ingresó el
usuario concernientes a la sección “MOEAs Settings” (véase View/Main/
MOEA/MOEAFrame.py).
Parameters
moeas settings (Dictionary) – El listado de
técnicas y sus parámetros que el usuario eligió en la
sección correspondiente.
features (Dictionary) – El conjunto de las
opciones disponibles para esta sección, ası́ como sus
caracterı́sticas.
Returns Un diccionario que, dependiendo de los resultados,
puede contener o información del error encontrado durante
el procedimiento o todos los datos debidamente verificados
y transformados.
Return type Dictionary
sanitize objective functions(vector variables,available expressions,
vector functions)
Lleva a cabo el saneamiento de los elementos correspondientes a la categorı́a
“Objective Functions” (véase View/Main/ObjectiveFuncion/
UNAM
Facultad de Ciencias
Manual Técnico
109
ObjectiveFunctionFrame.py), los cuales son de hecho sólo las funciones
objetivo.
Parameters
vector variables (Dictionary) – El vector
de variables de decisión que el usuario ha ingresado.
available expressions (Dictionary) –
Un listado con las expresiones de Python disponibles
(véase Controller/XML/PythonExpressions.xml,
View/Additional/MenuInternalOption/
InternalOptionTab/PythonExpressionFrame.py).
vector functions (Dictionary) – El vector
de funciones objetivo ingresados por el usuario.
Returns Si el proceso fue exitoso, se obtiene el mismo vector functions, en otro caso se regresa un diccionario con
información detallada sobre el errror encontrado.
Return type List/Dictionary
sanitize population settings(population settings, features)
Verifica la consistencia y realiza el saneamiento de los datos que ingresó el
usuario concernientes a la sección “Population Settings” (véase View/Main/
Population/PopulationFrame.py).
Parameters
population settings (Dictionary) – El
listado de técnicas y sus parámetros que el usuario
eligió en la sección correspondiente.
features (Dictionary) – El conjunto de las
opciones disponibles para esta sección, ası́ como sus
caracterı́sticas.
Returns Un diccionario que, dependiendo de los resultados,
puede contener o información del error encontrado durante
el procedimiento o todos los datos debidamente verificados
y transformados.
Return type Dictionary
sanitize techniques(general information, features)
Realiza una verificación adicional concerniente al tipo
de representación de todas las técnicas seleccionadas.
UNAM
Facultad de Ciencias
110
Manual Técnico
Lo anterior significa que, usando la Representación Cromosómica
(ó Chromosomal Representation, véase Model/
ChromosomalRepresentation, View/Main/Population/
PopulationFrame.py), todas las técnicas deben concordar con el mismo tipo
de representación cromosómica que se haya seleccionado.
Para esta versión sólo están disponibles las representaciones binaria y de punto flotante.
Parameters
general information (Dictionary) – El
listado de caracterı́sticas disponibles (véase XMLParser.py).
features (Dictionary) – La colección de datos que seleccionó el usuario en la sección View.
Returns Un diccionario el cual, si la verificación es exitosa, es
el mismo general informacion, si por el contrario falla,
entonces es un diccionario que contiene detalles del error.
Return type Dictionary
verify load xml features(data)
Verifica que los datos obtenidos de las técnicas disponibles que alimentan a
la Ventana Principal (véase View/MainWindow.py) no tengan defectos. Este
método se apoya de load xml features localizado en Controller/
XMLParser.py.
Parameters
data (Dictionary) – Los datos que son leı́dos
por el método load xml features mencionado previamente.
Returns Si los datos contienen algún error, un diccionario con
las caracterı́sticas de la falla, en otro caso los datos mismos.
Return type Dictionary
verify load xml mop examples(data)
Revisa que los M.O.P.’s (Multi-Objective Problems) que se muestran en
View/MainWindow.py a través de View/Additional/MenuInternalOption/
InternalOptionTab/MOPExampleFrame.py estén libres de errores.
Este método se apoya de load mop examples localizado en Controller/
XMLParser.py.
UNAM
Facultad de Ciencias
Manual Técnico
111
Parameters
data (Dictionary) – Los datos que son leı́dos
por el método load mop examples mencionado previamente.
Returns Si los datos contienen algún error, un diccionario con
las caracterı́sticas de la falla, en otro caso los datos mismos.
Return type Dictionary
verify load xml python expressions(data)
Revisa que las expresiones de Python estén libres de errores.
Este método se apoya de load python expressions localizado en Controller/XMLParser.py.
Parameters
data (Dictionary) – Los datos que son leı́dos
por el método load python expressions mencionado previamente.
Returns Si los datos contienen algún error, un diccionario con
las caracterı́sticas de la falla, en otro caso los datos mismos.
Return type Dictionary
verify write xml python expressions(data)
Verifica la consistencia de los datos relativos a las expresiones de Python antes de ser escritos en el archivo .xml correspondiente.
Parameters
data (List) – El conjunto de expresiones que
serán almacenadas.
Returns Un mensaje “OK” si la verificación fue satisfactoria, y
“ERROR” en caso de aparecer alguna falla.
Return type String
UNAM
Facultad de Ciencias
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.5 Linearized : No Page Count : 111 Page Mode : UseOutlines Author : Title : Subject : Creator : LaTeX with hyperref package Producer : pdfTeX-1.40.13 Create Date : 2017:02:12 19:39:00-06:00 Modify Date : 2017:02:12 19:39:00-06:00 Trapped : False PTEX Fullbanner : This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian) kpathsea version 6.1.0EXIF Metadata provided by EXIF.tools