Sei sulla pagina 1di 11

El problema de programación de horarios.

Uso de una colonia de hormigas


__________________________________________________________________________________

INSTITUTO TECNOLOGICO DE CIUDAD MADERO

ASIGNATURA: ANALISIS Y DISEÑO DE ALGORITMOS II

PROFESOR: DR. RODOLFO PAZOS RANGEL

PRESENTA:

CALOCA CASTILLO JOSÉ DE JESÚS


INVESTIGACION:

EL PROBLEMA DE PLANIFICACION DE HORARIOS.

AGOSTO-DICIEMBRE 2009

1
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________
Descripción del problema

Todos los seres humanos que realizamos una actividad nos vemos en
la necesidad de planificar, para recordar tareas derivadas de nuestra
actividad principal. A menudo lo más simple es recordar mentalmente
o anotarlo en algún sitio visible.

Sin embrago en el ámbito empresarial resulta mucho mas


complicado saber cuales serian las fechas de entrega exacta tiempos
de holgura, etc. dado que en este tipo de sitios suele tener un costo
elevado.

La programación de horarios es un ejemplo palpable en una


institución educativa como I.T.C.M. ya que las clases se imparten en
una hora y sitio asignado y nadie mas puede ocupar ese sitio en ese
lapso más que las personas a quienes se les asigno previamente.

El problema de programación de horarios tiene sus orígenes en la


segunda guerra mundial, donde la necesidad de abastecimiento a las
operaciones militares era urgente.

El Job Shop Scheduling Problem (en ingles) es un problema de


optimización combinatoria que de acuerdo con Emmanuel Téllez
Enríquez en su Tesis “Uso de una colonia de hormigas para resolver el
problema de programación de horarios”

“consiste, de forma genérica, en la asignación de un número


determinado de actividades en un número finito de recursos
disponibles. El objetivo al optimizar este problema es encontrar una
permutación de dichas actividades que minimice el tiempo de término
de todas las actividades en conjunto” (Pág. 6,2007)

Definición formal del problema

Un JSSP clásico esta determinado por el tamaño m X j donde j es el


numero de trabajos desde j= {J1, J2.... NJ} y M el conjunto de
maquinas del problema desde {Mi…..Mm}. Donde deberá de existir
una relación para cada J con una M

La relación de cada trabajo con cada máquina conforma una relación binaria
NJ --Mm llamada Operación (Jam).

1
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________

Figura1. Representación grafica de la relación de tamaño j x m

El total de operaciones del problema es denotado por OJM =


{O1,1,O1,2,O1,3, . . . ,Oj,m}. El conjunto de operaciones O
correspondientes al mismo trabajo es conocido como secuencia
tecnológica S tal que S ={ Si....Sm } donde m es el numero de
maquinas del problema por lo tanto para cada trabajo j tenemos una
secuencia tecnológica OJS = {Oj1,Oj2,Oj3, . . . ,Ojs}. Esto debido a
que el JSSP clásico se requiere que exista en cada secuencia
tecnológica de trabajo por cada maquina del problema

Cada operación (j,m) tiene asociado un tiempo denominado: tiempo


de procesamiento, y es denotado por la letra t, este parámetro indica
el tiempo requerido para el trabajo j en la maquina m.

Representación de la soluciones

Para la representación del modelo del problema Téllez usa un grafo


disyuntivo como G=(V, C U D) . De donde se coloca un conjunto de
V nodos representando las operaciones (trabajo maquina) y se
añaden los tiempos de procesamiento de cada operación en la parte
superior de cada una de ellas.

Figura 2. Construcción del grafo incluyendo nodos de inicio y


término.

Se coloca un conjunto de arcos conjuntivos C que indican la


secuencia tecnológica de las operaciones.

2
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________
Finalmente se añade el conjunto de arcos D disyuntivos que indican
los pares de operaciones que se ejecutan en la misma máquina.

Figura 3. Grafo con los arcos conjuntivos y disyuntivos.

Representación binaria. Al convertir los arcos disyuntivos en


conjuntivos de un JSSP representado en el grafo el programa se
convierte en semiactivo que según el mismo Téllez: “

Un programa semiactivo es el obtenido una selección completa


consistente” (Pág. 13,2007) . Ejemplos de estos son los algoritmos
evolutivos como el mismo sistema de colonia de hormigas abordado
en esta investigación, métodos de aproximación como es el de
búsqueda tabú.

Para el etiquetado de cada uno de los arcos disyuntivos se usa un 0


