Estoy tratando de crear un planificador de liga deportiva. Tengo problemas para identificar un algoritmo que me ayude a completar cada espacio de manera eficiente.
Los datos de muestra para construir el cronograma serían:
- 10 equipos
- Cada equipo juega entre sí 1 vez (se requieren 45 juegos en total)
- Cada equipo juega no más de 1 vez por día
- En mis pruebas estoy usando 9 días con 5 ranuras por día.
Mesa combinada (contiene 45 combos)
ID
Team1ID
Team2ID
bitAssigned
Tabla de programación (contiene 45 franjas horarias)
ScheduleID
homeTeamID
awayTeamID
GameDate
GameTime
En este momento, mis procedimientos existentes ocupan aproximadamente el 90% de los espacios, dejando el 10% de mis espacios vacíos a un conflicto de programación basado en las reglas anteriores.
Doy vueltas sobre mi tabla de horarios en orden ascendente de fecha / hora.
Mi primer puesto podría ser el sábado a las 8 a.m.
Consulto una lista de equipos que aún no se han programado. Luego hago una serie de posibles combinaciones de esos equipos. Luego uso esa matriz para extraer 1 registro aleatorio de mi tabla de combinaciones de combinaciones que aún no se han programado y ubico a esos equipos en el calendario. Luego configuro esa combinación como se usa.
Repito el ciclo una y otra vez y cada vez que mi lista de equipos disponibles se hace más pequeña y mi matriz como resultado también es más pequeña.
Estoy descubriendo que algunos días van bien, y otros días mis últimos dos últimos equipos restantes ya han jugado en una semana anterior, por lo que no se vuelven a agregar al calendario.
Lo único que no he intentado todavía es "restablecer" los días de conflicto e intentarlos nuevamente para ver si obtengo mejores ubicaciones.
¿Alguien tiene alguna sugerencia?