Task #1476
Cập nhật bởi Hải Ninh Đoàn cách đây 3 tháng
**1. 1. Mục đích** đích Xây dựng chức năng xếp thời khóa biểu tự động cho từng khóa đào tạo trong quý nhằm: Giảm thao tác xếp lịch thủ công Tự động phân bổ môn học, bài học theo đúng quy định huấn luyện Đảm bảo tuân thủ các ràng buộc đào tạo Hỗ trợ tối ưu lịch học theo ngày, tuần, quý Hạn chế xung đột: Phòng học Mốc huấn luyện Kế hoạch huấn luyện Ràng buộc bài học Hỗ trợ người dùng tinh chỉnh thủ công sau khi xếp Hệ thống sử dụng: Greedy Algorithm để xếp lịch sơ bộ Hill Climbing để tối ưu và tinh chỉnh lịch 2. Yêu cầu nghiệp vụ 2.1 Câu chuyện nghiệp vụ Hiện tại việc xếp thời khóa biểu đang thực hiện chủ yếu bằng tay: Xếp cho từng khoá/lớp Chọn từng ngày Chọn từng môn/ bài học Kiểm tra thủ công: Mốc huấn luyện Lịch thi Phòng học Tiết học Giảng viên Trong thực tế: Một khóa có nhiều lớp Một quý có nhiều môn học Có nhiều ràng buộc phức tạp Thường xuyên thay đổi kế hoạch huấn luyện Các vấn đề gặp phải: Tốn nhiều thời gian xếp lịch Dễ xung đột phòng học Dễ vi phạm kế hoạch huấn luyện Khó đảm bảo đúng thứ tự bài học Khó tối ưu phân bố lịch học Do đó cần chức năng xếp tự động hỗ trợ: Xếp sơ bộ nhanh Tự động xử lý ràng buộc Tinh chỉnh tối ưu lịch Cho phép người dùng chỉnh sửa tiếp bằng tay 2.2 Mong muốn Người dùng mong muốn: Chỉ cần chọn khóa đào tạo và quý → hệ thống tự xếp Không ghi đè lịch đã xếp tay Chỉ xếp vào ô còn trống Có thể bấm “Xếp tự động” nhiều lần để xếp tiếp các tiết còn dư Tuân thủ đầy đủ: Mốc huấn luyện Kế hoạch huấn luyện Thứ tự bài học Loại hình bài học Quy tắc môn học Tự động tối ưu lịch: Giảm tiết lẻ Giảm khoảng trống Hạn chế học quá tải Ngoài ra: Ưu tiên xếp buổi sáng Buổi chiều dùng để: Xếp lịch dư Dồn lịch thay đổi Xử lý conflict 2.3 Khó khăn - Về nghiệp vụ Có nhiều loại tiết: Có nhiều ràng buộc đặc thù quân sự Có các block cứng không được xếp Có các môn ưu tiên cao: Chiến thuật Bắn súng Thao trường - Về dữ liệu Một quý có nhiều bài học Một bài có nhiều loại hình Có bài kéo dài nhiều ngày Có bài yêu cầu đúng khoảng thời gian - Về thuật toán Khó tối ưu toàn bộ lịch ngay từ đầu Nhiều conflict: Phòng học Tiết học Khoảng cách lịch Tiết lẻ Khó đảm bảo toàn bộ constraint đều đúng 100% 3. Quy tắc chi tiết : https://docs.google.com/document/d/1HDzj-z-5y2KyyhDe9dFOk0w_GRuMTAFpG094hAkQss8/edit?tab=t.u3ogbg4k9mm6 4. Kết quả mong muốn Sau khi xếp: Không vi phạm hard constraint Giảm tối đa soft constraint Không conflict phòng học Đảm bảo đúng thứ tự bài học Đảm bảo đúng kế hoạch huấn luyện 4.