• No se han encontrado resultados

Seguidamente se muestran las variables necesarias para este método: VECTOR SUM MATRIZ CC VECTOR C VECTOR CARGA

N/A
N/A
Protected

Academic year: 2022

Share "Seguidamente se muestran las variables necesarias para este método: VECTOR SUM MATRIZ CC VECTOR C VECTOR CARGA"

Copied!
22
0
0

Texto completo

(1)

3.1_ALGORITMO BUSQUEDA TABÚ.

Éste algoritmo fue presentado por José Manuel Framiñán en 2004 en la publicación “Efficient heuristic approaches to transform job shops into flow shops”. Se usarán para este algoritmo algunos métodos necesarios como son el “Método Secuencial” y el “Path Relinking Modificado”, ambos usados para el cálculo de la matriz JJ que posteriormente se definirá en esta sección. Otro método usado es el

“Búsquela Local” presentado por Framiñán y Ruiz-Usano (2002) en la publicación “On transforming job-shops into flow-shops” y que como se e ha comentado en apartados anteriores, sirve para crear líneas de soluciones factibles.

Este método obtiene un grupo de líneas de distintas longitudes como soluciones del problema planteado. Para la elección de líneas equilibradas de entre todas las líneas posibles presentadas por este método, se sigue fielmente los pasos reproducidos en el apartado anterior denominado “La Curva Eficiente”.

Seguidamente se muestran las variables necesarias para este método:

VECTOR CARGA

P R O D U C T O

VECTOR SUM

VECTORC

MATRIZ CC

Figura 6: Esquema de Variables del Método Búsqueda Tabú.

• VECTOR J: Es un vector entero de tamaño 1xn. La forma del vector es el siguiente: J

j1,j2,...jn

donde ji

1,2,3,...,n

e i

1,2,3,...,n

En sus componentes tiene almacenados todos y cada uno de los números 1,2,…,n correspondientes a cada tipo de producto con el que se plantea el problema, y como el vector es de tamaño 1xn, todos los números aparecen sólo una vez. El orden de

(2)

vector es una variable definida en el Método de “Búsquela Local” presentado por Framiñán y Ruiz-Usano (2002) en la publicación “On transforming job-shops into flow-shops” y que se usará para crear soluciones de líneas factibles.

• MATRIZ JJ: En el caso en que no se realicen aproximaciones del problema, es una matriz de dimensiones factorial(n)xn, en el que en cada fila se indica un valor único de J. Para cada valor de J, obtenemos una solución, que posiblemente pueden coincidir dicha solución de línea para otro valor de J distinta. Para cada valor de J, obtenemos nuevas matrices CC, C, sum y la línea de proceso.

• MATRIZ DATOS: Es una matriz de 6 columnas, donde se almacenan las soluciones aportadas por cada una de las J. La primera columna informa la fila en la que se encuentra alojada la J considerada en la matriz JJ que arrojan los datos que se presenta en esta misma fila y siguientes columnas, la segunda columna indica el numero de máquinas de la línea en esta solución, la tercera refleja la diferencia entre la carga máxima y la mínima de la línea, la cuarta columna la carga mínima de la máquina, la quinta, la carga máxima y la última, la carga media de las máquinas de la línea de proceso. En otras palabras, en la primera fila de la matriz datos, se guardará los datos de la línea de proceso solución que proporciona el vector J almacenado en la primera fila de la matriz JJ, en la segunda fila de la matriz datos, se guardará los datos de la línea de proceso solución que proporciona el vector J almacenado en la segundo fila de la matriz JJ, y así sucesivamente hasta la última fila de la matriz JJ.

• VECTOR SUM: Es un vector de dimensiones 1x(m*n). Este vector refleja una línea factible creada por el Método de Búsqueda Local presentado por Framiñán y Ruiz-Usano (2002) y que se ha comentado en apartados anteriores. Para crear dicho vector, se necesita disponer del vector J

j1,j2,...jn

descrito anteriormente y de la matriz M del problema. La matriz M sigue teniendo el idéntico significado que se ha redactado en apartados anteriores. Seguidamente, se crea el vector sum añadiendo en sus componentes las siguientes máquinas en este estricto orden que marca el Método de Búsqueda Local:

(3)

La primera máquina de la línea, se coloca la máquina necesaria para la primera operación del producto indicado en la primera componente del vector J, la segunda máquina de la línea será la máquina necesaria para la primera operación del producto indicado en la segunda componente del vector J, y así sucesivamente hasta completar la primera columna de la matriz M. Posteriormente, se realiza el mismo proceso con la segunda columna, y así hasta llegar a la última columna de la matriz M. Resumiendo todo esto, y denominando como a las componentes de la matriz M, se puede escribir de forma matemática el vector sum como sigue:

