Saya mencoba membuat penjadwal liga olahraga. Saya mengalami kesulitan mengidentifikasi algoritma untuk membantu saya secara efisien mengisi setiap slot.
Contoh data untuk membangun jadwal adalah:
- 10 tim
- Setiap tim bermain satu sama lain 1 kali (diperlukan total 45 pertandingan)
- Setiap tim bermain tidak lebih dari 1 kali per hari
- Dalam pengujian saya, saya menggunakan 9 hari dengan 5 slot per hari.
Combo Table (mengandung 45 combo)
ID
Team1ID
Team2ID
bitDitugaskan
Jadwal Tabel (berisi 45 slot waktu)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
Saat ini prosedur saya yang ada mengisi sekitar 90% dari slot sehingga 10% dari slot saya kosong untuk konflik penjadwalan berdasarkan aturan di atas.
Saya mengulangi tabel jadwal saya dalam urutan tanggal / waktu naik.
Slot pertama saya mungkin Sabtu jam 8 pagi.
Saya menanyakan daftar tim yang belum dijadwalkan. Saya kemudian membuat berbagai kemungkinan kombinasi tim-tim itu. Saya kemudian menggunakan array itu untuk menarik 1 catatan acak dari tabel kombinasi saya dari kombinasi yang belum dijadwalkan dan saya menempatkan tim-tim itu pada jadwal. Saya kemudian mengatur kombinasi itu seperti yang digunakan.
Saya mengulangi loop berulang dan setiap kali daftar tim yang tersedia saya semakin kecil dan array saya sebagai hasilnya juga lebih kecil.
Saya menemukan bahwa beberapa hari berjalan dengan baik, dan di hari lain 2 tim terakhir saya yang tersisa sudah bermain di minggu sebelumnya sehingga mereka tidak ditambahkan ke jadwal lagi.
Satu-satunya hal yang saya belum coba adalah "mengatur ulang" hari konflik dan mencobanya lagi untuk melihat apakah saya mendapatkan penempatan yang lebih baik.
Adakah yang punya saran?