J'essaie de créer un planificateur de ligue sportive. J'ai du mal à identifier un algorithme pour m'aider efficacement à remplir chaque emplacement.
Les échantillons de données pour créer le calendrier seront:
Table combo (contient 45 combos)
Identifiant
Team1id
[.____] Team2id
[.____] Bittasigned
Tableau de planification (contient 45 emplacements horaires
barriché
[.____] Hométeamid
[.____] Abatteamid
[.____] gamedate
Temps de jeu
À l'heure actuelle, mes procédures existantes remplissent environ 90% des emplacements laissant 10% de mes machines à sous vide à un conflit de planification basée sur les règles ci-dessus.
Je boucle sur ma table d'emploi du calendrier en ordre croissant.
[.____] Mon premier emplacement pourrait être samedi à 8h.
[.____] J'exette 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 tirer 1 enregistrement aléatoire de ma table de combinaisons des combinaisons qui n'ont pas encore été programmées et que 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 devient plus petite et que mon tableau de temps est en conséquence aussi.
Je trouve que certains jours vont bien et, à d'autres jours, mes dernières 2 dernières équipes restantes ont déjà jouées dans la semaine précédente afin de ne plus être ajoutées à la planification.
La seule chose que je n'ai pas encore essayée est de "réinitialiser" les jours de conflit et de les essayer à nouveau de voir si je reçois de meilleurs placements.
Est-ce que quelqu'un a des suggestions?
Voici un algorithme que j'ai inventé moi-même. Je ne sais pas si cela existe déjà ou est en fait la mise en œuvre du rond Robin:
1 4 1 5 1 6 1 3 1 2
2 5 4 6 5 3 6 2 3 4
3 6 2 3 4 2 5 4 6 5
fondamentalement, vous commencez avec
et toujours garder le 1 dans la même position et faire pivoter le reste.
De cette façon, vous obtiendrez toujours un calendrier de matchs uniques. Ceci est extrêmement facile à mettre en œuvre et à balancer avec n'importe quel nombre d'adversaires, même ou inégaux. Si vous avez un nombre inégal d'adversaires, ne placez pas une équipe dans la position 1 et ils ont un tour gratuit.
Je pense que vous le faites en arrière. NE Commencez avec la table d'horaire, commencez par une table/une matrice/Quelles que soient toutes les combinaisons de jeux (les 45 matchs). À partir de là, c'est un processus simple d'attribuer les jeux à une journée, basé sur une équipe qui ne joue qu'une fois par jour. Et puisque les matchs n'arrivent qu'une fois (l'équipe unique joue une seule équipe B une fois), la planification est facile, car il vous suffit de vous assurer que le matchUn n'est pas déjà arrivé (les entrées sont "uniques" de cette façon).
J'ai généré le programme Robin Round Round Round de 10 équipes ci-dessous. Cela m'a fallu environ 3 minutes.
Horaire Info:
10 équipes - 1 rond robin (seules les 6 premières semaines sont affichées)
Date de début de saison 1/6/15 - Date de fin 3/5/15
[.____] 2 matchs chaque mardi, 3 matchs tous les jeudis, 5 matchs chaque semaine, pas de dates de saut
Nous avons utilisé un ordinateur de cadre principal obsolète Honeywell et un peu moins de 3 ans pour mettre tout cela ensemble ensemble. Une fois que notre logiciel de planification a été débogué, il a fallu l'ordinateur principal de la trame de plusieurs heures de recherche de millions de permutations et de combinaisons pour calculer et créer les modèles équilibrés pour 4 à 22 équipes que nous recherchions.
10 Team Division Schedule DATE 12/20/14
DATE DAY TIME LOCATION GM HOME vs VISITOR
Jan 6 Tue 6:00pm Field #1 1 # 1 vs #10
Jan 6 Tue 6:00pm Field #2 1 # 2 vs # 9
Jan 8 Thu 6:30pm Field #3 1 # 3 vs # 8
Jan 8 Thu 6:30pm Field #4 1 # 4 vs # 7
Jan 8 Thu 6:30pm Field #5 1 # 5 vs # 6
Jan 13 Tue 6:00pm Field #1 2 # 6 vs # 3
Jan 13 Tue 6:00pm Field #2 2 #10 vs # 8
Jan 15 Thu 6:30pm Field #3 2 # 7 vs # 2
Jan 15 Thu 6:30pm Field #4 2 # 9 vs # 1
Jan 15 Thu 6:30pm Field #5 2 # 4 vs # 5
Jan 20 Tue 6:00pm Field #1 3 # 7 vs # 9
Jan 20 Tue 6:00pm Field #2 3 # 5 vs # 2
Jan 22 Thu 6:30pm Field #3 3 # 6 vs #10
Jan 22 Thu 6:30pm Field #4 3 # 3 vs # 4
Jan 22 Thu 6:30pm Field #5 3 # 8 vs # 1
Jan 27 Tue 6:00pm Field #1 4 # 9 vs # 5
Jan 27 Tue 6:00pm Field #2 4 # 1 vs # 7
Jan 29 Thu 6:30pm Field #3 4 # 2 vs # 3
Jan 29 Thu 6:30pm Field #4 4 # 8 vs # 6
Jan 29 Thu 6:30pm Field #5 4 #10 vs # 4
Feb 3 Tue 6:00pm Field #1 5 # 4 vs # 8
Feb 3 Tue 6:00pm Field #2 5 # 7 vs # 5
Feb 5 Thu 6:30pm Field #3 5 # 1 vs # 6
Feb 5 Thu 6:30pm Field #4 5 #10 vs # 2
Feb 5 Thu 6:30pm Field #5 5 # 3 vs # 9
Feb 10 Tue 6:00pm Field #1 6 # 3 vs # 7
Feb 10 Tue 6:00pm Field #2 6 # 6 vs # 4
Feb 12 Thu 6:30pm Field #3 6 # 5 vs # 1
Feb 12 Thu 6:30pm Field #4 6 # 9 vs #10
Feb 12 Thu 6:30pm Field #5 6 # 8 vs # 2
Aucun algorithme ne résout les problèmes de planification générale associés aux centaines ou des milliers de types de ligues, de sports et de situations potentielles différents. Ce que nous avons fait pour résoudre ce problème, c'était d'adopter une approche différente pour calculer les calendriers. Il commence par le calcul très complexe pour déterminer les appariements appropriés de l'équipe Round Robin (match-ups), mais c'était juste le début. D'autres pièces sont nécessaires pour créer un horaire équilibré utile pouvant être publié et distribué. Les joueurs, les autocars, les parents, etc., ont tous besoin de savoir non seulement qui jouent; mais où ils jouent; quelle heure ils jouent; s'ils sont à la maison ou au visiteur; et pour de nombreuses ligues, n numéro de je.
J'espère que cela vous aidera et d'autres personnes comprennent ce qui nous a pris 3 ans pour comprendre.