Mij

M

j

M

j

M

jn

M

j

M

j

M

jn

M

jm

M

jnm

sum , ,..., , , ,..., ,..., ,...,

1 2

1 2

11 1 1 2 2 2

• MATRIZ CC: Es una matriz de dimensiones nx(n*m), cuyas componentes sólo toman el valor 1 ó 0. Una componente cci,k de dicha matriz tendrá valor 1 cuando el producto i requiera una operación de la máquina situada en la posición o componente k del vector sum, según el orden de procesado seguido por cada producto en la matriz M. El resto de las componentes anteriores que no tengan valor asignados, serán nulas. Este proceso se repetirá con todos los tipos de productos distintos. Así se asegura de que durante el procesado de cada producto, no será necesario retroceder en la línea para realizar algún tipo de operación a algunos productos. Esta matriz es usada para la eliminación de máquinas de la línea factible creada por el Método de Búsqueda Local.

• VECTOR C: Es un vector de dimensiones 1x(n*m), que en cada componente j incluye la suma de los valores de la columna j de la matriz CC. Al igual que la matriz CC, este vector es usado para la eliminación de máquinas de la línea factible creada por el Método de Búsqueda Local.

• VECTOR CARGA: Es un vector de dimensiones como máximo de (1)x(m*n), en el que se almacena el tiempo de trabajo total de todas y cada una de las máquinas de la línea al procesar una unidad de todos los tipos que productos que trabaja dicha línea. A este vector, se les asignan valores a sus componentes una vez que se le han eliminado las máquinas pertinentes de la línea factible que proporciona el Método

(4)

de Búsqueda Local presentado por Framiñán y Ruiz-Usano (2002) para cada valor de J.

• MATRIZ RESUL: Es una matriz de tamaño factorial(n)x(m*n) como máximo, tanto de columnas como de filas, en el que se almacena en las filas las máquinas encontradas en aquellas componentes j del vector sum que cumplan que C[j]>=1, siendo este vector la solución de línea buscada para una J particular. En cada fila de la matriz Resul, se guardará la solución de una J. En la primera fila de la matriz Resul, se guardará la línea de proceso solución que proporciona el primer vector J almacenado en la primera fila de la matriz JJ, después de eliminarles las máquinas necesarias, en la segunda fila de la matriz Resul, se guardará la línea de proceso solución que proporciona el segundo vector J almacenado en la segunda fila de la matriz JJ, después de eliminarles las máquinas necesarias, y así sucesivamente hasta el último valor del vector J situada en la última fila de la matriz JJ. Las líneas almacenadas en la matriz Resul, ya son líneas que han sufrido el proceso de eliminación de máquinas que se redactará seguidamente.

El esquema que sigue el Algoritmo “Búsqueda Tabú” es el siguiente:

Para cada valor de J

Se obtiene inicialmente una línea factible.

(M. Búsqueda Local)

Se eliminan las máquinas innecesarias

de la línea factible

Los pasos del algoritmo son los siguientes:

• Generar la matriz JJ para el cálculo exacto del problema o de forma aproximada mediante el Método Secuencial o el de Path Relinking Modificado. Ello se verá en apartados posteriores.

• Para cada vector J, es decir, para cada fila de la matriz JJ, se calcula la línea de producción que proporcione dicha J y los valores de los siguientes vectores, matrices y variables y se almacena según se indica seguidamente:

(5)

 Calculamos los vectores y matrices sum, CC, C, carga, según se ha indicado en este mismo apartado. En este punto ya se ha eliminado las máquinas innecesarias de la línea factible creada por el Método de Búsqueda Local.

 Calculamos las variables: Número de máquinas de la línea, media de las cargas de las máquinas de la línea, valor máximo y mínimo de las cargas de las máquinas de la línea y su diferencia. Almacenamos estos valores en la matriz de datos en la misma posición de fila que la que le corresponde a la fila de J en la matriz JJ y en las columnas adecuadas según se indica en la definición de la matriz datos.

 Almacenar la línea que aporte el vector J en la matriz resul en la misma posición de fila que la que le corresponde a la fila de J en la matriz JJ

