Tôi đang cố gắng để tạo ra một lịch trình giải đấu thể thao. Tôi gặp khó khăn trong việc xác định một thuật toán để giúp tôi điền vào từng vị trí một cách hiệu quả.
Dữ liệu mẫu để xây dựng lịch trình sẽ là:
- 10 đội
- Mỗi đội chơi với nhau 1 lần (tổng số 45 trò chơi cần thiết)
- Mỗi đội chơi không quá 1 lần mỗi ngày
- Trong thử nghiệm của tôi, tôi đang sử dụng 9 ngày với 5 vị trí mỗi ngày.
Bảng kết hợp (chứa 45 combo)
ID
Team1ID
Team2ID
bit Được chỉ định
Bảng lịch trình (chứa 45 khe thời gian)
lịch trình về
nhàTeamID
điTeamID
GameDate
GameTime
Ngay bây giờ các quy trình hiện tại của tôi lấp đầy khoảng 90% vị trí còn lại 10% vị trí của tôi trống cho xung đột lịch trình dựa trên các quy tắc ở trên.
Tôi lặp qua bảng lịch trình của mình theo thứ tự ngày / giờ tăng dần.
Khe đầu tiên của tôi có thể là thứ bảy lúc 8 giờ sáng.
Tôi truy vấn danh sách các đội chưa được lên lịch. Sau đó tôi tạo ra một loạt các kết hợp có thể có của các đội đó. Sau đó, tôi sử dụng mảng đó để lấy 1 bản ghi ngẫu nhiên từ bảng kết hợp của mình từ các kết hợp chưa được lên lịch và tôi đặt các nhóm đó vào lịch trình. Sau đó tôi đặt kết hợp đó là sử dụng.
Tôi lặp đi lặp lại nhiều lần và mỗi lần danh sách các đội có sẵn của tôi trở nên nhỏ hơn và kết quả là mảng của tôi cũng nhỏ hơn.
Tôi thấy rằng một số ngày diễn ra tốt đẹp, và vào những ngày khác, 2 đội cuối cùng còn lại của tôi đã chơi trong tuần trước để họ không được thêm vào lịch trình nữa.
Điều duy nhất tôi chưa thử là "thiết lập lại" những ngày xung đột và thử lại lần nữa để xem liệu tôi có nhận được các vị trí tốt hơn không.
Có ai có bất cứ đề nghị?