Antecedentes:
Hay alrededor de 60 estudiantes en el internado para el que trabajo. El consejero nos pidió a mi colega y a mí que ideáramos una mejor manera de preparar los asientos para la cena que a mano. Le gustaría tareas para el resto del año escolar. También nos pidió que intentemos resolver algunos de los problemas sobre los que ha tenido noticias de estudiantes y profesores.
Restricciones:
- La mayoría de los estudiantes no son de los EE. UU., Por lo tanto, cuando están rodeados de personas de la misma nacionalidad (es decir, en la mesa), hablan el idioma en el que hablan con fluidez, en lugar de practicar inglés,
- Las quejas se hacen cuando los estudiantes se han sentado en una mesa determinada "demasiadas" veces en general,
- o si se sientan en la misma mesa más de dos veces seguidas,
- y algunos de los estudiantes no se llevan bien, por lo que no pueden sentarse juntos.
Entrada:
En tiempo de ejecución, el programa se suministra con:
- Un conjunto de personas,
- Un conjunto de mesas, y
- Cada mesa tiene un número diferente de asientos (se permite la repetición)
El tamaño de ambos conjuntos y el tamaño de cada tabla no cambian entre cada asignación.
Pruebas:
Estoy usando 18 personas de diferentes nacionalidades y 4 mesas de tamaño 3 a 6, inclusive. Elegí números que pensé que tenían sentido para ese conjunto de datos:
- No más de 3 personas de la misma nacionalidad pueden sentarse juntas a la vez
- Ninguna persona puede sentarse en una mesa más de 4 veces.
Resultados:
Ejecuté el generador unas 15 veces sin cambiar los datos de entrada. Cada vez, viene con entre 6 y 12 "semanas" de tareas.
Preguntas:
(de menor a mayor importancia)
- ¿Por qué obtengo un número diferente de asignaciones generadas cada vez que ejecuto el programa? El conjunto de datos no cambia entre ejecuciones.
- ¿Cómo encuentro el ...
- número mínimo de personas de la misma nacionalidad que pueden sentarse en una mesa determinada,
- cantidad mínima de veces en general que se sientan en una mesa determinada, todo mientras
- maximizando el número de asignaciones generadas?
- ¿Cómo garantizo que estos son realmente los números correctos?
Editar:
Cada vez que genero una nueva asignación, llamo Collections.shuffle(List)a la lista de personas para aleatorizar su orden. Luego paso la lista de tablas y personas a un método de seguimiento basado en la implementación de ocho reinas de kapilid en github para asignar personas a las tablas.