Autor Tema: Reparto proporcional guardias

0 Usuarios y 1 Visitante están viendo este tema.

25 Junio, 2018, 11:39 pm
Leído 2209 veces

iomismo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • Karma: +0/-0
  • Sexo: Masculino
Ok, ni idea de mates  ;D
Cómo distribuir las guardias de un año entre un número de empleados, de manera que el reparto de los viernes sea equitativo y además se reduzca el número de veces que un empledo repite guardia en un mismo mes?

Reparto proporcional, programación lineal? Me gustaría saber al menos qué términos buscar, como ejercicio, pero una solución no vendría nada mal   ::)

Gracias, saludos!

27 Junio, 2018, 11:05 am
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 56,029
  • País: es
  • Karma: +0/-0
Hola

Ok, ni idea de mates  ;D
Cómo distribuir las guardias de un año entre un número de empleados, de manera que el reparto de los viernes sea equitativo y además se reduzca el número de veces que un empledo repite guardia en un mismo mes?

Reparto proporcional, programación lineal? Me gustaría saber al menos qué términos buscar, como ejercicio, pero una solución no vendría nada mal   ::)

 Hace falta que concretes más los datos y condiciones de tu problema. ¿Cuántas guardias hay que hacer? ¿con qué frecuencia? ¿cada guardia la realiza una sola persona simultáneamente o varias? ¿qué horarios tienen las guardias? ¿cuántos empleados hay? ¿alguna otra regla o directiva que deba de tenerse en cuenta?.

Saludos.

P.D. En principio sería un problema de programación lineal discreta.

28 Junio, 2018, 12:07 am
Respuesta #2

iomismo

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 2
  • Karma: +0/-0
  • Sexo: Masculino
Ok, muchas gracias por el interés! Veamos, cada guardia la realiza un solo empleado cada día desde las 3 hasta las 5. Normalmente las guardias de un mes se distribuyen al comienzo del mismo de forma automática dependiendo de una lista de usuarios disponibles (que no están de vacaciones), teniendo en cuenta la distribución del mes anterior (la lista de usuarios y el orden de la misma se guarda en cada distribución para utilizarla en la siguiente). En un escenario sin restricciones el método funciona correctamente, aunque seguro que hay algún sesgo o algo parecido. Pero ahora introducimos las siguientes condiciones: 1.- minimizar al máximo el número de veces que un empleado repite guardia durante un mes, sobre todo que no te toquen dos días y uno de ellos encima sea viernes. 2.- repartir equitativamente las guardias de los viernes.
Para realizar los cálculos, y por poner un límite, utilizamos los datos de las guardias realizadas durante el año en curso.

Ayer estuve jugando un poco pero al estilo de "la cuenta de la abuela". En cada distribución si el día es viernes, comprobar cuántos viernes había realizado el empleado en un periodo que en ese momento establecí desde la fecha del viernes hasta (número de empleados + 31) días menos, en lugar de comprobar todos los viernes realizados por el empleado durante el año. Si había realizado alguno se mete en una lista de posibles candidatos y se comprueban los siguientes empleados hasta que se encuentra alguno que no haya realizado ningún viernes en ese periodo o se acabe la lista de empleados, en cuyo caso cojo de la lista de posibles candidatos el que menos viernes haya hecho. Bien, pero no tenía en cuenta si el empleado ha hecho o va a hacer otra guardia ese mes. Sí, un jaleo que seguro que se puede simplificar mucho. Hoy estoy pensando en coger de la base de datos todas las guardias realizadas durante el año, agruparlas por empleado en una lista y realizar todas las operaciones con esa lista, utilizando siempre el empleado que menos guardias ha realizado, y cuando toca repartir un viernes utilizar la misma lista filtrando por viernes y utilizando también siempre el que menos haya realizado, poniendo otro mecanismo para comprobar que no se haya asignado otra guardia ese mismo mes, y si se ha hecho y es forzoso repetir (hay menos de 31 empleados) al menos que no sea viernes.
Espero haberme explicado un poco, un saludo.