• Seguidamente, con los datos de la matriz datos, se está ya se está en condiciones de analizar cuáles de las líneas son las que están más equilibradas y procedemos a indicar los puntos de la curva eficiente. Para ello, se entra en la matriz datos en la columna del numero de máquinas de cada una de las líneas y de entre todas aquellas líneas que tengan un mismo número máquinas, se elige como válidas en un primer paso, las que tengan un valor de diferencias de cargas máximas y mínimas menor, ya que así se consigue un mayor equilibrado. Puede que exista más de una línea con una longitud o número de máquinas que tengan el mismo valor de diferencias cargas. Estas líneas también son consideradas como válidas. El resto de líneas de igual longitud ya no interesan. Posteriormente, de entre estas líneas candidatas, se les somete al dos y tres descrito en el apartado anterior denominado “La Curva Eficiente” para asegurarse de escoger, de entre las líneas seleccionadas anteriormente, aquellas que aseguren la tendencia decreciente de la Curva Eficiente para posteriormente, poderlas representar en el fichero de salida del programa como las soluciones finales de la conversión del taller en línea de procesos. Así, se consigue que el fichero de salida sólo refleje las líneas que conforma la Curva Eficiente como solución. Ya sólo restaría la decisión por parte del usuario de la línea deseada, adoptando para ello una solución compromiso entre el aspecto económico y el equilibrado deseado.

(6)

3.1.1_FORMA DE OBTENER LA MATRIZ JJ.

Respecto a la programación en C para resolver el problema planteado, quizás la parte de ésta más compleja es la obtención de la matriz JJ, para cuya concepción sólo se requiere el dato de los números de productos del problema particular que se quiera resolver.

Como anteriormente se redactó, la matriz JJ integra en cada una de sus filas un vector J distintos entre sí del problema planteado. Las componentes del vector J son enteras, y contienen todos y cada uno de los números 1,2,3,…,n sin que se repitan entre sí, es decir, aparecen todos estos números, pero sólo una vez, por lo que la dimensión del vector J es 1xn, siendo n el número de tipos distintos de productos del problema.

Como todas las filas de la matriz JJ son distintas, conociendo la estructura de los vectores J, sabiendo que existen tantos vectores J diferentes como factorial de n (factorial(n)) y recordando que cada fila de JJ es un vector J, el juego consiste en buscar un método que permita la programación en lenguaje C que obtenga JJ.

Para crear la matriz JJ, se sirve de dos métodos distintos: el método secuencial (obtiene todas las J y también una aproximación, según indique el usuario) y el método de Path Relinking Modificada (este último no calcula todas las combinaciones de J).

3.1.1.1_MÉTODO SECUENCIAL PARA CALCULAR JJ.

Este método calcula todas las J posibles, y se ha servido de la función “switch”:

 Cuando n=2, asigna directamente el programa el valor de JJ sin realizar cálculos, ya que existe una variable que contiene copiada dicha matriz cuando n=2. Dicha matriz es:

JJ=[ 1 2 2 1]

(7)

 Cuando n=3, asigna directamente el programa el valor de JJ sin realizar cálculos, ya que existe una variable que contiene copiada dicha matriz cuando n=3. Dicha matriz es:

JJ=[ 1 2 3 2 1 3 3 2 1 2 3 1 1 3 2 3 1 2]

 Cuando n>3, es cuando realmente es necesario tirar de ingenio y crear el método que permita que de manera secuencial, sea posible crear la matriz JJ, ya que a partir de n>3, la dimensión de JJ empieza a crecer considerablemente.

Para explicar lo que sigue, definiremos para mayor claridad de explicación, las siguientes variables.

o j, siendo 4<=j<=n, con j natural, es decir, j=4,5,6,…,n

o JJ3 a la matriz JJ cuando n=3.

Ahora ya estamos en condiciones de explicar el método para obtener JJ con n>3.

La forma es variar j desde el valor 4 hasta el valor n de uno en uno, haciendo referencia a j a cada una de las columnas que se le añade a JJ3.

Para iniciar el método secuencial, se parte de JJ3 y j=4. Se copia en una matriz Auxiliar a JJ3 (j) veces haciendo coincidir las columnas de JJ3, es decir, quedaría una matriz de dimensiones 24x3. Seguidamente, se añade una fila a la matriz obtenida de tal forma, que ahora la dimensión sería de 24x4, y valores de los números de esta columna varía de la siguiente manera:

o En las primeras filas de la matriz obtenida, concretamente en las primeras factorial(j-1) filas, se le asigna el valor j.

(8)

o En las siguientes filas de la matriz obtenida, concretamente en las siguientes factorial(j-1) filas, se le asigna el valor (j-1).

o En las siguientes filas de la matriz obtenida, concretamente en las siguientes factorial(j-1) filas, se le asigna el valor (j-2).

o En las siguientes filas de la matriz obtenida, concretamente en las siguientes factorial(j-1) filas, se le asigna el valor (j-3).

Posteriormente, se analizan fila a fila la matriz obtenida y se observa el valor de la última componente de la fila (la creada añadiendo la nueva columna).