o 1. Así un programa puede ser representado por una cadena de
tamaño mj (j − 1) /2. La figura 2.8 muestra un ejemplo, donde un
arco que conecta Oij y Okj (i < k) es etiquetado como 1 si el arco es
dirigido de Oij a Okj (entonces Oij es procesada antes que Okj) o 0, si
es el otro caso.

Figura 3. Representación binaria

Por otra parte la representación por permutación consiste en


conjunto de permutaciones de trabajos realizados por la maquina,
donde hay m permutaciones de permutaciones del problema, la
cadena que se forma es una matriz de secuencia de trabajos.

3
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________

Las representaciones anteriores son apenas el esquema de


codificación necesario para la resolución del problema, y se puede
elegir el mas adecuado para la aplicación de la colonia de hormigas
de acuerdo al tamaño del problema.

Planes de trabajo.

Se menciona en la sección anterior que un programa semiactivo


presenta una selección, esto es con el fin de llevar a cabo el
recorrido en el grafo equivalente a la solución. Una selección según
Téllez es “es un conjunto de arcos dirigidos seleccionados de los arcos
disyuntivos” (Pág. 12,2007) así una selección completa son todos
los grafos disyuntivos seleccionados y completa consistente, si el
grafo dirigido que resulta es acíclico.

Importancia.

Radica en que se presenta en casi todas las actividades de la vida


cotidiana, como en este momento, mientras redacto estoy
planificando (pensando la tareas que restan para el día de hoy).

Sin embargo es difícil encontrar una solución óptima y de un coste


bajo tanto de tipo computacional como de otro dado que las
permutaciones se pueden incrementar en forma exponencial.

En la sección siguiente abordaremos el sistema de hormigas y sus


variantes como Ant Colony System.

Sistema de hormigas (AS)

Colonia de hormigas

Las hormigas son capaces de seguir la ruta mas corta desde la


colonia hasta una fuente de abastecimiento, al trasladarse cada una
va dejando un rastro de feromona a lo largo de un camino seguido
transmitiéndose información entre ellas.

Al iniciar la búsqueda esta es realizada a ciegas ya que, pero si


otras hormigas siguen los rastros de feromona estas seguirán el de
mayor cantidad, que es donde se encuentra la mayor probabilidad de
encontrar alimento.

Fig. 4. Comportamiento de las


hormigas reales 4
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________

En la figura 4a a las hormigas se les presenta un doble camino y


deciden de forma aleatoria, en consecuencia se puede decir que la
mitad irian a un lado y la otra al otro., como se muestra en la figura
4b, las que eligieron el camino mas corto llegaran mas rápido al otro
extremo, dejando depositada mayor cantidad de feromona, la mayor
densidad en la cantidad de feromona hace mas deseable ese camino.

Considerando la evaporación de la feromona, hace que los caminos


menos transitados sean cada vez menos deseables, por que resulta
claro que al cabo de un tiempo todas las hormigas transiten por el
camino mas corto como se muestra en la figura 4d.

La estructura genérica de un ACO es la siguiente:

1 procedimiento nueva_hormiga(id_hormiga)
2 inicializa_hormiga(id_hormiga)
3 L = actualiza_memoria_hormiga()
4 mientras (estado_actual ≠ estado_objetivo)
5 P = calcular_probabilidades_de_transición(A,L,W)
6 siguiente_estado = aplicar_política_decisión(P,W)
7 mover_al_siguiente_estado(siguiente_estado)
si (actualización_feromona_en_línea_paso_a_paso)
8 depositar_feromona_en_el_arco_vistado()
fin si
9 L = actualizar_estado_interno()
10 fin mientras
si (actualización_feromona_en_línea_a_posteriori)
11 para cada arco visitado
12 depositar_feromona_en_el_arco_visitado()
13 fin para
fin si
14 liberar_recursos_hormiga(id_Hormiga)
15 fin Procedimiento

1 procedimiento metaheurística_ACO()
2 inicialización_de_parámetros
3 mientras (criterio_de_terminación_no_satisfecho)
4 programación_de_actividades
5 hormigas_y_actividad()

5
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________
6 evaporación_de_feromona()
7 acciones_del_demonio() {opcional}
8 fin programación_de_actividades
9 fin mientras
10 fin procedimiento

1 procedimiento hormigas_y_actividad()
2 repetir en paralelo desde k=1 hasta número_hormigas
3 nueva_hormiga(k)
4 fin repetir en paralelo
5 fin procedimiento

Adaptación del AS a un JSSP

