INTRODUCCIÓN AL USO DE CADENAS EN MODELOS CONSTRUIDOS CON GPSS De modo simple, la atención de clientes por un empleado JUAN donde los clientes esperan inexorablemente hasta ser atendidos, independientemente de la demora que tengan: GENERATE clientes ... QUEUE JUAN SEIZE JUAN DEPART JUAN ADVANCE tiempo de atención RELEASE JUAN SIGUE ... Conocemos como simular un tipo de impaciencia (la persona se va si hay más de una determinada cantidad de personas en cola, por ejemplo 7 personas): GENERATE clientes TEST LE Q$JUAN,7,BYE QUEUE JUAN SEIZE JUAN DEPART JUAN ADVANCE tiempo de atención RELEASE JUAN ... BYE TERMINATE pero una vez que una persona se pone en cola ya no deja la cola cualquiera sea el tiempo que tenga que esperar. Por otro lado el empleado JUAN trabaja ininterrumpidamente. ¿Cómo manejamos la impaciencia del cliente? (posibilidad de irse cuando el tiempo de espera colmó su paciencia). La idea es subdividir al cliente en dos: El original es el cliente propiamente dicho, la copia es la transacción que espera el tiempo de paciencia de ese cliente (tiempo que está dispuesto a esperar sin irse). Los clientes se numeran (se guarda ese número en el parámetro 3) y la manera que tenemos para que la copia reconozca al cliente del cual es copia es a través de la coincidencia del citado parámetro 3: GENERATE clientes SAVEVALUE CUEN+,1 Generamos una copia del cliente ASSIGN 3,X$CUEN donde coinciden los valores del SPLIT 1,IMPA parámetro 3 del original y de la copia. ... TEST LE Q$JUAN,7,BYE QUEUE JUAN Si otra transacción no la libera (ejecuta un LINK JUAN,FIFO UNLINK, queda eternamente encadenada) IMPA CHAU ADVANCE tiempo de paciencia UNLINK JUAN,CHAU,1,3,*3 TERMINATE DEPART JUAN TERMINATE Valor con el que se compara. Parámetro de la transacción encadenada que se consulta. 1 INTRODUCCIÓN AL USO DE CADENAS EN MODELOS CONSTRUIDOS CON GPSS Hasta aquí hemos simulado que los clientes se “encadenan” a la cadena “JUAN” de la cual los saca la impaciencia. No hemos simulado la atención normal por lo que todos los clientes se irían de este modelo por impaciencia. Antes de seguir adelante, analicemos el bloque: UNLINK JUAN,CHAU,1,3,*3 Este bloque lo ejecuta la transacción “hermanita” del cliente que quiere llevarse al cliente sacándolo de la cadena JUAN (lo manda al rótulo CHAU, donde el cliente deja de esperar a JUAN, saliendo de la citada cola y se retira del sistema) El significado de cada operando de ese UNLINK es: Intenta desencadenar de la cadena JUAN, La transacción liberada es enviada al rótulo CHAU. Libera 1 transacción Se consulta el valor del parámetro 3 de la transacción a liberar. Se lo compara con el *3 de la transacción que ejecuta el UNLINK, si son iguales, la transacción es liberada Detallando la sintaxis de cada operando: UNLINK ¨ A,B,C,D,E,F A: Cadena de donde se libera B: Rótulo al que va la transacción a liberar C: Cantidad a liberar D: Identificador del parámetro de la transacción a liberar E: Valor con el que se compara a través del operador F: Rótulo al que bifurca si no puede liberar C transacciones Operandos D y E establecen la condición para liberar la transacción parámetro D igual al operando E para que la transacción sea liberada. Al modelo anterior le agregamos la atención del cliente que hace el empleado JUAN quien saca a un cliente de la cadena sin imponerle ninguna condición (la cadena es FIFO, First Input, First Output por lo que atiende al más antiguo): GENERATE clientes SAVEVALUE CUEN+,1 ASSIGN 3,X$CUEN SPLIT 1,IMPA ... TEST LE Q$JUAN,7,BYE QUEUE JUAN LINK JUAN,FIFO ATIEN SEIZE JUAN Aquí JUAN es una FACILITY DEPART JUAN que es tomada por el cliente. ADVANCE TIEMPO DE ATENCION RELEASE JUAN SIGUE ... Aquí generamos a JUAN como transacción OTRO Aguarda un instante para dar tiempo a que el cliente tome a la FACILITY JUAN GENERATE TEST G UNLINK ADVANCE GATE NU TRANSFER ,,,1 CH$JUAN,0 JUAN,ATIEN,1 1 JUAN ,OTRO 2 Aguarda que haya alguien en la cadena JUAN para pasar al bloque siguiente y así ejecutar el UNLINK de la cadena JUAN que libera a un cliente enviándolo al rótulo ATIEN La FACILITY JUAN estará NU cuando haya atendido al cliente INTRODUCCIÓN AL USO DE CADENAS EN MODELOS CONSTRUIDOS CON GPSS IMPA CHAU ADVANCE tiempo de paciencia UNLINK JUAN,CHAU,1,3,*3 TERMINATE DEPART JUAN TERMINATE Hasta aquí hemos simulado algo parecido al modelo sencillo planteado inicialmente (únicamente hemos agregado que los clientes se van si se colma su tiempo de paciencia). Agregaremos la posibilidad de que el empleado, en un 5% de los casos haga otra cosa antes de llamar a otro cliente: GENERATE clientes SAVEVALUE CUEN+,1 ASSIGN 3,X$CUEN SPLIT 1,IMPA ... TEST LE Q$JUAN,7,BYE QUEUE JUAN LINK JUAN,FIFO ATIEN SEIZE JUAN DEPART JUAN ADVANCE TIEMPO DE ATENCION RELEASE JUAN SIGUE ... OTRO IMPA CHAU GENERATE TEST G UNLINK ADVANCE GATE NU TRANSFER ADVANCE TRANSFER ADVANCE UNLINK TERMINATE DEPART TERMINATE ,,,1 CH$JUAN,0 JUAN,ATIEN,1 1 JUAN .95,,OTRO tiempo en hacer otra cosa antes de llamar ,OTRO tiempo de paciencia JUAN,CHAU,1,3,*3 JUAN Agregaremos la posibilidad de que el empleado, si no hay nadie haga otra cosa antes de llamar a otro cliente: GENERATE clientes SAVEVALUE CUEN+,1 ASSIGN 3,X$CUEN SPLIT 1,IMPA ... TEST LE Q$JUAN,7,BYE QUEUE JUAN LINK JUAN,FIFO ATIEN SEIZE JUAN DEPART JUAN ADVANCE TIEMPO DE ATENCION 3 INTRODUCCIÓN AL USO DE CADENAS EN MODELOS CONSTRUIDOS CON GPSS SIGUE OTRO IMPA CHAU NOHAY RELEASE ... JUAN GENERATE TEST G UNLINK ADVANCE GATE NU TRANSFER ADVANCE TRANSFER ADVANCE UNLINK TERMINATE DEPART TERMINATE ADVANCE TRANSFER ,,,1 Se genera aquí al CH$JUAN,0,NOHAY empleado JUAN JUAN,ATIEN,1 1 JUAN .95,,OTRO tiempo en hacer otra cosa antes de llamar ,OTRO tiempo de paciencia JUAN,CHAU,1,3,*3 JUAN hace otra cosa porque no hay nadie ,OTRO Hemos llegado a este modelo donde el cliente ejerce el único derecho que le asiste cuando no lo atienden (irse por impaciencia) y el empleado, se toma dos libertades: 1. En un 5% de los casos, hace otra cosa antes de volver a llamar 2. Hace otra cosa si no hay clientes esperando. ¿Cómo simularíamos que PEDRO ayuda a atender los clientes de JUAN cuando hay 5 o más clientes esperando a JUAN y deja de atender cuando hay menos de dos clientes esperando ser atendidos por JUAN? Sólo hay que agregar lo siguiente al modelo anterior: GENERATE ,,,1 (generamos al empleado PEDRO) MIRO TEST GE Q$JUAN,5 OTP UNLINK JUAN,ATIEN2,1 ADVANCE 1 GATE NU PEDRO TEST L Q$JUAN,2,OTP TRANSFER ,MIRO ATIEN2 SEIZE PEDRO DEPART JUAN ADVANCE tiempo de atención RELEASE PEDRO TRANSFER ,SIGUE Es necesario leer y releer estas hojas hasta entender todos los conceptos en su totalidad para poder avanzar en la construcción de modelos complejos donde es necesario dominar estos conceptos. 4