Próbuję utworzyć harmonogram ligi sportowej. Mam problem ze zidentyfikowaniem algorytmu, który pomógłby mi skutecznie wypełnić każde pole.
Przykładowe dane do zbudowania harmonogramu to:
- 10 drużyn
- Każda drużyna gra ze sobą 1 raz (wymagane 45 wszystkich gier)
- Każda drużyna gra nie więcej niż 1 raz dziennie
- W moich testach używam 9 dni z 5 automatami na dzień.
Tabela kombinacji (zawiera 45 kombinacji)
ID
Team1ID
Team2ID
bitAssigned
Tabela harmonogramów (zawiera 45 przedziałów czasowych)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
Obecnie moje istniejące procedury wypełniają około 90% miejsc, pozostawiając 10% moich miejsc pustych do konfliktu planowania na podstawie powyższych zasad.
Przeglądam tabelę harmonogramów w porządku rosnącym według daty / godziny.
Moim pierwszym automatem może być sobota o 8 rano.
Przeszukuję listę zespołów, które nie zostały jeszcze zaplanowane. Następnie tworzę szereg możliwych kombinacji tych zespołów. Następnie używam tej tablicy, aby pobrać 1 losowy rekord z mojej tabeli kombinacji z kombinacji, które nie zostały jeszcze zaplanowane, i umieszczam te drużyny w harmonogramie. Następnie ustawiłem tę kombinację jako używaną.
Powtarzam pętlę w kółko i za każdym razem moja lista dostępnych drużyn zmniejsza się, a moja tablica w wyniku tego jest również mniejsza.
Uważam, że niektóre dni idą dobrze, a w inne moje ostatnie 2 ostatnie drużyny grały już w poprzednim tygodniu, więc nie są ponownie dodawane do harmonogramu.
Jedyne, czego jeszcze nie próbowałam, to „zresetować” dni konfliktu i wypróbować je od nowa, aby sprawdzić, czy dostanę lepsze miejsca docelowe.
Czy ktoś ma jakieś sugestie?