Benötigen Sie Hilfe bei der Identifizierung eines Liga-Planungsalgorithmus?

9

Ich versuche einen Sportliga-Planer zu erstellen. Ich habe Probleme, einen Algorithmus zu identifizieren, mit dem ich jeden Steckplatz effizient ausfüllen kann.

Beispieldaten zum Erstellen des Zeitplans wären:

  1. 10 Teams
  2. Jedes Team spielt 1 Mal gegeneinander (insgesamt 45 Spiele erforderlich)
  3. Jedes Team spielt nicht mehr als 1 Mal pro Tag
  4. Bei meinen Tests verwende ich 9 Tage mit 5 Slots pro Tag.

Kombitabelle (enthält 45 Combos)

ID
Team1ID
Team2ID
bitAssigned

Zeitplantabelle (enthält 45 Zeitfenster)

ScheduleID
HomeTeamID
AwayTeamID
GameDate
GameTime

Momentan füllen meine vorhandenen Prozeduren ungefähr 90% der Slots und lassen 10% meiner Slots für einen Planungskonflikt leer, der auf den oben genannten Regeln basiert.

Ich durchlaufe meine Zeitplantabelle in aufsteigender Reihenfolge von Datum und Uhrzeit.
Mein erster Slot könnte Samstag um 8 Uhr sein.
Ich frage eine Liste von Teams ab, die noch nicht geplant wurden. Ich mache dann eine Reihe möglicher Kombinationen dieser Teams. Ich verwende dieses Array dann, um 1 zufälligen Datensatz aus meiner Kombinationstabelle aus Kombinationen zu ziehen, die noch nicht geplant wurden, und platziere diese Teams auf dem Zeitplan. Ich habe diese Kombination dann wie verwendet eingestellt.

Ich wiederhole die Schleife immer wieder und jedes Mal, wenn meine Liste der verfügbaren Teams kleiner wird und mein Array dadurch auch kleiner wird.

Ich stelle fest, dass einige Tage gut verlaufen, und an anderen Tagen haben meine letzten beiden verbleibenden Teams bereits in einer Vorwoche gespielt, sodass sie nicht wieder in den Zeitplan aufgenommen werden.

Das einzige, was ich bisher noch nicht versucht habe, ist, die Konflikttage zurückzusetzen und erneut zu versuchen, um zu sehen, ob ich bessere Platzierungen bekomme.

Hat jemand irgendwelche Vorschläge?

Steve
quelle
5
Round-Robin-Turnierplanung
Kevin Cline
Kevin, danke. Ihr Recht. Ich denke, dass mein Array momentan jedes Mal an derselben Stelle startet und es keine Rotation gibt, so dass kein geordneter Ablauf für die Paarung der Teams besteht.
Steve
1
Ich benutze einen völlig zufälligen Ansatz. Wähle zufällig einen Slot und zwei Teams aus. Wenn die Regeln erfüllt sind, planen Sie das Spiel. Wenn nicht, verwerfen und erneut versuchen. Ich habe ein Limit für die Gesamtzahl der Versuche festgelegt. Wenn das Limit erreicht ist, verwerfe ich den gesamten Zeitplan und beginne von vorne. In der Praxis funktioniert das eigentlich ganz gut.
Cerad
Am Ende folgte ich dem Round-Robin-Ansatz. Ich bin zu 95% mit dem Schreiben des Skripts für die Verbindung zur Datenbank fertig, aber beim Testen scheint es reibungslos und ausgewogen zu laufen. Ich behandle meine Tage wie "Runden" und sie bleiben schön und ausgeglichen. Ich kann meine Runden in beliebiger Reihenfolge spielen und die Spiele für jede Runde in beliebiger Reihenfolge platzieren, aber ein Spiel von einer Runde in eine andere zu verschieben, würde letztendlich gegen die Regeln verstoßen.
Steve

Antworten:

5

Hier ist ein Algorithmus, den ich selbst erfunden habe. Ich weiß nicht, ob es bereits existiert oder tatsächlich die Round-Robin-Implementierung ist:

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

Im Grunde fängst du mit an

Rotationsbild

und halten Sie die 1 immer in der gleichen Position und drehen Sie den Rest.

Auf diese Weise erhalten Sie immer einen Zeitplan mit einzigartigen Spielen. Dies ist extrem einfach zu implementieren und lässt sich mit einer beliebigen Anzahl von Gegnern skalieren, auch wenn diese ungleichmäßig sind. Wenn Sie eine ungerade Anzahl von Gegnern haben, platzieren Sie einfach kein Team auf Position 1 und es hat eine freie Runde.

