TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
..
LUẬN VĂN THẠC SĨ KỸ THUẬT
Phát triển thuật tốn tối ưu hóa cho các
bài tốn phân cơng giảng dạy
NGUYỄN TRUNG KIÊN
Ngành Cơng nghệ thơng tin
Giảng viên hướng dẫn:
TS. Phạm Quang Dũng
Viện:
Công nghệ thông tin và truyền thông
HÀ NỘI, 2020
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
LUẬN VĂN THẠC SĨ KỸ THUẬT
Phát triển thuật tốn tối ưu hóa cho các
bài tốn phân cơng giảng dạy
NGUYỄN TRUNG KIÊN
Ngành Cơng nghệ thơng tin
Giảng viên hướng dẫn:
TS. Phạm Quang Dũng
Viện:
Công nghệ thông tin và Truyền thông
Chữ ký của GVHD
HÀ NỘI, 2020
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ
Họ và tên tác giả luận văn : Nguyễn Trung Kiên
Đề tài luận văn: Phát triển thuật toán tối ưu hóa cho các bài tốn phân cơng giảng
dạy
Chun ngành: Công nghệ thông tin
Mã số SV: CA180137
Tác giả, Người hướng dẫn khoa học và Hội đồng chấm luận văn xác nhận
tác giả đã sửa chữa, bổ sung luận văn theo biên bản họp Hội đồng ngày 27/6/2020 với
các nội dung sau:
#
Nội dung chỉnh sửa
Mục lục
Trang
1
Thêm ví dụ phần bài toán tối ưu tổ hợp
1.1
4, 5
2
Bổ sung nội dung chương 2
2.2
23, 24
3
Trình bày làm rõ hơn các ý tưởng thuật toán
3.1, 3.2, 3.3, 3.4,
3.5, 3.6
25-33
4
Bổ sung làm rõ và chỉnh sửa lời chú thích thuật 3.3, 3.4, 3.5
tốn tham lam số 3, số 4, số 5
28-32
5
Mô tả rõ các cột, thông số β trong các bảng kết 4.2
quả
Bổ sung phần nhận xét kết quả thực nghiệm.
35,36, 53, 54
6
Bổ sung thêm phần tài liệu tham khảo
56
7
Chỉnh sửa chỉnh lỗi chính tả
Giáo viên hướng dẫn
Ngày 10 tháng 7 năm 2020
Tác giả luận văn
TS. Phạm Quang Dũng
Nguyễn Trung Kiên
CHỦ TỊCH HỘI ĐỒNG
TS. Vũ Tuyết Trinh
ĐỀ TÀI LUẬN VĂN
Phát triển thuật tốn tối ưu hóa cho các bài tốn phân cơng giảng dạy.
Học viên: Nguyễn Trung Kiên
Người hướng dẫn khoa học: TS. Phạm Quang Dũng
Giáo viên hướng dẫn
Ký và ghi rõ họ tên
Lời cảm ơn
Em xin gửi lời cảm ơn chân thành và sự tri ân sâu sắc đối với các thầy cô
của trường Đại học Bách Khoa Hà Nội, đặc biệt là các thầy cô trong Viện Công
nghệ Thông tin và truyền thông của trường đã tạo điều kiện cho em được học tập
và nghiên cứu chuyên ngành công nghệ thông tin. Và em cũng xin chân thành cảm
ơn thầy TS. Phạm Quang Dũng đã nhiệt tình hướng dẫn, giúp đỡ em hồn thành
khóa luận tốt nghiệp.
Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế của một học
viên, luận văn này khơng thể tránh được những thiếu sót. Em rất mong nhận được
sự chỉ bảo, đóng góp ý kiến của các thầy cơ để em có điều kiện bổ sung, nâng cao
kiến thức của mình, phục vụ tốt hơn trong công việc thực tế.
Em xin chân thành cảm ơn!
Tóm tắt nội dung luận văn
Luận văn được chia thành 4 chương không kể phần mở đầu và kết luận:
Chương 1 trình bày cơ sở lý thuyết về bài tốn tối ưu tổ hợp, phương pháp quy
hoạch tuyến tính, các hướng tiếp cận và thư viện. Chương 2 trình bày về bài tốn
phân cơng giảng dạy, mơ hình tốn học của bài tốn. Chương 3 trình bày về các
thuật tốn để giải quyết bài toán và chiến lược của từng thuật tốn. Chương 4 trình
bày về kết quả thử nghiệm và đánh giá đối với các bộ dữ liệu với kích thước và
đặc điểm khác nhau.
HỌC VIÊN
Ký và ghi rõ họ tên
Nguyễn Trung Kiên
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ
Họ và tên tác giả luận văn : Nguyễn Trung Kiên
Đề tài luận văn: Phát triển thuật toán tối ưu hóa cho các bài tốn phân cơng giảng
dạy
Chun ngành: Công nghệ thông tin
Mã số SV: CA180137
Tác giả, Người hướng dẫn khoa học và Hội đồng chấm luận văn xác nhận
tác giả đã sửa chữa, bổ sung luận văn theo biên bản họp Hội đồng ngày 27/6/2020 với
các nội dung sau:
#
Nội dung chỉnh sửa
Mục lục
Trang
1
Thêm ví dụ phần bài toán tối ưu tổ hợp
1.1
4, 5
2
Bổ sung nội dung chương 2
2.2
23, 24
3
Trình bày làm rõ hơn các ý tưởng thuật toán
3.1, 3.2, 3.3, 3.4,
3.5, 3.6
25-33
4
Bổ sung làm rõ và chỉnh sửa lời chú thích thuật 3.3, 3.4, 3.5
tốn tham lam số 3, số 4, số 5
28-32
5
Mô tả rõ các cột, thông số β trong các bảng kết 4.2
quả
Bổ sung phần nhận xét kết quả thực nghiệm.
35,36, 53, 54
6
Bổ sung thêm phần tài liệu tham khảo
56
7
Chỉnh sửa chỉnh lỗi chính tả
Giáo viên hướng dẫn
Ngày 10 tháng 7 năm 2020
Tác giả luận văn
TS. Phạm Quang Dũng
Nguyễn Trung Kiên
CHỦ TỊCH HỘI ĐỒNG
TS. Vũ Tuyết Trinh
MỤC LỤC
DANH MỤC CÁC CHỮ VIẾT TẮT .................................................................... ii
DANH MỤC CÁC HÌNH VẼ............................................................................... iv
DANH MỤC CÁC GIẢI MÃ ............................................................................... iv
LỜI MỞ ĐẦU ........................................................................................................ 1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT ...................................................................... 2
1.1 Bài toán tối ưu tổ hợp và ứng dụng .............................................................. 2
1.2 Các hướng tiếp cận giải bài toán tối ưu tổ hợp ............................................ 5
1.3. Công nghệ OR-Tools ................................................................................ 13
1.4. Thư viện choco .......................................................................................... 15
CHƯƠNG 2: BÀI TỐN PHÂN CƠNG GIẢNG DẠY .................................... 21
2.1 Mơ tả bài tốn............................................................................................. 21
2.2 Mơ hình tốn học bài tốn phân cơng giảng dạy ....................................... 23
CHƯƠNG 3: PHÁT TRIỂN THUẬT TOÁN GIẢI QUYẾT BÀI TOÁN PHÂN
CƠNG GIẢNG DẠY ........................................................................................... 25
3.1. Thuật tốn 1............................................................................................... 25
3.2. Thuật toán 2............................................................................................... 26
3.3. Thuật toán 3............................................................................................... 28
3.4. Thuật toán 4............................................................................................... 30
3.5. Thuật toán 5............................................................................................... 31
3.6. Thuật toán 6............................................................................................... 33
CHƯƠNG 4: THỬ NGHIỆM VÀ ĐÁNH GIÁ KẾT QUẢ ................................ 35
4.1. Dữ liệu đầu vào ......................................................................................... 35
4.2. Kết quả kiểm thử và đánh giá ................................................................... 36
TÀI LIỆU THAM KHẢO .................................................................................... 56
i
DANH MỤC CÁC CHỮ VIẾT TẮT
Chữ viết tắt
Tên đầy đủ
CBLS
Constraint Based Local Search
LP
Ý nghĩa
Tìm kiếm cục bộ dựa trên
ràng buộc
Linear Programing
Quy hoạch tuyến tính
QHTT
Quy hoạch tuyến tính
Quy hoạch tuyến tính
PATU
Phương án tối ưu
Phương án tối ưu
Solving Constraint Integer
Chương trình giải ràng
Programs
buộc các số nguyên
Constraint Programming
Quy hoạch ràng buộc
SCIP
CP
ii
DANH MỤC CÁC BẢNG
Bảng 4. 1: Bảng mô tả dữ liệu.............................................................................. 36
Bảng 4. 2: Kết quả thử nghiệm với thuật toán 1 .................................................. 39
Bảng 4. 3: Kết quả thử nghiệm với thuật toán 2 .................................................. 42
Bảng 4. 4: Kết quả thử nghiệm với thuật toán 3 .................................................. 44
Bảng 4. 5: Kết quả thử nghiệm với thuật toán 4 .................................................. 47
Bảng 4. 6: Kết quả thử nghiệm với thuật toán 5 .................................................. 50
Bảng 4. 7: Kết quả thử nghiệm với thuật toán 6 .................................................. 51
Bảng 4. 8 So sánh kết quả các thuật toán trên bộ dữ liệu input_20182 ............... 53
iii
DANH MỤC CÁC HÌNH VẼ
Figure 1: Ví dụ về bài toán thỏa mãn ràng buộc.................................................. 16
DANH MỤC CÁC GIẢI MÃ
Giải mã 2. 1: Thuật toán số 1 ............................................................................... 26
Giải mã 2. 2: Thuật toán số 2 ............................................................................... 28
Giải mã 2. 3: Thuật toán số 3 ............................................................................... 29
Giải mã 2. 4: Thuật toán số 4 ............................................................................... 31
Giải mã 2. 5: Thuật toán số 5 ............................................................................... 33
Giải mã 2. 6: Thuật toán số 6 ............................................................................... 34
iv
LỜI MỞ ĐẦU
Trong thực tiễn để đảm bảo công tác giảng dạy tại các cơ sở đào tạo được
hoạt động tốt thì một trong các cơng việc quan trọng cần thực hiện là việc phân
công giảng dạy cho các giáo viên sao cho vừa đảm bảo về yếu tố chuyên môn,
cũng như phù hợp với yêu cầu thực tế của nhà trường.
Trong luận văn này, chúng tôi khảo sát bài tốn phân cơng giảng dạy các
mơn học cho các giáo viên. Trong đó u cầu của bài tốn là đảm bảo số lượng
môn học (số tiết) phân công cho từng giáo viên là xấp xỉ nhau, một số các môn học
phải đảm bảo không phân công cho cùng 1 giáo viên vì một số ngun nhân và
mỗi mơn học chỉ phân cơng cho 1 giáo viên. Sau đó chúng tơi đề xuất 6 thuật toán
để giải quyết bài toán trên: 2 thuật tốn lập trình tuyến tính trên cơng cụ Or-Tools
của google, 3 thuật toán tham lam, 1 thuật toán sử dụng quy hoạch ràng buộc trên
thư viện Choco. Các thuật toán này được cài đặt, thử nghiệm và đánh giá trên các
bộ dữ liệu của viện Công nghệ thông tin và truyền thông Đại học Bách Khoa Hà
Nội và các tổ bộ môn của viện.
Luận văn được chia thành 4 chương không kể phần mở đầu và kết luận:
Chương 1 trình bày cơ sở lý thuyết về bài tốn tối ưu tổ hợp, phương pháp quy
hoạch tuyến tính, các hướng tiếp cận và thư viện. Chương 2 trình bày về bài tốn
phân cơng giảng dạy, mơ hình tốn học của bài tốn. Chương 3 trình bày về các
thuật tốn để giải quyết bài toán và chiến lược của từng thuật tốn. Chương 4 trình
bày về kết quả thử nghiệm và đánh giá đối với các bộ dữ liệu với kích thước và
đặc điểm khác nhau.
1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 Bài toán tối ưu tổ hợp và ứng dụng
Bài toán tối ưu tổ hợp là bài tốn khơng quan tâm đến việc xây dựng tất cả
các cấu hình như bài tốn liệt kê mà chỉ nhằm xây dựng một cấu hình “tốt” nhất
theo một mục tiêu nào đó. Đây là bài tốn có nhiều ứng dụng trong thực tiễn và lý
thuyết tổ hợp đã đóng góp một phần đáng kể trong việc xây dựng những thuật toán
hữu hiệu.Bài toán thường xuất hiện trong các lĩnh vực của đời sống xã hội đặc biệt
là các hoạt động quản lý, lập kế hoạch, phân công công việc, điều hành trong các
tổ chức, doanh nghiệp. Như bài toán lập đường đi tối ưu trong lĩnh vực giao thơng
vận tải [1, 2], bài tốn đóng gói hàng hóa [3], bài toán xếp hàng trong các dây
chuyền sản xuất [4], bài tốn xếp thời khóa biểu trong quản lý đào tạo [5]…
Mục tiêu của các bài toán này là cần tìm ra một lời giải thỏa mãn một tập
các ràng buộc đặt ra, đồng thời tối ưu một hoặc nhiều hàm mục tiêu nào đó.
Một bài tốn tối ưu tổ hợp [6] là một bộ (X,D,C,f) trong đó:
X ={X1,…,Xn} là tập các biến,
D ={D1,…,Dn} trong đó Di là một tập rời rạc thể hiện miền giá trị của Xi.
C ={C1,…,Ck} là tập các ràng buộc được định nghĩa trên các biến,
f là hàm mục tiêu cần tối ưu. Trong nhiều bài tốn, u cầu đặt ra là tìm lời
giải thỏa mãn ràng buộc, vì vậy hàm mục tiêu f khơng được quan tâm.
Bài tốn tối ưu tổ hợp có nhiều ứng dụng trong thực tế, đã và đang thu hút
được đầu tư nghiên cứu nhằm giải quyết các vấn đề trong điều hành, sản xuất để
tăng sản lượng lao động, tiết kiệm chi phí nguyên liệu và thời gian.
Ví dụ về bài toán N-Queen: yêu cầu xếp n con hậu lên một bàn cờ vua
kích thước nxn sao cho khơng có hai con hậu bất kì nào nằm trong các nước mà
có thể khống chế nhau. Khả năng khống chế của mỗi con hậu theo luật cờ vua bao
gồm:
Khống chế những ô cùng hàng hoặc cùng cột.
Khống chế những ô thuộc cùng đường chéo.
Bài toán N-Queen thuộc vào lớp bài tốn tối ưu tổ hợp, có thể được mơ tả bằng
mơ hình tốn học:
Tập n biến quyết định X = {X1,X2,…,Xn}: Biến Xi biểu thị hàng cho con hậu
đứng ở cột i.
2
Miền giá trị D = {D1,D2,…,Dn} trong đó Di= {1…n} Mỗi biến Xi có miền
từ 1 đến n.
Tập ràng buộc:
Xi ≠ Xj với i ≠ j: Các con hậu không ở cùng 1 hàng.
Xi+i ≠ Xj+j với i ≠ j: Các con hậu không khống chế theo đường chéo.
Xi-i ≠ Xj-j với i ≠ j: Các con hậu không khống chế theo đường chéo.
Q trình giải bài tốn theo hướng tìm kiếm cục bộ dựa trên ràng buộc gồm hai
bước chính dựa theo kiến trúc CBLS [7]:
Mơ hình hóa bài toán
Định nghĩa các biến quyết định.
Xây dựng ràng buộc và hàm mục tiêu.
Tìm kiếm
Khởi tạo lời giải ban đầu.
Thực hiện lặp: Di chuyển qua các lời giải lân cận.
Phân tích bài tốn N-Queen với n = 8 theo mơ hình CBLS. Q trình mơ hình hóa
bài tốn dựa theo mơ hình tốn học đã trình bày ở trên:
Tập biến: Mảng X[i], trong đó X[i] là hàng của con hậu trên cột i.
Miền giá trị X[i], D[i] = [0...7].
Tập ràng buộc:
Xi ≠ Xj với i ≠ j
Xi+i ≠ Xj+j với i ≠ j
Xi-i ≠ Xj-j với i ≠ j
Một lời giải là một cách gán giá trị {X1 = x1, X2 = x2,…, X7 = x7} thỏa mãn
tất cả các ràng buộc.
Tập lời giải lân cận của một lời giải S = {x1,x2,…x7} gồm mọi lời giải S’ =
{y1, y2,…y7} sao cho:
xi ≠ yi với một giá trị i duy nhất.
xj = yj với mọi j ≠ i.
Chỉ có duy nhất một loại bước di chuyển là gán lại giá trị một phần tử Xi trong tập
biến. Lời giải được khởi tạo ngẫu nhiên. Tìm kiếm dừng lại khi khơng cịn vi phạm.
Lời giải tiếp theo được lựa chọn ra trong các lời giải lân cận hiện tại theo
cách tham lam:
3
Chọn con hậu ở cột i đang bị khống chế nhiều nhất.
Gán lại giá trị Xi thành giá trị làm giảm vi phạm nhiều nhất.
Ví dụ về bài tốn lập lịch gia cơng trên 2 máy:
Phát biểu bài tốn: “Có n chi tiết (đánh số từ 1 đến n) cần được lần lượt gia
công trên hai máy, đầu tiên qua máy A, sau đó mới đến máy B. Giả thiết biết thời
gian gia công chi tiết i tương ứng trên hai máy A, B là ai và bi (i = 1, 2, ..., n). Hãy
tìm một lịch gia cơng (thứ tự gia cơng) để thời điểm hồn thành tất cả các chi tiết
là sớm nhất”.
Nội dung của bài tốn mơ tả một yêu cầu thường thấy trong thi công: một
công trình gồm nhiều hạng mục, mỗi hạng mục phải qua nhiều công đoạn với thứ
tự thực hiện các công đoạn là xác định (chẳng hạn đào móng xong mới được xây
tường, xây tường xong mới được lắp cửa, ...). Cần bố trí thứ tự thực hiện các hạng
mục này để thời gian các nhóm thợ (mỗi nhóm thợ thực hiện một cơng đoạn) phải
chờ đợi nhau là ít nhất.
Bài tốn đã nêu xét trường hợp đơn giản nhất gồm hai công đoạn: máy A
tượng trưng cho giai đoạn gia công thô, máy B tượng trưng cho giai đoạn gia công
tinh. Mọi chi tiết phải qua giai đoạn gia công thô (máy A) rồi mới đến giai đoạn gia
công tinh (máy B).
Chú ý:
Khơng có một giả thiết ràng buộc nào giữa các thời gian ai và bi, chúng có
thể bằng, lớn hơn hay nhỏ hơn nhau tại bất cứ chi tiết i nào.
Một lịch gia công các chi tiết được biểu diễn như một hoán vị X = (x1, x2,
..., xn) của tập {1, 2, ..., n}. Giá trị hàm mục tiêu T(X) của lịch X là thời điểm
hoàn thành tất cả các chi tiết theo lịch này, nghĩa là thời điểm máy B hoàn thành
chi tiết cuối cùng theo lịch X (khơng mất tính tổng qt, ta có thể xem thời điểm
bắt đầu làm việc, nghĩa là Gọi TA(i) là thời điểm máy A hoàn thành chi tiết xi của
lịch X. Vì máy A khơng phụ thuộc máy B nên thời điểm máy A bắt đầu chi tiết
xi là thời điểm nó hồn thành chi tiết xi − 1, từ đó nhận được cơng thức truy hồi
tính các TA(i) là:
(1) TA(i) = TA(i−1) + ai , i = 1, 2, ..., n với giá trị ban đầu TA(0) = 0
Gọi TB(i) là thời điểm máy B hoàn thành chi tiết xi của lịch X. Vì máy B chỉ có
thể bắt đầu chi tiết xi nếu nó đã xong chi tiết xi−1, đồng thời máy A phải xong chi
4
tiết xi, nghĩa là tại thời điểm muộn nhất của hai thời điểm này. Từ đó nhận được
cơng thức truy hồi tính các TB(i) là:
(2) TB(i) = max{TB(i−1), TA(i)} + bi , i = 1, 2, ..., n với giá trị ban đầu TB(0) = 0
Thời điểm máy B hoàn thành chi tiết cuối cùng TB(n) của lịch X là thời điểm
T(X) hồn thành lịch này.
Giá trị T(X) được tính qua các giá trị trung gian TA(i), TB(i) bằng một vịng lặp
đơn giản mà ta có thể dễ dàng xây dựng một hàm để tính nó.
Như vậy, dưới dạng tốn học, bài tốn tìm lịch gia cơng trên hai máy có thể phát
biểu như sau:
Tìm X ∈ D : T(X) → min trong đó D là tập các hốn vị của {1, 2, ..., n} và T(X)
được xác định theo các cơng thức truy hồi vừa trình bày.
1.2 Các hướng tiếp cận giải bài toán tối ưu tổ hợp
Các hướng tiếp cận để giải bài toán tối ưu tổ hợp được chia thành 2 loại:
hướng tiếp cận giải đúng và hướng tiếp cận giải gần đúng. Hướng tiếp cận giải
đúng đảm bảo luôn cho lời giải tối ưu nhất, tuy nhiên với các bộ dữ liệu lớn thì
thời gian tính toán là rất lớn. Hướng tiếp cận giải gần đúng trong đó có tìm kiếm
cục bộ để giải các bài tốn tối ưu tổ hợp kích thước lớn đang được quan tâm nghiên
cứu phát triển vì nó có khả năng tìm ra lời giải chất lượng tốt trong nhiều bài tốn
kích thước lớn với thời gian giải quyết bài tốn phù hợp với thực tế.
1.2.1 Hướng tiếp cận giải đúng
Hướng tiếp cận giải đúng bao gồm các kỹ thuật cho phép tìm ra lời giải tối
ưu hoặc chỉ ra lời giải thỏa mãn ràng buộc khơng tồn tại vì nó duyệt hết các khả
năng trong không gian lời giải. Phương pháp này bao gồm các thuật tốn điển hình
như thuật toán nhánh cận hoặc quy hoạnh động, quy hoạch ràng buộc (CP), hay
quy hoạch tuyến tính (LP).
Quy hoạch tuyến tính:
Trong tốn học, quy hoạch tuyến tính (QHTT) (tiếng Anh: linear
programming - LP) là bài tốn tối ưu hóa, trong đó hàm mục tiêu (objective
function) và các điều kiện ràng buộc đều là tuyến tính.
Trong bài tốn này, cho một đa tạp (polytope) (chẳng hạn một đa giác hoặc
một đa diện), và một hàm tuyến tính (affine) nhận giá trị thực xác định trên đa tạp
đó, mục đích là tìm một điểm trên đa tạp tại đó hàm có giá trị nhỏ nhất (hoặc lớn
5
nhất). Các điểm như vậy có thể khơng tồn tại, nhưng nếu chúng tồn tại phải tìm
được ít nhất một điểm.
Ví dụ một số bài tốn sử dụng quy hoạch tuyến tính:
Ví dụ 1. Một xí nghiệp cần sản xuất 3 loại bánh: bánh đậu xanh, bánh thập cẩm
và bánh dẻo. Lượng nguyên liệu đường, đậu cho một bánh mỗi loại, lượng dự trữ
nguyên liệu, tiền lãi cho một bánh mỗi loại được cho trong bảng sau:
Nguyên
Bánh đậu
Bánh thập
Bánh
Lượng dự
liệu
xanh
cẩm
dẻo
trữ
Đường
0,04kg
0,06kg
0,05kg
500kg
Đậu
0,07kg
0kg
0,02kg
300kg
Lãi
3000
2000
2500
Hãy lập
mơ
hình bài tốn tìm số lượng mỗi loại bánh cần sản xuất sao cho không bị động về
nguyên liệu mà lãi đạt được cao nhất.
Giải
Gọi x1, x2 , x3 lần lượt là số bánh đậu xanh, bánh thập cẩm, bánh dẻo cần phải
sản xuất. Điều kiện:x j ≥ 0 , j = 1, 2,3 . Khi đó
1) Tiền lãi thu được là:f (x) =f (x1 , x2 , x3 ) = 3x1 + 2x2 + 2,5x3 (ngàn).
2) Lượng đường được sử dụng là: 0, 04x1 + 0, 06x2 + 0, 05x3(kg)
Để khơng bị động về ngun liệu thì: 0, 04x1 + 0, 06x1 + 0, 05x1 ≤ 500 .
3) Lượng đậu được sử dụng là: 0, 07x1 + 0, 02x3 (kg)
Để khơng bị động về ngun liệu thì: 0, 07x1 + 0, 02x3 ≤ 300 . Vậy ta có mơ
hình bài toán
(1) f (x) =f (x1 , x2 , x3 ) = 3x1 + 2x2 + 2,5x3 → max
(2) 0,04x1 + 0,06x1 + 0,05x1 ≤ 500
0,07x1 + 0, 02x3 ≤ 300
(3)x j ≥ 0 ,j = 1, 2,3 .
Ta nói đây là bài tốn quy hoạch tuyến tính 3 ẩn tìm max của hàm mục tiêu.
6
Ví dụ 2. Giả sử yêu cầu tối thiểu mỗi ngày về các chất dinh dưỡng đạm, đường,
khoáng cho một loại gia súc tương ứng là 90g, 130g, 10g. Cho biết hàm lượng các
chất dinh dưỡng trên có trong 1g thức ăn A, B, C và giá mua 1kg thức ăn mỗi loại
được cho trong bảng sau:
Chất dinh dưỡng
A
B
C
Đạm
0,1g
0,2g
0,3g
Đường
0,3g
0,4g
0,2g
Khoáng
0,02g
0,01g
0,03g
Giá mua
3000
4000
5000
Hãy lập mơ hình tốn học của bài tốn xác định khối lượng thức ăn mỗi
loại phải mua để tổng số tiền chi cho mua thức ăn ít nhất nhưng đáp ứng được
nhu cầu dinh dưỡng mỗi ngày.
Giải:
Gọi x1, x2 , x3 lần lượt là khối lượng (g) thức ăn A, B, C cần mua.
Điều kiện: x j ≥ 0 , j = 1, 2,3 . Khi đó
Tổng khối lượng các chất dinh dưỡng có trong thức ăn cần mua là
Đạm: 0,1x1 + 0, 2x2 + ,3x3(g)
Đường: 0,3x1 + 0, 4x2 + 0, 2x3 (g)
Khoáng: 0, 02x1 + 0, 01x2 + 0, 03x3 (g)
Để đáp ứng được nhu cầu dinh dưỡng tối thiểu mỗi ngày thì tổng khối lượng các
chất dinh dưỡng có trong thức ăn cần mua khơng thể nhỏ hơn các nhu cầu tối thiểu
mỗi ngày về các chất dinh dưỡng đó nên ta có các điều kiện:
0,1x1 + 0, 2x2 + 0,3x3 ≥ 90
0,3x1 + 0, 4x2 + 0, 2x3 ≥ 130
0, 02x1 + 0, 01x2 + 0, 03x3 ≥ 10
Tổng số tiền phải chi để mua số thức ăn trên là 3x1 + 4x2 + 5x3 (đồng)
Yêu cầu bài toán là số tiền chi cho mua thức ăn ít nhất nên ta có điều kiện 3x1 +
4x2 + 5x3 → min
Vậy ta có mơ hình bài tốn
(1) f (x) = f (x1, x2 , x3 ) = 3x1 + 4x2 + 5x3 → min
7
(2) 0,1x1 + 0, 2x2 + 0,3x3 ≥ 90
0,3x1 + 0, 4x2 + 0, 2x3 ≥ 130
0, 02x1 + 0, 01x2 + 0, 03x3 ≥ 10
(3) x j ≥ 0 , j = 1, 2,3.
Phân loại dạng bài toán quy hoạch tuyến tính:
- Dạng tổng qt của bài tốn quy hoạch tuyến tính
Bài tốn QHTT dạng tổng qt với n ẩn là bài tốn có dạng
Trong đó
(1) là hàm mục tiêu.
(2) là hệ ràng buộc chính.
(3) là ràng buộc dấu.
(2) và (3) được gọi chung là hệ ràng buộc của bài tốn.
Khi đó
Mỗi vector x (x1, x2 ,…, xn ) thõa (2) và (3) được gọi là một phương án
(PA) của bài toán.
Mỗi phương án x thỏa (1), nghĩa là tại đó hàm mục tiêu đạt giá tị nhỏ nhất
(lớn nhất) trên tập các phương án được gọi là một phương án tối ưu (PATU) của
bài toán.
Giải một bài toán QHTT là đi tìm một phương án tối ưu của nó hoặc chỉ ra
rằng bài tốn vơ nghiệm, nghĩa là bài tốn khơng có PATU.
- Dạng chính tắc của bài tốn quy hoạch tuyến tính
(1) f (x) = c1x1 + c2 x2 +… + cn xn → max(min)
(2) ai1x1 + ai 2 x2 +…+ ain xn = bi ,i = 1, 2,…, m
(3) x j ≥ 0, j = 1, 2,…, n
8
Nhận xét. Bài tốn QHTT dạng chính tắc là bài tốn QHTT dạng tổng qt trong
đó
• Các ràng buộc chính đều là phương trình.
• Các ẩn đều khơng âm.
- Dạng chuẩn của bài tốn quy hoạch tuyến tính
Bài tốn QHTT dạng chuẩn là bài tốn QHTT dạng chính tắc
(1) f (x) = c1x1 + c2 x2 +… + cn xn → max(min)
(2) ai1x1 + ai 2 x2 +…+ ain xn = bi ,i = 1, 2,…, m
(3) x j ≥ 0, j = 1, 2,…, n
Trong đó
• Các hệ số tự do đều khơng âm.
• Trong ma trận hệ số tự do có đủ m vector cột đơn vị: e1 , e2 ,…, em .
Khi đó:
• Các ẩn ứng với các vector cột đơn vị được gọi là các ẩn cơ bản. Cụ thể
ẩn ứng với vector cột đơn vị ek là ẩn cơ bản thứ k.
• Một phương án mà các ẩn cơ bản đều bằng 0 được gọi là phương án cơ
bản.
• Một phương án cơ bản có đủ m thành phần dương được gọi là không suy
biến. Ngược lại một phương án cơ bản có ít hơn m thành phần dương
được gọi là suy biến.
Ta có thể chuyển đồi Bài tốn quy hoạch tuyến tính từ dang tổng quát về dạng
chính tắc và từ dạng chính tắc về dạng chuẩn.
Phương pháp đơn hình giải bài tốn quy hoạch tuyến tính dạng chuẩn
Thuật tốn giải bài tốn max
Bước lặp thứ nhất (bảng đơn hình thứ nhất)
1) Lập bảng đơn hình xuất phát
Vẽ bảng đơn hình và ghi vào đó các thành phần sau của bài tốn dạng chuẩn
9
• Dịng 1. Ghi các ẩn của bài tốn (kể cả ẩn phụ)
• Dịng 2. Ghi các hệ số của các ẩn trong hàm mục tiêu
• Cột 2. Ghi các ẩn cơ bản của bài toán theo thứ tự từ ẩn cơ bản thứ nhất
đến ẩn cơ bản cuối cùng, ta gọi cột này là cột ẩn cơ bản.
• Cột 1: Ghi tương ứng các hệ số của các ẩn cơ bản trong hàm mục tiêu,
ta gọi cột này là cột hệ số cơ bản.
• Cột 3. Ghi các số hạng tự do của hệ ràng buộc chính theo thứ tự từ trên
xuống dưới, ta gọi cột này là cột phương án.
• Cột 4. Ghi ma trận điều kiện A của bài tốn.
Tính hệ số ước lượng ∆ j của các ẩn x j ( j = 1, 2,…, n) và ghi tương ứng vào dòng
dưới cột 4, với ∆ j được tính theo cơng thức sau:
∆ j = (cot1) × ( Aj ) − (hsxj ) ( hsxj : hệ số của ẩn xj trong hàm mục tiêu).
Chú ý. Nếu xj là ẩn cơ bản thì ∆ j = 0 .
Tính trị số f0 = (cot1) × (cot 3) và ghi dưới cột 3.
2) Xác định phương án cơ bản xuất phát
Với bảng đơn hình vừa lập được thì phương án cơ bản xuất phát x0 của bài
toán được xác định như sau: Cho các ẩn ở cột 2 nhận giá trị tương ứng ở cột
3, các ẩn còn lại nhận giá trị 0. Trị số của hàm mục tiêu tại phương án cơ bản
xuất phát x0 là f (x 0 ) =f0 .
3) Đánh giá tính tối ưu của phương án cơ bản xuất phát
Dấu hiệu tối ưu. Nếu hệ số ước lượng của các ẩn đều không âm,∆ j ≥
0,∀j thì phương án cơ bản xuất phát x0 là phương án tối ưu của bài toán. Thuật
toán kết thúc với kết luận: Bài tốn có PATU là x0 và GTTU là f (x0 ).
Dấu hiệu của bài tốn khơng có PATU. Nếu có ẩn khơng cơ bản xk có hệ
số ước lượng âm và cột điều kiện Ak của ẩn đó có các thành phần đều khơng
dương,∆k < 0 và aik ≤ 0;∀i thì bài tốn khơng có phương án tối ưu. Thuật tốn kết
thúc với kết luận:
Bài tốn khơng có PATU.
Nếu khơng xảy ra cả hai trường hợp trên thì thuật tốn tiếp tục trong bước
lặp thứ hai
10
Bước lặp thứ hai (Bảng đơn hình thứ hai)
1) Tìm ẩn đưa vào
Trong tất cả các ∆ j < 0 ta chọn ∆v < 0 nhỏ nhất (ta đánh dấu * cho ∆v < 0 nhỏ
nhất trong bảng). Khi đó, xv là ẩn mà ta sẽ đưa vào hệ ẩn cơ bản. Cột Av được
gọi là cột chủ yếu.
2) Tìm ẩn đưa ra
Thực hiện phép chia lần lượt các số của cột phương án cho các số dương
của cột chủ yếu và ghi các thương số λi đó vào cột cuối cùng.
Xác định λr = min{λi} (Ta đánh dấu * cho λr nhỏ nhất trong bảng). Khi đó
xr là ẩn mà ta đưa ra khỏi hệ ẩn cơ bản. Dòng có chứa xr được gọi là dịng chủ yếu.
Số dương nằm trên dòng chủ yếu và cột chủ yếu được gọi là hệ số chủ yếu.
Chú ý. Nếu cột chủ yếu chỉ có một số dương thì số dương đó là hệ số chủ
yếu, dịng có số dương đó là dòng chủ yếu, ẩn nằm trên dòng chủ yếu là ẩn được
đưa ra.
3) Lập bảng đơn hình thứ hai
Cột 2: Thay ẩn đưa ra bằng ẩn đưa vào, các ẩn cơ bản cịn lại giữ ngun.
Dịng có ẩn đưa vào gọi là dòng chuẩn.
Cột 1: Thay hệ số của ẩn đưa ra bằng hệ số của ẩn đưa vào, các hệ số của
các ẩn cơ bản còn lại giữ nguyên.
Các thành phần còn lại được xác định theo dòng như sau
Dòng chuẩn = Dòng chủ yếu chia cho hệ số chủ yếu.
Dòng thứ i = Dòng thứ i (cũ) – aiv.dòng chuẩn. (aiv: số nằm trên giao của
dòng i và cột chủ yếu).
Các hệ số ước lượng và trị số của hàm mục tiêu trong bảng thứ hai được
tính và ghi như bảng thứ nhất.
4) Xác định và đánh giá phương án cơ bản thứ hai (như bước lặp thứ nhất)
Thuật toán giải bài toán min
Giải tương tự bài toán max với chú ý sau
i. Điều kiện tối ưu: ∆ j ≤ 0,∀j
ii. Điều kiện khơng có PATU: ∃∆k > 0 và aik ≤ 0,∀i
iii. Ẩn được chọn đưa vào: Ẩn ứng với ∆k > 0 lớn nhất.
11
1.2.2 Hướng tiếp cận giải gần đúng
Như đã nói trong mục trên, hầu hết các bài tốn thực tế có mơ hình tối ưu
tổ hợp, được giải bằng cách duyệt, dù có đưa đánh giá nhánh cận vào cũng chỉ
giảm được thời gian tìm kiếm đến một giới hạn nhất định, trong khi trên thực tế,
thời gian chờ đợi kết quả thường bị khống chế, nếu vượt khoảng thời gian này, kết
quả dù có tốt cũng khơng cịn ý nghĩa gì (chẳng hạn những bài tốn về dự báo).
Đấy là chưa kể việc tìm được một đánh giá nhánh cận thỏa mãn cả hai tiêu chí (vừa
sát, vừa đơn giản) là một điều khơng dễ dàng. Vì thế, bên cạnh những phương pháp
cho lời giải đúng, người ta còn quan tâm đến những cách giải gần đúng, trong đó
nghiệm được tìm là tương đối tốt, có thể chấp nhận được, nhưng thời gian tìm kiếm
phải nhanh. Một trong những giải pháp để đạt được ý tưởng này là tìm cách tối ưu
cục bộ thay cho tối ưu toàn cục. Các bài tốn tối ưu cục bộ, do kích thước nhỏ, có
thể giải bằng cách duyệt để được các phương án tối ưu cục bộ. Phương án thu được
là sự kết hợp các phương án tối ưu cục bộ đã tìm. Nói chung phương án này khơng
phải là tối ưu, nhưng trong một số tình huống nó có thể chấp nhận được. Các
phương pháp này có tên gọi chung là các phương pháp tham lam (greedy).
Nội dung của “tham lam” rất đa dạng, nó phụ thuộc vào việc tổ chức các
bài toán cục bộ, hàm mục tiêu của những bài toán này, và sự kết hợp các lời giải
cục bộ để được lời giải cần tìm. Một giải pháp tham lam được đánh giá là tốt, nếu
phần lớn các tình huống thực tế, nó cho một lời giải sát với phương án tối ưu mà
thời gian tìm kiếm vẫn nằm trong phạm vi cho phép. Vì thế, bên cạnh việc nghiên
cứu kỹ mục tiêu bài tốn, người ta cịn để ý khai thác những đặc điểm của những
dữ liệu mà thực tế cung cấp, nhờ những đặc điểm này, nhiều khi tìm được những
cách tham lam cho hiệu quả cao, phù hợp với những dữ liệu thực tế mà không nhất
thiết phù hợp trong những trường hợp tổng quát.
Tìm kiếm cục bộ (Local Search) là phương pháp tìm lời giải tốt hơn từ
những lời giải là láng giềng của lời giải hiện tại bằng cách áp dụng các phép biến
đổi cục bộ để sinh ra lời giải láng giềng từ lời giải hiện tại.
Để tránh vấn đề tối ưu cục bộ của Local search có thể áp dụng các phương
pháp Meta-Heuristic được trình bày sau đây:
-
Giải thuật di truyền [6] dựa trên các nguyên lý của tiến hóa như đột biến,
chọn lọc. Ý tưởng ban đầu là khởi tạo một quần thể các lời giải. Các cặp cá thể
12
trong quần thể sẽ giao ghép với nhau để tạo ra cá thể mới có đặc tính như cặp cá
thể sinh ra nó. Hoặc từ một cá thể đột biến cho ra cá thể khác bằng cách thay đổi
một số đặc tính của cá thể ban đầu. Cho đến nay, đã có rất nhiều phương thức được
đề xuất cho quá trình ghép gặp và đột biến áp dụng cho bài tốn tối ưu, trong đó
có đề xuất khác thành cơng như [7], [8], [9].
1.3. Công nghệ OR-Tools
OR-Tools là phần mềm nguồn mở để giải quyết các bài toán tối ưu hóa tổ
hợp, nhằm tìm kiếm giải pháp tốt nhất cho một vấn đề trong số rất nhiều giải pháp
khả thi [10].
Một số bài toán mà OR-Tools hỗ trợ như:
- Định tuyến phương tiện: Tìm các tuyến tối ưu cho các đội xe nhận và giao
các gói hàng bị ràng buộc (ví dụ: "xe tải này khơng thể chứa hơn 20.000 kg" hoặc
"tất cả việc giao hàng phải được thực hiện trong một cửa sổ hai giờ").
- Lập lịch: Tìm lịch trình tối ưu cho một nhóm tác vụ phức tạp, một số
nhiệm vụ cần được thực hiện trước các tác vụ khác, trên một bộ máy cố định hoặc
các tài nguyên khác.
- Đóng gói thùng: Đóng gói càng nhiều loại hàng có kích thước khác nhau
càng tốt vào một số thùng cố định với dung lượng tối đa.
Trong hầu hết các trường hợp, các bài tốn như thế này có vô số giải pháp
khả thi, quá nhiều cho một máy tính để tìm kiếm tất cả. Để khắc phục vấn đề này,
OR-Tools sử dụng các thuật toán tiên tiến để thu hẹp bộ tìm kiếm, nhằm tìm ra giải
pháp tối ưu (hoặc gần với tối ưu).
OR-Tools hỗ trợ một số vấn đề sau:
- Lập trình các bài tốn có các ràng buộc: Một tập hợp các kỹ thuật để tìm
giải pháp khả thi cho một vấn đề được thể hiện dưới dạng các ràng buộc (ví dụ:
một phịng khơng thể được sử dụng cho hai sự kiện đồng thời hoặc khoảng cách
đến các cây trồng phải nhỏ hơn chiều dài của vịi hoặc khơng q năm Chương
trình truyền hình có thể được ghi lại cùng một lúc).
- Lập trình các bài tốn sử dụng quy hoạch tuyến tính: Trình tối ưu hóa
tuyến tính Glop của OR-Tools tìm giá trị tối ưu của hàm mục tiêu tuyến tính, được
đưa ra một tập hợp các bất đẳng thức tuyến tính dưới dạng các ràng buộc (ví dụ:
gán người cho cơng việc hoặc tìm phân bổ tốt nhất cho một bộ tài nguyên trong
13
khi giảm thiểu chi phí). Glop và phần mềm lập trình hỗn hợp SCIP cũng có sẵn
thơng qua cả Google Sheets và Google Apps Script .
- Lập trình các bài toán định tuyến xe: Một thư viện chuyên ngành để xác
định các tuyến xe tốt nhất dựa vào các ràng buộc cho trước.
- Lập trình các bài tốn đồ thị: hỗ trợ tìm các đường dẫn ngắn nhất trong
biểu đồ, luồng chi phí tối thiểu, luồng tối đa và phép gán tổng tuyến tính.
Tối ưu hóa tuyến tính hay lập trình tuyến tính trên OR-Tools:
Tối ưu hóa tuyến tính (hay lập trình tuyến tính ) là tên được đặt để tính tốn
giải pháp tốt nhất cho một vấn đề được mơ hình hóa như một tập hợp các mối quan
hệ tuyến tính. Những vấn đề này phát sinh trong nhiều ngành khoa học và kỹ
thuật. (Từ "lập trình" là một từ sai, tương tự như cách "máy tính" từng có nghĩa là
"một người tính tốn." Ở đây, "lập trình" chỉ sự sắp xếp của một kế hoạch, thay vì
lập trình bằng ngơn ngữ máy tính.)
Google cung cấp hai cách để giải quyết các vấn đề tối ưu hóa tuyến tính:
thư viện nguồn mở Glop và Dịch vụ tối ưu hóa tuyến tính trong Tập lệnh Google
Apps.
- Glop là bộ giải tuyến tính của Google, có sẵn dưới dạng nguồn
mở . Chúng ta có thể truy cập Glop thơng qua trình đóng gói bộ giải tuyến tính ORTools, đây là trình đóng gói cho Glop, cũng như một số bộ giải tối ưu hóa tuyến
tính của bên thứ ba khác. Để tìm hiểu cách giải quyết vấn đề tuyến tính đơn giản
bằng Glop trong tất cả các ngôn ngữ được hỗ trợ, hãy xem Bắt đầu với OR-Tools .
- Các Tối ưu hóa dịch vụ tuyến tính trong Google Apps Script cho phép các
nhà phát triển thực hiện cuộc gọi chức năng để giải quyết bài tốn tối ưu tuyến
tính. Nó dựa vào Glop cho các vấn đề tối ưu hóa tuyến tính thuần túy trong đó tất
cả các biến có thể đảm nhận các giá trị thực. Nếu bất kỳ biến nào bị ràng buộc là
số nguyên, dịch vụ sẽ sử dụng SCIP , từ Zuse-Institut Berlin.
Một ví dụ đơn giản về việc sử dụng OR-Tools trong lập trình tuyến tính:
Tìm giá trị lớn nhất của 3x + 4y theo các điều kiện sau:
x+2y ≤
14
3x - y
≥
0
x-y
≤
2
Đầu tiên khởi tạo biến:
14
MPVariable x = solver.makeNumVar(0.0, infinity, "x");
MPVariable y = solver.makeNumVar(0.0, infinity, "y");
Định nghĩa các điều kiện:
// x + 2*y <= 14.
MPConstraint c0 = solver.makeConstraint(-infinity, 14.0, "c0");
c0.setCoefficient(x, 1);
c0.setCoefficient(y, 2);
// 3*x - y >= 0.
MPConstraint c1 = solver.makeConstraint(0.0, infinity, "c1");
c1.setCoefficient(x, 3);
c1.setCoefficient(y, -1);
// x - y <= 2.
MPConstraint c2 = solver.makeConstraint(-infinity, 2.0, "c2");
c2.setCoefficient(x, 1);
c2.setCoefficient(y, -1);
Định nghĩa và xác định hàm mục tiêu:
// Maximize 3 * x + 4 * y.
MPObjective objective = solver.objective();
objective.setCoefficient(x, 3);
objective.setCoefficient(y, 4);
objective.setMaximization();
Sau đó ta sẽ thu được kết quả lời giải của bài toán:
Giá trị biến x= 6
Giá trị biến y=4
Giá trị lớn nhất là: 34.
1.4. Thư viện choco
Quy hoạch ràng buộc:
Quy hoạch ràng buộc (CP-Constraint Programming) là một hướng tiếp cận
rất tốt để giải quyết các bài toán tối ưu tổ hợp. CP được ứng dụng trong việc giải
nhiều bài toán tối ưu kinh điển như lập lịch (Scheduling), lập thời khóa biểu
(TimeTabling), lập tuyến điều hành xe (Routing), phân công ca trực…
15