Hola. Mi caso es un poco particular, y no sé por dónde empezar el desarrollo. Perdón por la extensión.
Dispongo de una cuadrícula de 18 columnas por 8 filas (que pueden ser variables, pero empecemos por un caso). Las columnas representan turnos de trabajo en tiempo (18 turnos de 20 minutos cada uno, esta info no es útil para la programación). Las filas son el número de trabajadores que tenemos en la empresa.
Se trata de distribuir a los trabajadores en los turnos de trabajo, pero teniendo en cuenta unos parámetros iniciales, unas condiciones previas, dependiendo del trabajador y el trabajo a realizar.
1º. No todos los trabajadores hacen el mismo número de turnos, hay algunos que hacen 12, otros 11 y otros 10 (estos números de turnos sí que pueden variar).
2º. Hay trabajadores que ejecutan un turno concreto del trabajo, es decir, un trabajador tiene asignado los turnos 1,5,6,8,9,11,18 y son invariables, pero le faltan por ejemplo 5 turnos por cubrir. Hay otros trabajadores que por ejemplo hacen el 1,8,9 sólamente, y le faltan otros turnos por cubrir.
3º. Durante los primeros 12 turnos, el trabajador NO puede realizar más de 3 turnos seguidos, como mucho 3 seguidos. Sin embargo después del turno nº 12, sólo puede trabajar 2 turnos seguidos como mucho.
4º. Los turnos fijos son 7, pero también pueden variar dependiendo del trabajador. A los más productivos se le dan los 7 turnos fijos, pero a los menos productivos se les asigna aleatoriamente alguno de esos 7 turnos.
5º. Sólamente puedo tener a la vez 5 trabajadores en el mismo turno, en el turno 1 sólo puede haber 5 trabajadores y así con todos los turnos.
La pregunta es cómo plantear el caso para programar en PHP para que me distribuya de manera automática y aleatoria los trabajadores con sus turnos de trabajo (aleatoria exceptuando los puestos fijos que comento antes).
Pongo un ejemplo por si no me he hecho entender:
Trabajador 1: realiza 12 turnos, y tiene 7 turnos fijos (en este caso son todos los fijos - 1,5,6,8,9,11 y 18)
Trabajador 2: realiza 12 turnos, y tiene 7 turnos fijos (en este caso son todos los fijos - 1,5,6,8,9,11 y 18)
Trabajador 3: realiza 11 turnos, y tiene 5 turnos fijos (asignar aleatoriamente 5 turnos de los 7 posibles)
Trabajador 4: realiza 11 turnos, y tiene 5 turnos fijos (asignar aleatoriamente 5 turnos de los 7 posibles)
Trabajador 5: realiza 11 turnos, y tiene 4 turnos fijos (asignar aleatoriamente 4 turnos de los 7 posibles)
Trabajador 6: realiza 11 turnos, y tiene 3 turnos fijos (asignar aleatoriamente 3 turnos de los 7 posibles)
Trabajador 7: realiza 11 turnos, y tiene 2 turnos fijos (asignar aleatoriamente 2 turnos de los 7 posibles)
Trabajador 8: realiza 11 turnos, y tiene 2 turnos fijos (asignar aleatoriamente 2 turnos de los 7 posibles)
Para asignar los turnos tengo que tener en cuenta que:
1º. En un mismo turno sólo puede haber 5 trabajadores.
2º. Antes del turno 12 ningún trabajador puede trabajar más de 3 turnos seguidos, es decir, 3 máximo.
3º. Después del turno 12 ningún trabajador puede trabajar más de 2 turnos seguidos, es decir, 2 máximo.
Esto es lo que tendría que hacer la programación.
Mil gracias. Por la lectura si has llegado hasta aquí.
Cualquier idea es bien recibida.