Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

BÁO CÁO NGHIÊN CỨU BÀI TOÁN LẬP LỊCH (EXAM TIMETABLE) SỬ DỤNG QUY HOẠCH NGUYÊN

(INTEGER PROGRAMMING)

Họ và tên: Lê Hải Nhật

MSSV: 20225583

1. Giới thiệu về quy hoạch nguyên (integer programming)

Là một trong nhưng dạng quy hoạch của tối ưu hóa toán học, trong đó một vài hoặc toàn bộ các
biến được giới hạn thành số nguyên dựa trên yêu cầu của bài toán.

Đặc biệt, ở đây bài toán lập lịch được tối ưu với dạng

2. Bài toán
a. Dữ liệu đầu vào: (index based 0)
 N là số lớp thi
 M là số phòng thi
 Danh sách class_size là số học sinh của từng lớp với class_size[i] là số học sinh
của lớp (i+1)
 Danh sách capacity là sức chứa của từng phòng với capacity[j] là sức chứa của
phòng (j+1)
 K cặp lớp thi không thể tổ chức thi trong cùng 1 slot thi
 Danh sách conflict có K phần tử là K cặp lớp không thể tổ chức thi trong cùng 1
slot
b. Mô hình hóa bài toán
Biến sử dụng là biễn xijk có giá trị bằng 1 hoặc bằng 0 trong đó:
 X = 1  lớp học ‘i’ ĐƯỢC thi vào slot ‘j’ phòng ‘k’
 X = 0  lớp học ‘i’ KHÔNG ĐƯỢC thi vào slot ‘j’ phòng ‘k’
 ‘i’ có giá trị trong khoảng từ (1 đến N) ( tương đương với số lớp thi)
 ‘j’ có giá trị trong khoảng từ (1 đến N) ( tương đương với số lớp thi -> tình huống
tệ nhất là mỗi lớp thi được thi vào một slot khác nhau)
 ‘k’ có giá trị trong khoảng từ (1 đến M) tương đương với số phòng thi
c. Các ràng buộc (chúng ta sẽ nói đến các ràng buộc trước)
i. phòng thi phải đủ sức chứa cho lớp thi
Với mỗi cặp số i và k (tức phòng thi i+1 và k+1 tương ứng, nếu:
Capacity[k] ≥ class_size[i] (đủ sức chứa) => xijk {0,1}
Capacity[k]< class_size[i] (không đủ sức chứa => xijk = 0
ii. Tất cả phòng thi đều thi và chỉ thi đúng 1 lần
Xét từng lớp thi i ta đặt ràng buộc sau
N−1 M −1

∑ ∑ xijk =1
j=0 k=0

iii. Các cặp lớp không thể thi cùng 1 slot


Với mỗi cặp lớp thi c1 và c2, ta đặt ràng buộc sau
N−1 M −1 N−1 M −1

∑ ∑ xc 1 jk+ ∑ ∑ xc 1 jk=1
j=0 k=0 j=0 k=0
Tức là chỉ có biến trong số đó có giá trị bằng 1

iv. Tại mỗi slot, mỗi phòng thi chỉ được sử dụng 1 lần bởi 1 lớp học
Với mỗi lớp thi i ta đặt 1 ràng buộc sau
N−1 M −1

∑ ∑ xijk =1
j=0 k=0

d. Hàm mục tiêu


Qua nguồn tài liệu tham khảo trên mạng và áp dụng vào bài làm của mình, thuật toán
của tôi không có một hàm mục tiêu cụ thể mà thay vào đó là sử dụng thêm 1 biến y bên
cạnh các biến x đã nêu ở trên.
Yêu cầu bài toán là xắp xếp lớp thi vào các phòng học và slot sao cho số ngày thi là ít
nhất -> tức là số slot thi là ít nhất -> sự chênh lệnh về số lần sử dụng giữa các phòng thi
là ít nhất
Từ đó, tôi thiết lập thêm một ràng buộc, cái mà có thể thay thế hàm mục tiêu: xếp lịch
thi của các lớp sao cho số lần sử dụng nhỏ nhất của phòng học trong số các phòng học là
lớn nhất
Ràng buộc này được biểu diễn như sau: với mỗi phòng thi k, ta xét ràng buộc:
N−1 N−1
0< ∑ ∑ xijk < y
i=0 j=0
Tức là
N −1 N −1
−M < ∑ ∑ xjik− y <0
i=0 j=0

3. Thuật toán

Sử dụng trình giải ‘SCIP’ với Ortool của ngôn ngữ Python

Trình giải sẽ tìm ra thuật toán tối ưu cho các biến, đặc biệt là biến y cái mà hướng đến hàm mục
tiêu của bài toán

4. Đánh giá

Bài toán ở đây được tôi đưa về dạng binary (0/1), và với dạng bài toán (binary) này thì quy hoạch
nguyên tôi nghĩ không thực sự phù hợp bởi khối lượng biến lớn và hàm mục tiêu không được
xác định rõ ràng. Bên cạnh đó, để thỏa mãn các yêu cầu của bài toán thì khối lượng các ràng
buộc là khá lớn và phức tạp.

You might also like