web-dev-qa-db-fra.com

Besoin d'aide pour identifier un algorithme de planification de la ligue

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:

  1. 10 équipes
  2. Chaque équipe se lit 1 fois (45 jeux totaux requis)
  3. Chaque équipe ne joue pas plus d'une fois par jour
  4. Dans mes tests, j'utilise 9 jours avec 5 emplacements par jour.

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?

9
steve

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

rotation pic

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.

5
Pieter B

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).

1
Unknown Coder

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

  • Toutes les équipes sont distribuées pour jouer dans les 5 emplacements horaires de même.
  • Tous jouent 9 matchs.
  • Tous se jouent une fois.
  • Tous sont répartis uniformément comme maison et visiteur (5/4 ou 4/5). Remarque: à la fin du tour, toutes les équipes jouent 18 matchs (9 comme chez vous et 9 comme visiteur) et toutes les équipes ont 2 byes.
  • Tous sont distribués pour jouer uniformément dans les 5 fentes chronologiques chaque semaine.

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.

1
user160918