Si se centra en una fila genérica de la matriz, se observa el valor de su última componente. Comparamos dicho valor con los de las componentes anteriores de dicha fila y en el caso de que una de ellas coincida con el valor de la última componente, se cambia el valor y se le asigna el valor j, pero nunca se cambia el valor de la última componente de cada fila.

Una vez que hagamos este proceso a todas las filas de la matriz, obtenemos lo que llamaremos JJ4, siendo esta matriz la matriz JJ correspondiente para el problema de n=4. Pero si nuestra n es mayor que 4, se incrementa ahora j a 5 y se vuelve a hacer el mismo procedimiento seguido para obtener JJ4 partiendo de JJ3, pero en lugar de asignar a una matriz (j-1) copias de JJ3, dichas copias sería ahora de JJ4, es decir, para volver a empezar de nuevo el proceso, se copia (j) veces la matriz JJ4 y se sigue con el proceso.

Todo este proceso se repetirá tantas veces como sean necesarias hasta conseguir un valor de j=n y se obtenga la matriz JJn, siendo esta última matriz la matriz JJ cuando el problema tiene n tipos de productos distintos.

Como puede deducirse, para calcular la JJn deseada, es preciso partir de JJ3, y posteriormente calcular JJ4, JJ5,JJ6,…,JJn, hasta conseguir así nuestra meta, JJn.

Seguidamente, muestro un gráfico en el que se muestran en dos matrices, una llamada auxiliar y la otra muestra JJ4. En la matriz auxiliar, se muestra las cuatro copias de JJ3 y la creación de la nueva columna, correspondiéndose esta con los pasos previos necesarios para crear JJ4 con la ayuda de JJ3. Si

seguidamente se cambian las componentes de la matriz auxiliar según lo indicado anteriormente, se obtiene finalmente JJ4.

(9)

Todo lo comentado acerca de cómo obtener la matriz JJ, es válido para el caso en que queramos calcular el problema de forma exacta, es decir, considerando todas las posibilidades distintas del vector J. Pero existen problemas en los que debido al elevado número de tipos distintos de productos, hace inviable su cálculo exacto desde el punto de vista de los elevados tiempos de CPU y se requiere una aproximación para aminorar los tiempos de CPU. Este objetivo se consigue analizando un número limitado de J distinto y no todos ellos, en tal caso, el usuario indica el número de J distintos que desea que el programa calcule. En este caso, la matriz JJ disminuye su número de filas, pero su cálculo es exactamente igual que si fuese con el cálculo exacto, con la salvedad que cuando se crea un número de J distintas entre sí igual al número indicado por el usuario, el programa deja de crear nuevas J. El programa es capaz de generar por aproximación usando este método 720 J distintas.

(10)

Además, en los problemas resueltos mediante aproximaciones, el programa pregunta al usuario si desea doblar el número de J distintas indicadas como las deseadas alternando el orden de las J ya creadas. Si el usuario acepta, el numero de filas de la matriz JJ se dobla respecto al anterior, alcanzando un máximo de 1440 J distintas, creando las nuevas J de modo secuencial como se muestra en el siguiente ejemplo, en el que se ha elegido resolver un problema mediante aproximación con tres J distintas y se ha optado doblar el numero de J:

JJ=[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 1 3 4 5 6 7 8 9 10 11 12 13 14 15 3 2 1 4 5 6 7 8 9 10 11 12 13 14 15 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 15 14 13 12 11 10 9 8 7 6 5 4 3 1 2 15 14 13 12 11 10 9 8 7 6 5 4 1 2 3 ]

Se observa que el problema tiene 15 tipos de productos distintos, por lo que resolverlo de forma exacta no resulta práctico, ya que tiene del orden de 1012 J distintas.

Al elegir la opción de doblar el numero de J, se crearon las 3 ultimas filas de la matriz JJ anteriormente mostrada, en la que la secuencia que se ha usado es la de invertir el orden de los elementos de las tres anteriores J existentes. Con esto se consigue, además de una mayor precisión en el calculo del problema, elegir J que no sean consecutivas según la secuencia de creación de J como en el caso del problema calculado de forma exacta, ya que al doblar las J, estas pertenecen a las últimas J que calcularía la secuencia habitual de la matriz JJ, obteniendo así líneas de proceso más diferentes entre sí.

(11)

3.1.1.2_MÉTODO PATH RELINKING.

Path Relinking construye nuevas soluciones de un problema explotando las trayectorias que conectan a las soluciones buenas del problema, llamadas las

“soluciones de iniciación” y generando un camino en la vecindad del espacio que lleva a otras soluciones, llamadas las “soluciones guías”, que por pertenecer a la vecindad del espacio de las soluciones buenas, se consideran que también podrían ser estas soluciones guías buenas para el problema, cosa que será necesario comprobarlo posteriormente.

