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:
- 10 Teams
- Jedes Team spielt 1 Mal gegeneinander (insgesamt 45 Spiele erforderlich)
- Jedes Team spielt nicht mehr als 1 Mal pro Tag
- 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?