Sto cercando di creare un programmatore di campionati sportivi. Ho difficoltà a identificare un algoritmo per aiutarmi a riempire in modo efficiente ogni slot.
I dati di esempio per costruire il programma sarebbero:
- 10 squadre
- Ogni squadra si gioca 1 volta (sono necessari 45 giochi in totale)
- Ogni squadra gioca non più di 1 volta al giorno
- Nei miei test sto usando 9 giorni con 5 slot al giorno.
Tabella combinata (contiene 45 combo)
ID
Team1ID
Team2ID
bitAssigned
Tabella degli orari (contiene 45 fasce orarie)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
In questo momento le mie procedure esistenti riempiono circa il 90% delle slot lasciando il 10% delle mie slot vuote in un conflitto di pianificazione basato sulle regole di cui sopra.
Ciclo sopra la mia tabella di programma in ordine crescente di data / ora.
La mia prima slot potrebbe essere sabato alle 8 del mattino.
Richiedo un elenco di team che non sono stati ancora programmati. Quindi creo una serie di possibili combinazioni di quelle squadre. Quindi uso quell'array per estrarre 1 record casuale dalla mia tabella delle combinazioni delle combinazioni che non sono state ancora programmate e inserisco quelle squadre nel programma. Ho quindi impostato quella combinazione come utilizzata.
Ripeto ripetutamente il loop e ogni volta il mio elenco di team disponibili diventa più piccolo e anche il mio array risulta più piccolo.
Sto scoprendo che alcuni giorni vanno bene e in altri giorni le mie ultime 2 squadre rimaste hanno già giocato in una settimana precedente, quindi non vengono nuovamente aggiunte al programma.
L'unica cosa che non ho ancora provato è "resettare" i giorni di conflitto e riprovarli per vedere se ottengo posizionamenti migliori.
Qualcuno ha qualche suggerimento?