En la siguiente figura se puede ver gráficamente lo anteriormente redactado.

Figura 7: Esquema Seguido por el M. Path Relinking.

Cada círculo del gráfico representa una solución del problema. Los que están unidos por línea continua son los denominados puntos de iniciación, por lo que son los puntos o soluciones buenas del problema. Las soluciones unidas por línea discontinua son las soluciones guías que proporcionan la trayectoria de unir las soluciones iniciales o buenas A y B.

Particularizando este método para nuestro problema real, las soluciones de iniciación serían las J cuyas soluciones de línea conforman la Curva Eficiente, datos que por supuesto desconocemos, ya que son estos las soluciones que se buscan. Pero una forma de proceder sería designar estas soluciones J (soluciones de iniciación) de forma aleatoria y crear a partir de estos, las soluciones guías (las J guías) y posteriormente se

(12)

El problema que he observado en esta forma de proceder es que, aunque las soluciones iniciales según el método seguido son distintas, al trazar las trayectorias entre las soluciones iniciales y calculas las soluciones guías, obtenemos soluciones guías iguales entre sí e incluso igual a las soluciones iniciales, cosa que no toleramos en la programación para resolver los problemas.

Para que se comprenda la problemática, aplicaremos este método a un problema con cinco tipos de productos distintos (n=5).

Para calcular las soluciones iniciales, aplicaremos un algoritmo que llamaremos

“Algoritmo 1”.

 Algoritmo 1.

 Se trata de calcular las soluciones iniciales partiendo del vector J=[1,2,3,…,n], siendo este la primera solución inicial. La llamaremos para distinguirla de las demás como J1.

 Seguidamente, se alteran las componentes del vector anterior de la siguiente forma:

o Jnueva[i]=J1[1] y Jnueva[1]=J1[i] con i=2,3,4,…,n, manteniendo las mismas componentes en las demás celdas de Jnueva que en el caso de J1. Obtenemos así una solución inicial para cada i.

o Jnueva[i]=J1[2] y Jnueva[2]=J1[i] con i=3,4,…,n manteniendo las mismas componentes en las demás celdas de Jnueva que en el caso de J1. Obtenemos así una solución inicial para cada i.

o Jnueva[i]=J1[3] y Jnueva[3]=J1[i] con i=4,…,n manteniendo las mismas componentes en las demás celdas de Jnueva que en el caso de J1. Obtenemos así una solución inicial para cada i.

o Y así sucesivamente hasta desde 4,…, (n-1)

(13)

Así, obtenemos las siguientes soluciones iniciales para el ejemplo propuesto:

J1=[1,2,3,4,5]

J2=[2,1,3,4,5]

J3=[3,2,1,4,5]

J4=[4,2,3,1,5]

J5=[5,2,3,4,1]

J6=[1,3,2,4,5]

J7=[1,4,3,2,5]

J8=[1,5,3,4,2]

J9=[1,2,4,3,5]

J10=[1,2,5,4,3]

J11=[1,2,3,5,4]

Se observa que el número de soluciones iniciales viene dado por la siguiente ecuación:

 

 

   

 

  

1

1

1 n

j

j Nsolini

Seguidamente aplicamos el algoritmo llamado “Algoritmo 2” para calcular las soluciones guiadas.

 Algoritmo 2.

 Se trata de trazar las trayectorias entre los vectores J(i) y J(i+1), con i=2,3,…,10 (para este caso particular). Observar que existen tantas trayectorias como soluciones iniciales, menos dos.

 Se observa la primera componente del vector J(i) y se busca la componente de J(i+1) que contiene este valor, que se supone sea en la componente k, y se crea un nuevo vector que contenga el valor de la primera componente de J(i) en la posición k. Las componentes mayores

(14)

componentes menores que k, cumplen: Jnueva[j]=J(i)[j+1] con j=1,2,3,…,(k-1). Seguidamente, se compara la Jnueva con J(i+1) y se la aplica el nuevo procedimiento y así sucesivamente. Este proceso se repite tantas veces como sea necesario hasta que se alcanza el valor de J(i+1)

 A modo de ejemplo, se crearan las soluciones guías de algunas trayectorias.

 Para la trayectoria entre J2=[2, 1, 3, 4, 5] y J3=[3, 2, 1, 4, 5] resultan las siguientes soluciones guías:

[2,1,3,4,5][1,2,3,4,5][2,3,1,4,5][3,2,1,4,5]

 Trayectoria entre J3 y J4:

[3,2,1,4,5][2,1,3,4,5][1,2,3,4,5][2,3,4,1,5][3,2,4,1,5][2,4,3,1, 5][4,2,3,1,5]

 Trayectoria entre J4 y J5:

