Estou tentando criar um agendador de liga esportiva. Estou tendo problemas para identificar um algoritmo para me ajudar a preencher com eficiência cada slot.
Os dados de amostra para criar a programação seriam:
- 10 equipes
- Cada time joga um ao outro uma vez (são necessários 45 jogos no total)
- Cada equipe joga no máximo 1 vez por dia
- Nos meus testes, estou usando 9 dias com 5 slots por dia.
Tabela Combo (contém 45 combos)
ID
Team1ID
Team2ID
bitAssigned
Tabela de agendamento (contém 45 horários)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
No momento, meus procedimentos existentes preenchem cerca de 90% dos slots, deixando 10% dos slots vazios para um conflito de agendamento com base nas regras acima.
Percorro minha tabela de agendamento em ordem crescente de data / hora.
Meu primeiro horário poderia ser no sábado às 8h.
Consulto uma lista de equipes que ainda não foram agendadas. Em seguida, faço uma série de combinações possíveis dessas equipes. Em seguida, uso essa matriz para extrair 1 registro aleatório da minha tabela de combinações de combinações que ainda não foram agendadas e coloco essas equipes na programação. Em seguida, defino essa combinação como usada.
Repito o ciclo repetidamente e cada vez que minha lista de equipes disponíveis fica menor e minha matriz, como resultado, também é menor.
Estou descobrindo que alguns dias correm bem e, em outros, meus últimos 2 times restantes já jogaram na semana anterior, para que não sejam adicionados à programação novamente.
A única coisa que ainda não tentei é "redefinir" os dias de conflito e experimentá-los novamente para ver se consigo melhores posicionamentos.
Alguém tem alguma sugestão?