Estoy trabajando en una aplicación en la que necesito para programar automáticamente los trabajos para los miembros en un horario rotativo. No soy muy bueno para explicar las reglas, así que aquí tiene algunos datos para ayudar a cabo:
Posiciones: un puesto de trabajo, con normas tales como los lunes y los miércoles semanales.
Categorías: un conjunto de posiciones
Grupos: Otro conjunto de posiciones. Las posiciones en el mismo grupo no pueden ser asignados en el mismo día
Miembros: Los usuarios asignados a posiciones en una fecha determinada.
Para cada fecha en el mes, los miembros se asignan a posiciones (tanto en orden ascendente). Si un miembro se le asigna una posición en una categoría, la próxima vez que un puesto en la misma categoría aparece, el siguiente miembro alfabéticamente (o al principio de la lista) se asigna por ejemplo.
Miembros: M1, M2, M3, M4
Las posiciones en la Categoría C1: P1, P2, P3
miembros en la posición P1: M1, M2, M3, M4
miembros en la posición P2: M1, M2, M3
miembros en la posición P2: M1, M3, M4
Si M1 se asigna para P1, P2, si viene a continuación, se le asignará M2. Una capa adicional de complejidad se introduce en la que si P3 viene a continuación en cambio, se le asigna M3. El sistema tiene que seguir la pista del hecho de que M2 se 'salta' y asignar M2 siguiente si está disponible, a continuación, asignar M4 siguiente, o esperar hasta que llegue a una posición en la que M2 está disponible (esto se convierte, además, complejo cuando hay muchos 'saltado miembros).
Un miembro también se omite si se ha indicado que no estará disponible en esa fecha. El sistema tiene que dar prioridad a los miembros omitidos, de alguna manera identificarlos cuando suben y luego saltar a la siguiente persona en la lista de lógica. Saltarse también se aplica a los grupos debido a los choques de la fecha.
Ya tengo una solución [y desordenado] temporal que ya no entender a pesar de que tengo un montón de comentarios en el mismo explicando cada paso. Sus puntos débiles son en el trato con los miembros omitidos.
Si se va a codificar esta ¿cómo hacerlo? Estoy poniendo en práctica esto en PHP, pero pseudocódigo trabajaría también.













