Task #1238
Cập nhật bởi Tiến Lực Phạm cách đây khoảng 1 tháng
1. Mục đích Bổ sung chức năng thiết lập và ghép logic các ràng buộc vào quá trình xếp thời khóa biểu nhằm: Đảm bảo thời khóa biểu tuân thủ các quy tắc học thuật (theo môn, theo bài) Giảm thao tác thủ công và hạn chế sai sót khi xếp thời khóa biểu Cho phép hệ thống tự động hóa xử lý nhiều ràng buộc phức tạp 2. Yêu cầu nghiệp vụ 2.1. Câu chuyện nghiệp vụ Thiết lập các ràng buộc liên quan đến môn học và bài học Kết hợp (ghép logic) nhiều ràng buộc khác nhau để áp dụng khi xếp thời khóa biểu Đảm bảo thứ tự học các bài trong cùng một môn (ví dụ: Bài 1 phải trước Bài 2) Áp dụng các quy tắc như: các môn trước sau, song song, tiên quyết ví dụ bài 5 môn triết phải học trước bài 7 môn tư tưởng hcm,... ngoài ra còn học xen kẽ kẽ, như trong tài liệu mô tả ràng buộc Khi hệ thống xếp TKB, các ràng buộc này được tự động kiểm tra và áp dụng Ví dụ nghiệp vụ: Môn Toán có các bài: Bài 1, Bài 2, Bài 3 Ràng buộc: Bài 1 → phải học trước Bài 2 Bài 2 và Bài 3 không được học cùng ngày Khi xếp TKB, hệ thống phải đảm bảo các điều kiện trên luôn đúng 2.2. Mong muốn Cho phép cấu hình ràng buộc linh hoạt theo: Môn học Bài học Thời gian (ngày, tiết) Có khả năng ghép nhiều ràng buộc bằng logic (AND / OR) Có giao diện dễ hiểu để người dùng thiết lập rule mà không cần kỹ thuật Hệ thống kiểm tra và cảnh báo khi ràng buộc bị vi phạm Cho phép bật/tắt từng ràng buộc (Sau này, có thể chưa cần ngay) Hỗ trợ ưu tiên (priority) giữa các ràng buộc (Sau này, cho việc xếp tkb tự động) 2.3. Khó khăn Số lượng ràng buộc lớn và có thể xung đột lẫn nhau Logic ghép ràng buộc phức tạp (AND/OR/NOT) Khó đảm bảo hiệu năng khi xếp thời khóa biểu với nhiều điều kiện Người dùng nghiệp vụ có thể khó hiểu cách thiết lập rule phức tạp Cần xử lý trường hợp không tồn tại lời giải thỏa mãn tất cả ràng buộc 3. Giải pháp phần mềm, chức năng nghiệp vụ bị ảnh hưởng 3.1. Giải pháp đề xuất Thiết kế hệ thống Rule Engine (Engine xử lý ràng buộc) gồm: Danh sách ràng buộc (Constraint) Nhóm ràng buộc (Constraint Group) có thể ghép logic Các loại ràng buộc: Thứ tự bài học Ràng buộc theo môn,bài Xây dựng cấu hình: Cho phép người dùng định nghĩa rule dạng: Thiết lập mức độ: Hard constraint (bắt buộc) Soft constraint (ưu tiên) nên có Tích hợp vào module xếp thời khóa biểu: Khi xếp lịch → hệ thống kiểm tra toàn bộ ràng buộc Nếu vi phạm: Hard → không cho phép Soft → cảnh báo / tính điểm tối ưu (nên có) Giao diện: Màn hình quản lý ràng buộc Màn hình cấu hình logic ghép rule Hiển thị danh sách rule đang áp dụng 3.2. Chức năng bị ảnh hưởng Xếp thời khóa biểu (core) Quản lý môn học và bài học Phân công giảng dạy Báo cáo và kiểm tra tính hợp lệ của thời khóa biểu