J'essaie de créer un calendrier de ligue sportive. J'ai du mal à identifier un algorithme pour m'aider à remplir efficacement chaque emplacement.
Des exemples de données pour construire le calendrier seraient:
- 10 équipes
- Chaque équipe se joue 1 fois (45 matchs au total requis)
- Chaque équipe ne joue pas plus d'une fois par jour
- Dans mes tests, j'utilise 9 jours avec 5 emplacements par jour.
Table combinée (contient 45 combos)
ID
Team1ID
Team2ID
bitAssigned
Tableau des horaires (contient 45 plages horaires)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
À l'heure actuelle, mes procédures existantes remplissent environ 90% des emplacements, laissant 10% de mes emplacements vides à un conflit d'horaire basé sur les règles ci-dessus.
Je passe en revue ma table de programme dans l'ordre croissant de date / heure.
Ma première place pourrait être samedi à 8h.
Je recherche une liste d'équipes qui n'ont pas encore été programmées. Je fais ensuite un éventail de combinaisons possibles de ces équipes. J'utilise ensuite ce tableau pour extraire 1 enregistrement aléatoire de ma table de combinaisons de combinaisons qui n'ont pas encore été planifiées et je place ces équipes sur le calendrier. J'ai ensuite défini cette combinaison comme utilisée.
Je répète la boucle encore et encore et à chaque fois que ma liste d'équipes disponibles se réduit et que mon tableau est également plus petit.
Je constate que certains jours se passent bien, et d'autres jours, mes 2 dernières équipes restantes ont déjà joué la semaine précédente, donc elles ne sont pas ajoutées au calendrier.
La seule chose que je n'ai pas encore essayée est de "réinitialiser" les jours de conflit et de les réessayer pour voir si j'obtiens de meilleurs placements.
Est-ce que quelqu'un a des suggestions?