[4,2,3,1,5][2,3,1,4,5][3,2,1,4,5][2,1,3,4,5][1,2,3,4,5][2,3,4,5, 1][3,2,4,5,1][2,4,3,5,1][4,2,3,5,1][2,3,5,4,1][3,2,5,4,1][2,5, 3,4,1][5,2,3,4,1]

 Trayectoria entre J5 y J6:

[5,2,3,4,1][2,3,4,1,5][3,4,2,1,5][4,3,2,1,5][3,2,1,4,5][2,3,1,4, 5][3,1,2,4,5][1,3,2,4,5]

El comienzo y el fin de cada trayectoria es la solución inicial. Sólo en las cuatro primeras trayectorias que se ha reflejado, se encuentran J idénticas diferenciadas de color rojo. Las de color rojo son iguales a otras soluciones guiadas o iniciales. Si siguiese analizando las soluciones guiadas de las trayectorias que aún quedan sin

(15)

analizar, sigo encontrando más soluciones de J idénticas. (No se reflejan porque se considera que ya el lector ha comprendido el problema abordado). Por ello, esta forma de proceder para calcular las J no es factible para resolver el problema.

En un intento por seguir fiel a esta forma de proceder, se intenta crear distintas formas o algoritmos para crear las soluciones guías de las trayectorias trazadas entre las distintas soluciones iniciales de forma que todas las soluciones (tanto las iniciales como las guiadas) fuesen distintas, pero fue en vano, siempre, entre todas ellas, existían varias J que se repetían, por ello, se considera o se descubre que realizando una modificación a este método, podría generar J distintas entre sí sin que se repitan las soluciones guías ni iniciales. Este nuevo método lo llamaremos “El Método Path Relinking Modificado”.

3.1.1.3_MÉTODO PATH RELINKING MODIFICADO.

Este método, posee soluciones iniciales con igual significado que en el anterior, es decir, son las soluciones buenas del problema. También se busca las soluciones guías creadas a partir de las trayectorias, sólo que ahora habrá una trayectoria por cada solución inicial, y la trayectoria “comienza y muere” en la misma solución de iniciación. De esta forma sí que se ha encontrado algoritmos para que todas las soluciones (todas las J) sean distintas. No olvidar, que tanto las soluciones de iniciación como las guiadas, al igual que en anterior método, son valores de J.

La representación gráfica es la siguiente:

A

B

Figura 8: Esquema Seguido por el M. Path Relinking Modificado.

(16)

Cada círculo del gráfico representa una solución (un valor de J) del problema.

Los que están unidos por línea continua son los denominados puntos de iniciación, por lo que son los puntos o soluciones buenas del problema. Las soluciones unidas por línea discontinua son las soluciones guías que proporcionan la trayectoria de unir una solución inicial consigo mismo. En el gráfico se observa dos trayectorias, la de las soluciones guías marcadas con las letras A y B.

El avance que proporciona este método respecto del Método Secuencial, es la de proporcionar una muestra más representativa de la población, siendo la población todos los valores de J distintos, alcanzando esta un total de factorial(n), siendo n los tipos distintos de productos analizados. Esto es así porque el método secuencial analiza las J distintas siguiendo un orden, es decir, JJ empieza siempre con la misma estructura, y si no se analizan todas las J distintas siempre analizaremos sólo las primeras J de la matriz JJ. Además, dos soluciones de líneas asociadas a dos J consecutivas de la matriz JJ creadas por el Método Secuencial, no suelen tener grandes diferencias entre sí en cuanto al equilibrado de la línea se refiere, su longitud, etc., ya que las soluciones factibles creadas por el “Método de Búsqueda Local” son muy similares entre sí. Sin embargo, dos soluciones asociadas a dos valores de J no consecutivos de la matriz JJ obtenidos por el método secuencial, ya sí que puede arrojar soluciones más diferentes entre sí, resultando más interesante. Pues para que esto último ocurra, es suficiente con aplicar el Método de Path Relinking Modificado. Esto lo podremos ver de forma gráfica y más claro en el siguiente apartado denominado “Análisis del Método Secuencial y Método Path Relinking Modificado”.

Para aplicar el Método de Path Relinking Modificado, como no es conocido las soluciones de iniciación, las obtenemos con ayuda de un algoritmo (que llamaremos Algoritmo 1), el cual, necesitará saber el número de productos distintos del problema.

Seguidamente, para calcular las soluciones guías, se aplica otro algoritmo, que llamaremos Algoritmo 3.

Para explicar ambos algoritmos, se servirá de un problema en el que el número de productos distintos sea de 5.

(17)

 Algoritmo 1.

 Este algoritmo es exactamente el mismo que el explicado en el anterior método.

