Optimización de Horarios de Examen Utilizando Algoritmos

Anuncio
7
Optimización de Horarios de Examen Utilizando Algoritmos Genéticos
Sergio Morel1, Gabriela Bobadilla2
Becario del PDTA categoría iniciación científica
Universidad Nacional- Facultad Politécnica
1
[email protected], [email protected]
1
Resumen. En este trabajo de investigación se utiliza la inteligencia artificial, específicamente los
algoritmos genéticos, para optimizar los horarios de exámenes de tal forma que las materias queden lo
más distanciadas posibles. Para la elaboración del horario de exámenes se debe tener en cuenta ciertas
restricciones, tales como: el horario disponible para rendir las asignaturas, la disponibilidad del profesor y
de los alumnos, y la dificultad de los exámenes. Los algoritmos genéticos se encargan de calificar un
conjunto de horarios iniciales, y luego de encontrar el horario que mejor cumpla con los requerimientos.
Se ha programado en Java utilizando el entorno de desarrollo Eclipse; los resultados obtenidos fueron
satisfactorios en la optimización de horarios de exámenes para cada semestre en forma individual.
Palabras Claves: algoritmos genéticos, horarios de examen, optimización, inteligencia artificial.
Abstract. This paper uses artificial intelligence, specifically genetic algorithms to optimize the exam
schedules so that the exam dates can be separated from each other. For the construction of the schedule
many considerations must be taken, such as: the available dates for each exam, the time availability of the
teachers and students, and the grade of difficulty of each exam. The genetic algorithms are responsible for
qualifying a set of initial schedules, and then finding the schedule that best meets the requirements. The
programming was made in Java, using an integrated development environment called Eclipse.
Satisfactory results were obtained when optimizing the schedules for each semester individually.
Keywords: genetic algorithm, exam schedule, optimization, artificial intelligence.
1. Introducción
Uno de los objetivos de este trabajo es introducir
en la vida cotidiana el uso de la inteligencia
artificial, y de esta manera delegar a las
computadoras algunas de las tareas que
actualmente ocupan un tiempo importante de las
personas. De esta forma, ellas pueden aumentar
su eficiencia en el trabajo que están
desempeñando, pues enfocan su concentración
en las demás tareas.
En esta investigación se utilizan los algoritmos
genéticos, o evolutivos, que han demostrado ser
los más eficientes para los trabajos de
optimización. Estos algoritmos se basan en la
teoría de la evolución de Charles Darwin, según
la cual todos los seres vivos evolucionan por
medio de la selección natural, proceso en el que
los representantes más aptos de cada especie son
los que tienen mayor oportunidad de procrear, lo
que permite que la siguiente generación herede
características que ayuden a mejorar su aptitud
con relación a la generación anterior.
Los algoritmos genéticos crean una primera
generación de resultados, y tratan de simular la
selección natural para obtener resultados cada
vez más satisfactorios. Las soluciones de un
problema se representan de forma similar a la
estructura
del
ADN
(Acido
Desoxirribonucleico), en donde una secuencia
de aminoácidos determina cuáles serán las
características de cada individuo. Este tipo de
representación facilita la implementación de
algoritmos de cruce y mutación.
El algoritmo de cruce es el que se encarga de
seleccionar resultados iniciales, y combinarlos
para crear los nuevos resultados que
pertenecerán a la siguiente generación. La forma
de seleccionar dichos resultados es muy
importante, pues de ello depende que se pueda
ARTÍCULOS CIENTÍFICOS – INFORMÁTICA – Nº 4 – AÑO 2008
8
simular correctamente la selección natural de
Darwin. El modo de realizar las combinaciones
también es un punto importante a tener en
cuenta.
inglés) Eclipse se puede conseguir en la página
http://www.eclipse.org/.
El algoritmo de mutación se encarga de
modificar, generalmente en forma aleatoria, la
población de resultados. Esto es necesario,
debido a que el algoritmo de cruce puede
estancarse con una población de resultados
iguales o similares. Gracias a la mutación se
puede introducir variedad a la población y de esa
manera examinar diferentes resultados posibles.
4.1. Representación
El algoritmo que se utiliza para calificar a cada
resultado es de suma importancia, puesto que
define cuáles resultados son los más
satisfactorios. La alteración de este algoritmo
puede cambiar totalmente los resultados
obtenidos.
2. Objetivo
El objetivo de este proyecto es brindar a la
Facultad Politécnica de la UNE un software
capaz de generar automáticamente los horarios
para los exámenes parciales y finales; y de esta
forma ahorrar gran parte del tiempo de su
elaboración. Además, el programa tiene como
objetivo que estos horarios sean óptimos y se
adecuen a las disponibilidades de los profesores
y alumnos.
4. Métodos
Lo primero que se debe definir es la forma de
representar los resultados que se van a evaluar.
Para este programa se utilizó un vector de
números enteros para representar cada horario
de examen. Cada posición del vector representa
una materia, y el valor en esa posición determina
el horario de dicha materia.
Los horarios se representan de 30 en 30 minutos
a partir del primer día disponible. Si se considera
el lunes 1 como el primer día, una materia que
tenga como valor un 0 estará definida para el
lunes 1 a las 00:00hs.; de la misma forma, una
materia que tenga como valor 5 estará definida
para el lunes 1 a las 02:30hs. La Figura 1
muestra un ejemplo de cómo se representa el
horario, mientras que la Tabla 1 muestra cómo
se interpreta.
Figura 1. Representación de un horario
Horario
3. Materiales
Para la implementación de los algoritmos
genéticos, se decidió utilizar el lenguaje de
programación Java debido a su gran portabilidad
y por las ventajas que ofrece la programación
orientada a objetos. Para programar en Java se
necesita tener instalado el JDK (Java
Development Kit) para el sistema operativo a
utilizar. El JDK es la herramienta que permitirá
compilar el programa a “bytecodes”. Los
“bytecodes” después pueden ser ejecutados en
cualquier máquina que disponga de una máquina
virtual java JVM (Java Virtual Machine). Todo
lo necesario se puede conseguir en la página
http://www.java.com/.
Como ayuda para la programación en Java se
decidió utilizar el entorno de desarrollo
integrado Eclipse. Mediante éste se pudo
acelerar la programación gracias a la ayuda que
proporciona en el momento de detectar errores,
en el seguimiento de variables, etc. El entorno
de desarrollo integrado (IDE por sus siglas en
Lunes
Materia
Valor
01
15:00hs.
: Materia 3
(30)
Viernes 05
14:00hs.
: Materia 5
(220)
Lunes
08
14:00hs.
: Materia 1
(364)
Jueves
11
14:00hs.
: Materia 4
(508)
Martes
16
08:00hs.
: Materia 2
(736)
Sábado
20
08:00hs.
: Materia 6
(928)
Tabla 1. Interpretación de un horario
4.2. Generación
En este programa se incluyen las restricciones
fuertes en el momento de la generación de los
horarios; de esta forma, no se pierde tiempo con
horarios que no son factibles, y se libera al
algoritmo de calificación de tratar con dichos
horarios. Se llama restricciones fuertes a
aquellas que todos los horarios deben cumplir
para ser factibles, como por ejemplo que los
exámenes se realicen en horarios que tengan
disponibles los profesores y alumnos.
ARTÍCULOS CIENTÍFICOS – INFORMÁTICA – Nº 4 – AÑO 2008
9
A cada materia se le puede asignar varios rangos
que delimiten los horarios en que son factibles,
esto permite, por ejemplo, restringir a una
materia para que se genere solo los días lunes,
como también fijar la fecha y hora exacta de una
materia cuyo horario ya queda definido de
antemano.
En caso de que no se asigne rangos a la materia,
ésta puede generarse desde las 07:00hs hasta las
19:00hs de cualquier día en forma aleatoria
(incluyendo los domingos).
La duración del periodo de examen en este
programa se mide en semanas; en caso de que el
periodo de exámenes no dure una cantidad
entera de semanas, se puede utilizar los rangos
para evitar que algunos exámenes caigan fuera
del tiempo permitido.
4.2.1. Generación sin rangos
Para generar el valor de una materia, en caso de
que no tenga rangos asignados, se utiliza la
fórmula descripta más abajo. Cabe destacar que
la función rand (x, y ) genera valores aleatorios
entre x e y, incluyendo los límites.
Se segmenta esta fórmula para que pueda ser
comprendida con mayor facilidad. Para generar
en un día perteneciente al periodo de examen se
utiliza este término:
(24 × 2) × rand (0, [semanas × 7] − 1) ;
en caso
de que rand devuelva 0, caerá en el primer día;
en caso que devuelva 1, caerá en el segundo día;
y en caso de que devuelva [semanas × 7 ] − 1 ,
caerá en el último día.
Si se utilizara solo la parte de la fórmula
explicada anteriormente, todos los exámenes
comenzarían a las 00:00hs, por lo tanto es
necesario sumarle el término (7 × 2 ) , el cual
define que los exámenes puedan comenzar
recién a partir de las 07:00hs. Luego, sumarle
rand (0, [12 × 2]) permite que el horario pueda
variar 12 horas a partir de las 07:00hs. De esta
manera el horario generado puede llegar hasta
las 19:00hs.
4.2.2. Generación con rangos
rango utiliza dos posiciones consecutivas para
definir los límites. Todos los rangos empiezan
en posiciones pares; estando, por ejemplo, los
límites del primer rango en las posiciones 0 – 1.
Cada materia puede tener un número indefinido
de rangos. La Figura 2 muestra los rangos
asignados a la Materia 1. Puede observarse que
en este caso cada rango contiene límites
superiores e inferiores iguales, esto es debido a
que se desea limitar el horario de la materia a los
días lunes a las 14:00hs. Cada rango
corresponde a un lunes de cada semana del
periodo de examen.
Figura 2. Representación de los rangos de una materia
Para generar los valores dentro de los rangos,
primeramente se procede a elegir uno de ellos
utilizando esta formula:
Después de haber seleccionado el rango en
forma aleatoria, se deben generar los datos
dentro de los límites de ese rango de esta forma:
4.3. Calificación
Uno de los algoritmos más importantes es el que
se utiliza para calificar a los resultados, ya que
aquí se define cuáles son los resultados que se
pretende hallar.
En este caso el objetivo es obtener horarios en
los que las materias estén lo más separadas
posible. Para lograr este cometido se optó por
imitar el comportamiento de las cargas eléctricas
de signos iguales. Estas cargas se repelen con
una fuerza F que se calcula de la siguiente
manera según la “Ley de Coulomb”
F = k×
q1 × q 2
r2
donde q1 y q2 son las
magnitudes de las cargas participantes y r es la
distancia entre ellas.
El valor de la fuerza de repulsión aumenta a
medida que las cargas se acercan, puesto que el
valor de r se hace cada vez menor, esto se puede
observar en la Figura 3.
Para representar los rangos de una materia se
utiliza un vector de tamaño par, en donde cada
ARTÍCULOS CIENTÍFICOS – INFORMÁTICA – Nº 4 – AÑO 2008
10
Individuo
Calificación
Porcentaje
A
300
25,00%
B
100
8,33%
C
250
20,83%
D
50
4,17%
E
500
41,67%
Tabla 2. Población de 5 Individuos
Figura 3. Gráfico de la función de calificación (verde), y
de la Ley de Coulomb (azul)
Lo que nosotros buscamos es dar mayor
calificación a los horarios más distantes, por lo
tanto la calificación se obtendrá hallando la
inversa de la sumatoria de los resultados
obtenidos con la Ley de Coulomb. La
calificación se obtendrá por medio de esta
fórmula:
N −1 N −1 p × p
1
j
= ∑∑ i
calificaci on i = 0 jj=≠0i dist (i , j )2
Donde p es el peso asignado a cada materia
según el grado de dificultad; la función
dist (i, j ) es la que halla la distancia entre las
materias i y j; y N es el número total de
materias. En el caso de que la distancia entre 2
materias sea 0, el valor de la distancia se
sustituye por 1, para evitar una división por cero,
y luego se aplica una penalización a la
calificación final, dividiéndola por 10 por cada
sustitución hecha.
El tamaño de la población no varía al realizar el
cruce, y la totalidad de los individuos de la
nueva generación son resultado de los cruces
con los individuos de la generación padre.
Para realizar el cruce es necesario seleccionar
los individuos que participarán del mismo, para
ello se crea una tabla de cruce de N filas y 2
columnas. Los cruces se realizarán entre los
individuos de la misma fila.
Los individuos son cargados en la tabla de tal
forma que los individuos con mayor porcentaje
tengan mayores probabilidades de ser sorteados.
Para el sorteo, se asigna un rango a cada
individuo según su porcentaje de aptitud, como
puede verse en la Figura 4, y luego se procede a
generar en forma aleatoria números del 0 al 100.
Figura 4. Rango de Probabilidad para Sorteo
4.4. Cruce
A cada individuo (horario), una vez que
pertenezca a una población (conjunto de
horarios), se le asigna un porcentaje de aptitud
con respecto a los demás miembros de la
población. Este porcentaje se calcula de la
siguiente forma:
calificacioni
porcentajei = 100 × N −1
∑ calificacion j
j =0
Una vez seleccionados los individuos que
participarán del cruce, se procede a realizarlo.
En este programa, el cruce se realiza recorriendo
materia por materia; para cada materia se genera
un valor aleatorio entre 0 y 1, de esa forma se
elige el valor de uno de los participantes para el
nuevo individuo. Un individuo puede pasar a la
siguiente generación sin ser modificado si en la
tabla de cruce aparece en las 2 columnas de la
misma fila, puesto que se trataría de un cruce
consigo mismo. La Figura 5 muestra un ejemplo
de cruce.
En donde N es la cantidad de individuos de la
población. La Tabla 2 nos muestra un ejemplo
de una población de 5 individuos.
ARTÍCULOS CIENTÍFICOS – INFORMÁTICA – Nº 4 – AÑO 2008
11
Se pudo observar que para tener mayor variedad
de soluciones es mejor asignar una hora exacta
de inicio de examen para cada materia, en lugar
de un rango de horas posibles. Esto se debe a
que al utilizar los rangos, se obtienen un
conjunto de soluciones similares, en donde cada
solución tiene los exámenes en el mismo día que
las demás, pero con variaciones mínimas en el
horario de inicio.
Figura 5. Ejemplo de Cruce
4.5. Mutación
Para realizar la mutación se debe establecer un
porcentaje de mutación, el cual determinará con
qué probabilidad un individuo será modificado;
y un porcentaje de intensidad, el cual indicará
cuánto variará el individuo.
Primeramente, se procede a recorrer la
población; para cada individuo se genera un
valor aleatorio desde 1 hasta 100, si el valor
generado es menor o igual que el porcentaje de
mutación, entonces ese individuo será
seleccionado para la mutación.
Una vez seleccionado el individuo, se procede a
recorrer cada materia. Se vuelve a generar un
valor aleatorio entre 1 y 100, y en caso de que el
valor generado sea menor o igual al porcentaje
de intensidad, se generará un nuevo valor para la
materia.
5. Discusión
Para utilizar los algoritmos genéticos es
necesario determinar ciertos parámetros que
pueden influir en la calidad de los resultados que
obtenemos. Entre ellos se pueden incluir el
método de parada del algoritmo, el tamaño de la
población y los parámetros de mutación.
Los mejores resultados se obtuvieron con los
siguientes parámetros: Tamaño de población 20,
probabilidad de mutación 25%, intensidad de
mutación de 20%. Para el criterio de parada se
decidió utilizar 500 de ciclos de cruce y
mutación, debido a que utilizar una calificación
mínima puede generar ciclos infinitos.
Se podría también tener en cuenta otra forma
alternativa de calificar a los individuos. Por
ejemplo, se podría tener en cuenta solo la
materia inmediatamente anterior en el momento
de calcular la calificación, y utilizar solamente el
peso de la materia actual, de acuerdo a la
siguiente formula:
En donde materiaAnterior (i ) encuentra la
posición de la materia con el horario
inmediatamente anterior a la materia actual. Se
debe tener en cuenta que la materia con el
horario más temprano no tendrá materia anterior,
por lo tanto no se la debe incluir en el cálculo.
Otro detalle que se podría tener en cuenta es la
manera de generar los horarios dentro de los
rangos. En este programa se realiza un sorteo en
forma aleatoria de los rangos, y luego se procede
a generar dentro del rango seleccionado. Esto
causa que los horarios, dentro de los rangos
menores, tengan mayor probabilidad de ser
seleccionados.
Para
solucionar
este
inconveniente se podría utilizar un método
similar al utilizado en el cruce, mostrado en la
Figura 5.
6. Conclusión
Mediante este proyecto se logró solucionar el
problema de creación y optimización de horarios
para la Facultad Politécnica de la UNE, a través
de la utilización de la inteligencia artificial.
Durante la realización del proyecto se buscó la
mejor forma de representar y resolver el
problema; y como resultado se pudo encontrar
más de una manera de resolverlo.
Para guardar los resultados de mayor
calificación, se decidió utilizar un vector de
tamaño 5, en el cual se va guardando los
individuos de cada generación con la mayor
calificación, sin repetir ningún individuo.
ARTÍCULOS CIENTÍFICOS – INFORMÁTICA – Nº 4 – AÑO 2008
12
7. Referencias
[1]GOLDBERG, D.E. (1989): Genetic Algorithms
in Search, Optimization, and Machine Learning.
Addison-Wesley, Reading, MA.
Wikipedia, La enciclopedia libre. Algoritmo
genético [17-11-2007]
http://es.wikipedia.org/wiki/Algoritmo_genético
ALGORITMOS GENETICOS [18-03-2008]
http://eddyalfaro.galeon.com/geneticos.html
Juan Julian Merelo Guervos. Tutorial de
algoritmos evolutivos [12-03-2008]
http://geneura.ugr.es/~jmerelo/ie/ags.htm
[Linden Ricardo 2006], “Algoritmos Geneticos,
Uma importate ferramenta da Inteligência
Computacional”, Rio de Janeiro: Brasport.
ARTÍCULOS CIENTÍFICOS – INFORMÁTICA – Nº 4 – AÑO 2008
Descargar