Pieter B.
quelle
2
Wie verwalten Sie Heim- und Auswärtsguthaben?
Eric Cope
Dies funktioniert nicht wirklich - in diesem einfachen Rotationsalgorithmus werden die rotierenden Teams, die 2 Slots voneinander entfernt sind (2/4, 3/5), niemals spielen.
Mdryden
@mdryden es funktioniert. Überprüfen Sie es besser und entfernen Sie bitte Ihren Kommentar.
Pieter B
@PieterB Ich dachte, dass es funktionieren würde, aber es funktioniert tatsächlich nicht, wenn es eine ungerade Anzahl von Teams gibt, da diejenigen, die direkt nebeneinander liegen (wie 4 und 5), niemals gegeneinander spielen werden. Sie können es am Ende mit der 1 und auch am anderen Ende ziemlich leicht sehen, weil Sie das baumelnde Team haben (mit dem Tschüss). Hier ist eine gute Antwort, die sich auch mit der ungeraden Zahl befasst: stackoverflow.com/a/6649732/ 6489306
Ragingasiancoder
@ragingasiancoder Wenn es eine ungerade Anzahl von Teams gibt, füge ein Dummy-Team hinzu. Die Antwort, die Sie verlinkt haben, beschreibt genau die gleiche Lösung, die ich vorgestellt habe.
Pieter B
1

Ich denke du machst es rückwärts. Beginnen Sie nicht mit der Zeitplantabelle, sondern mit einer Tabelle / einem Array / einer beliebigen Spielkombination (den 45 Spielen). Von dort aus ist es ein einfacher Vorgang, die Spiele einem Tag zuzuweisen, basierend auf einem Team, das nur einmal am Tag spielt. Und da Matchups nur einmal stattfinden (Team A spielt Team B nur einmal), ist die Planung einfach, da Sie nur sicherstellen müssen, dass das Matchup noch nicht stattgefunden hat (die Einträge sind auf diese Weise "eindeutig").

Unbekannter Codierer
quelle
1

Ich habe unten den 10-Team-Single-Round-Robin-Zeitplan erstellt. Ich habe ungefähr 3 Minuten gebraucht.

Zeitplaninfo:

10 Teams - 1 Round Robin (nur die ersten 6 Wochen werden angezeigt)
Saisonstartdatum 06.01.15 - Enddatum 05.03.15
2 Spiele jeden Dienstag, 3 Spiele jeden Donnerstag, 5 Spiele jede Woche ohne Überspringdaten

  • Alle Teams werden verteilt, um in den 5 Zeitfenstern gleichermaßen zu spielen.
  • Alle spielen 9 Spiele.
  • Alle spielen sich einmal.
  • Alle werden gleichmäßig als Heim & Besucher verteilt (entweder 5/4 oder 4/5). Hinweis: Am Ende von Round Robin 2 spielen alle Teams 18 Spiele (9 als Heimspiel und 9 als Besucher) und alle Teams haben 2 Byes.
  • Alle werden verteilt, um jede Woche gleichmäßig in den 5 Zeitfenstern zu spielen.

Wir haben einen veralteten Honeywell-Mainframe-Computer verwendet und knapp 3 Jahre, um das Ganze zusammenzustellen. Nach dem Debuggen unserer Planungssoftware benötigte der Hauptrechner viele Stunden, um Millionen von Permutationen und Kombinationen zu durchsuchen und die ausgewogenen Muster für 4 bis 22 Teams zu berechnen und zu erstellen, nach denen wir suchten.

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 

Es gibt keinen Algorithmus, der die allgemeinen Planungsprobleme löst, die mit Hunderten oder Tausenden verschiedener Arten von Ligen, Sportarten und potenziellen Situationen verbunden sind. Um dieses Problem zu lösen, haben wir einen anderen Ansatz zur Berechnung der Zeitpläne gewählt. Es beginnt mit der sehr komplexen Mathematik, um die richtigen Round-Robin-Team-Paarungen (Match-Ups) zu bestimmen, aber das war erst der Anfang. Andere Teile werden benötigt, um einen nützlichen, ausgewogenen Zeitplan zu erstellen, der veröffentlicht und verteilt werden kann. Spieler, Trainer, Eltern usw. müssen nicht nur wissen, gegen wen sie spielen . aber wo sie spielen ; was Zeit sie spielen ; wenn sie zu Hause oder Besucher sind ; und für viele Ligen eine Spielnummer .

Ich hoffe, dies hilft Ihnen und anderen zu verstehen, was wir 3 Jahre gebraucht haben, um herauszufinden.

Gemeinschaft
quelle