Para el ejemplo planteado (n=5), las soluciones iniciales son:

J=[1,2,3,4,5]

J=[2,1,3,4,5]

J=[3,2,1,4,5]

J=[4,2,3,1,5]

J=[5,2,3,4,1]

J=[1,3,2,4,5]

J=[1,4,3,2,5]

J=[1,5,3,4,2]

J=[1,2,4,3,5]

J=[1,2,5,4,3]

J=[1,2,3,5,4]

Seguidamente, se aplica el “Algoritmo 3” para obtener las soluciones guiadas.

 Algoritmo 3.

 Este algoritmo se centra en buscar las soluciones guías con ayuda de las trayectorias de cada una de las soluciones iniciales.

 A cada una de las soluciones iniciales aplicamos alteraciones de las componentes como sigue a continuación:

o Se centrará en la solución inicial J=[1,2,3,4,5] que llamaremos J2.

o Jnueva1[i]=J2[i+1] y Jnueva1[n]=J2[1] con i=1,2,3,4,…,(n-1).

(18)

o Se obtiene así una única solución más.

o Jnueva2[i]=Jnueva1[i+1] y Jnueva2[n]=Jnueva[1] con i=1,2,3,4,…,(n-1). Se obtiene así una única solución más.

o Y así sucesivamente hasta (n-1) veces, siendo (n-1) las soluciones guías obtenidas a partir de cada solución inicial.

Con todo lo explicado, concretamos que las soluciones guías correspondientes de la solución inicial J=[1,2,3,4,5] son las siguientes:

J=[2, 3, 4, 5, 1]

J=[3, 4, 5, 1, 2]

J=[4, 5, 1, 2, 3]

J=[5, 1, 2, 3, 4]

Si se repite este proceso para cada solución inicial, se obtiene 55 J distintas entre sí, que no se representan para no desperdiciar tanto papel, porque ya se considera que se ha quedado clara la idea.

La forma para determinar las J distintas total calculadas por este método, es usando la siguiente ecuación:

n j

NumJ

n

j

* 1

1

1

 

 

 

 

   

 

  

Además, es posible llegar a doblar esta cantidad de J distintas alterando los vectores de forma similar a como se hizo en el método secuencial, es decir, de cada una de las J que crea éste método, se crea otra J de forma que las componentes se cambian como sigue:

Jnueva[n+1-k]=Jmetodo[k] con k=1,2,3,4,…,n.

(19)

Para verlo de forma gráfica, se aplica a los vectores de la primera columna, siendo el resultado los vectores de la segunda columna:

J=[1, 2, 3, 4, 5] J=[5, 4, 3, 2, 1]

J=[2, 3, 4, 5, 1] J=[1, 5, 4, 3, 2]

J=[3, 4, 5, 1, 2] J=[2, 1, 5, 4, 3]

J=[4, 5, 1, 2, 3] J=[3, 2, 1, 5, 4]

J=[5, 1, 2, 3, 4] J=[4, 3, 2, 1, 5]

Aunque se realizara este último proceso a todos los vectores que arroja este método, se tendrá garantizado que aún así, no se repiten las J, con lo que se habrá logrado el objetivo perseguido.

En este método, al igual que en el secuencial, se ha programado de forma que el usuario puede elegir, dentro del rango posible de los distintos valores que puede tomar las J, el que él crea conveniente.

Seguidamente se muestra las J que crea el programa siguiendo este método para el problema planteado de n=5, pero sin doblar la cantidad de J alterando sus componentes para obtener el doble de cantidad de J, por lo que la cantidad de J distintas resulta ser:

 

1 2 3 4 1

*5 55 5

* 1