1 Fase de inicialización
Inicializar contador de ciclos NC
Para cada arco (i, j):
valor inicial de _ij = c; donde c es una constante positiva pequeña
__ij = 0
Colocar MAXH hormigas en N operaciones
2 Colocar la primera operación en lista tab´uk de cada hormiga
3 Repetir hasta llenar tabú
Para cada hormiga:
Elegir próxima operación a ser visitada según ecuación (4.1)
Mover la hormiga a la próxima operación
Insertar la operación en tabú
4 Repetir para cada hormiga k
Calcular el makespan Lk del programa generado
Guardar el programa de makespan mías chico hasta el ciclo NC : LNC
0 = min
n
LNC−1
0 mink {Lk}
o
Para cada arco (i, j)
Calcular __ij según ecuación (4.3)
5 Para cada arco (i, j)
Actualizar _ij según ecuación (4.2)
__ij = 0
6 Aumentar el contador de ciclos NC
Si NC < Ncmax entonces
Vaciar tabú
Ir a la fase 2
Sino
Imprimir

6
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________

En el planteamiento del problema al inicio se vio que, dos


operaciones se realizan sobre un mismo arco con lo que no se puede
saber si transito de i a j o de j a i con exactitud, lo que propone Téllez
es utilizar arcos individuales de esta manera, si se puede determinar
cuantas hormigas en pasado por el arco y así saber la precedencia de
operaciones

Figura 5. Arcos
individuales

Como se observa, cuando se tienen arcos individuales se puede ver


que en la operación i,j quedara depositada mayor cantidad de
feromona que en i,k y al momento de hacer cálculos probabilístico ,
este arco será mas deseable para la siguiente operación.

Esta es una de las principales modificaciones, ya que permite saber


exactamente cuanta cantidad de feromona se a depositado.

Otra modificación es la exploración en el 10 % de los ciclos de esta


manera solo se quedaran, los ciclos en los que se observo mayor
cantidad de feromona, y servirán de base para la exploración del
restos haciendo el algoritmo menos extenuante. Dicha exploración se
hace de foma aleatoria.

Este algoritmo pretende resolver varios casos, así también propone


un método en el que plantea explorar lo que Téllez llama distribución
inversa, donde se caluca asi :

1/ valor de la feromona del arco

7
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________
Esto es con el fin de que el algoritmo pueda visitar arcos no tan
explorados, aumentando la feromona, en los arcos menos,
explorados y por supuesto disminuyéndola en el resto.

Otro mecanismo propuesto es el de actualización, en cierto


porcentaje de hormigas, el cual pretende explorar de forma similar al
anterior, es decir explorar arcos no tan visitados, con lo que se
podrían incluir, hormigas con resultados malos.

Todas las anteriores adecuaciones pretenden diversificar, como ya se


pudo dar cuenta a los programas.

Se pretende que el algoritmo ayude a calcular el desperdicio de


tiempo, esto verificando la precedencia de operaciones, disminuyendo
la cantidad de feromona en el arco (i,j) en forma proporcional según
Téllez al desperdicio de tiempo.
:

Figura 6. Desperdicio de tiempo.

En la figura seis se muestra que la operación (0,1) precede a la (1,1)


donde solo hubo un tiempo de holgura de 5 unidades entre J1 Y J3 lo que
disminuye la feromona en un 5%.

El cálculo queda dado por:

8
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________

Y la nueva cantidad de feromona será:

De esta forma se espera que las hormigas no vayan por los arcos con
mayor desperdicio de tiempo.

Enseguida se muestra el pseudo codigo final

9
El problema de programación de horarios. Uso de una colonia de hormigas
__________________________________________________________________________________
De acuerdo a el análisis de resultados el algoritmo no tuvo problema
para instancias (10 × 5, 15 × 5 y 20 × 5), anque ante algoritmo de
comparación con instancias (10 × 10, 15 x 10, 20x10 y 30 x 10), no
logro alcanzar los mejores resultados.

De cualquier forma es un algoritmo con un buen rendimiento que


implementado, en una explosión demográfica promedio, puede dar
resultados altos en comparación de algoritmos meramente puros o
tradicionales del propio sistema de colonia de hormigas.

Consultas Realizadas

TELLEZ Emmanuel, Tesis. Uso de una Colonia de Hormigas para


resolver Problemas de Programación de Horarios, 2007

MENDEZ Evelyn, Meta heurística de Optimización mediante Colonias


de Hormigas y Aplicaciones, 2007

10

Potrebbero piacerti anche