* 1

) 1 5 (

1 1

1

 







 

 

 









 

 

 

 

j

n

j

j n

j NumJ

JJ=[1 2 3 4 5 2 1 3 4 5 3 2 1 4 5 4 2 3 1 5 5 2 3 4 1 1 3 2 4 5 1 4 3 2 5 1 5 3 4 2

(20)

1 2 5 4 3 1 2 3 5 4 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4 1 3 4 5 2 3 4 5 2 1 4 5 2 1 3 5 2 1 3 4 2 1 4 5 3 1 4 5 3 2 4 5 3 2 1 5 3 2 1 4 2 3 1 5 4 3 1 5 4 2 1 5 4 2 3 5 4 2 3 1 2 3 4 1 5 3 4 1 5 2 4 1 5 2 3 1 5 2 3 4 3 2 4 5 1 2 4 5 1 3 4 5 1 3 2 5 1 3 2 4 4 3 2 5 1 3 2 5 1 4 2 5 1 4 3 5 1 4 3 2 5 3 4 2 1 3 4 2 1 5 4 2 1 5 3 2 1 5 3 4 2 4 3 5 1 4 3 5 1 2 3 5 1 2 4 5 1 2 4 3 2 5 4 3 1 5 4 3 1 2

(21)

4 3 1 2 5 3 1 2 5 4 2 3 5 4 1 3 5 4 1 2 5 4 1 2 3 4 1 2 3 5]

3.1.1.4_ANÁLISIS DEL MÉTODO SECUENCIAL Y MÉTODO PATH RELINKING MODIFICADO.

Como ya es sabido, el número total de J distintos para un problema con n productos distintos resulta ser de factorial(n), y si se quiere analizar todas estas J en los problemas con n excesivamente altos, hace el problema inabordable desde el punto de vista de tiempos de CPU y por ello, se realizan aproximaciones obteniendo así soluciones ingenieriles a los problemas planteados. Dichas aproximaciones implican que no se analicen todas las J posibles, sino que se considere una muestra de la población de todas las J posibles del problema, y lo que este apartado pretende es ver cómo de representativo son las muestras de las J que extraemos con el Método Secuencial y con el Método Path Relinking Modificado. Para ello, se servirá de las siguientes figuras:

Figuras correspondientes a la situación de las distintas J consideradas por los Métodos.

Cada una de las figuras anteriores (figura 9, 10 y 11), harían referencia de forma esquemática a la matriz JJ creada por el método secuencial sin aproximaciones, es decir,

(22)

que contienen todas y cada una de las J posibles del problema planteado. Partiendo de esta idea, ya se está en condiciones de explicar el significado de cada una de las figuras:

• En la Figura 9, se observa que está toda coloreada de verde. Ello indica que se ha usado para obtener JJ el “Método secuencial” sin usar aproximaciones, ya que todo lo que está coloreado indica que dichas J se ha considerado como válidas para resolver el problema.

• La Figura 10, sólo considera las J del principio y del final, lo cual indica que se ha usado el “Método secuencial” realizando aproximaciones y aceptando la opción de doblar las J elegidas para una mayor precisión en el calculo de la solución.

• En la Figura 11, se observa que las J se han elegido de forma aleatoria respecto a la JJ que generaría usando el Método Secuencial, lo que indica que se ha usado el Método Path Relinking Modificado para obtener las J con las que el programa tendrá que resolver el problema.

Seguidamente, se analizará ambos métodos desde el punto de vista de la representatividad de las J elegidas por los métodos de la totalidad de las J existentes en el problema, siendo todas las J posibles la población considerada.

Se observa que el Método Path Relinking Modificado, al obtener las J de una forma aleatoria respecto al Método Secuencial, su muestra es más representativa de toda la población, por lo que se da la oportunidad, como posteriormente se verá, de obtener una mayor cantidad de soluciones a un mismo problema que usando el Método secuencial con aproximaciones usando una misma cantidad de J distintas, y ello es debido a que para J consecutivas según el Método Secuencial, obtenemos soluciones que si no son idénticas, se parecen demasiado, cosa que se ha comprobado de forma experimental y con ayuda del programa. Dichas comprobaciones puede verse en apartados posteriores. Por ello, el Método Path Relinking Modificado es más efectivo que el Secuencial.

Referencias

Documento similar

Pero antes hay que responder a una encuesta (puedes intentar saltarte este paso, a veces funciona). ¡Haz clic aquí!.. En el segundo punto, hay que seleccionar “Sección de titulaciones

El Teorema 1.4 de Gerschgorin puede ser aplicado a la matriz X −1 AX para cualquier matriz no singular X ∈ C n×n , para estimar el conjunto de autovalores de A y este corolario es

• Si multiplicamos la matriz fundamental N por la parte R de la matriz P, se obtienen las probabilidades de que los dólares de cuentas por cobrar que inicialmente están en los estados

Determine el valor de (m+n), de los vectores que se muetran en la figura cumple. Usando el sistema de ejes x, y, z encuentre el vector unitario del vector B. Hallar el módulo de

La estimación inicial del vector de estado es s y su matriz de covarianzas P UDU’, donde U es una matriz triangular superior con unos en la diagonal y D una matriz diagonal

Como se dijo anteriormente, en este trabajo los datos se pueden organizar en forma de una matriz donde en las columnas se registran las variables de tiempo y

40A) Obtener una matriz, E ij , de tamaño n x m, conteniendo la magnitud del efecto que en cada uno de los lugares afectables se recibiría desde cada emplazamiento

4) Elemento inverso: para todas las matrices de orden n con determinante no nulo existe otra matriz de orden n con determinante no nulo, donde el producto de ambas es la