GIỚI THIỆU
Mục tiêu nghiên cứu
Trong những năm gần đây, Đại học Bách Khoa Tp HCM và nhiều trường đại học khác trong thành phố đã gia tăng số lượng khoa và sinh viên Việc sắp xếp thời khóa biểu trở nên phức tạp nếu thực hiện thủ công, do đó cần một chương trình tự động hỗ trợ Nhiều nghiên cứu từ học viên và sinh viên trước đây đã đề xuất các phương pháp khác nhau, nhưng hầu hết đều áp dụng kỹ thuật lập trình ràng buộc và tìm kiếm cục bộ, dẫn đến kết quả tốt nhưng chưa tối ưu.
Mục tiêu của luận văn này là nghiên cứu áp dụng phương pháp Column Generation để giải quyết bài toán sắp xếp thời khóa biểu Phương pháp này nổi bật với khả năng tìm ra nghiệm tối ưu cho các bài toán tối ưu tổ hợp lớn Luận văn cũng tập trung vào việc phát triển mô hình quy hoạch nguyên phù hợp với các ràng buộc mềm đặc thù của trường Đại học Bách Khoa Tp HCM, đồng thời có thể mở rộng ứng dụng sang các cơ sở đào tạo khác nếu có cách mô hình hóa phù hợp.
Nhiệm vụ của luận văn
Bài toán sắp xếp thời khóa biểu môn học có những đặc điểm riêng biệt tùy thuộc vào từng trường đại học và cao đẳng Nghiên cứu này tập trung vào các đặc trưng cụ thể của việc sắp xếp thời khóa biểu tại trường Đại học Bách Khoa Tp HCM.
1.2.1 Mục đích của chương trình sắp xếp thời khóa biểu môn học
Chương trình sắp xếp thời khóa biểu môn học có trách nhiệm tổ chức thời khóa biểu cho tất cả các lớp học trong một học kỳ, đảm bảo đáp ứng đầy đủ các ràng buộc cứng và tối ưu hóa các ràng buộc mềm.
1.2.2 Các quy tắc học vụ
Lớp cứng (stable class) là nhóm sinh viên được ghép cố định khi vào trường, với giả định rằng trong một học kỳ, tất cả sinh viên thuộc lớp cứng sẽ học chung các môn học mà họ đã đăng ký.
Trong mỗi học kỳ, một môn học có thể được chia thành nhiều lớp khác nhau Mỗi lớp môn học được hình thành từ sự kết hợp của một hoặc nhiều lớp cứng, nhằm đảm bảo đủ số lượng sinh viên cần thiết để khai giảng lớp học.
Mỗi lớp môn học trong một tuần có thể tổ chức một hoặc nhiều cụm tiết học Mỗi cụm tiết học này được gọi là phân tiết, thể hiện cách thức tổ chức thời gian học cho từng môn học cụ thể.
Mỗi lớp môn học được tổ chức trong một phòng học cụ thể tại một thời điểm nhất định, với mỗi phòng học có sức chứa và loại hình riêng biệt.
Trước khi bắt đầu học kỳ mới, Phòng Đào tạo sẽ sử dụng thông tin về chương trình đào tạo và lớp sinh viên để lập danh sách các lớp môn học dự kiến Mỗi lớp môn học có thể có nhiều phân tiết trong tuần, và thông tin về các phòng học cũng được thu thập để hỗ trợ việc xếp thời khóa biểu.
Các phân ti ết là đơn v ị được xếp thời khoá biểu : phân tiết được diễnra vào tiết nào của một ngày trong tuần, và tại phòng nào.
Th ời khoá biểu cho một lớp cứng , hay cho một sinh viên sẽ được trích ra dựa vào thời khoá biểu đã xếp cho các phân tiết.
1.2.3 Các yêu cầu đặt ra
Chương trình sắp xếp thời khóa biểu môn học cần đảm bảo đáp ứng các yêu cầu quan trọng, bao gồm việc thỏa mãn các ràng buộc cứng và tối ưu hóa các ràng buộc mềm để đạt được hiệu quả tối ưu trong việc quản lý thời gian học tập.
Ràng buộc cứng về xếp thời gian cho phân tiết
Các phân tiết xung đột nhau không đ ược diễn ra trong các cụm tiết có phần “phủ lấp” nhau.
Các phân tiết cần được giảng dạy đầy đủ trong một buổi học vào một ngày trong tuần Không nên chia nhỏ một phân tiết thành các tiết học ở cuối buổi sáng và đầu buổi chiều, hoặc giữa ngày này và ngày khác.
Một số phân tiết được quy định tránh không đ ược xếp vào một số tiết học cụ thể nào đó.
Ràng buộc mềm về xếp thời gian cho phân tiết
Thời khoá biểu của một sinh viên (hay một lớp cứng) nên hạn chế các ngày học cả hai buổi sáng và chiều.
Trong thời khoá biểu của sinh viên hoặc lớp học, các tiết học cần được sắp xếp liên tục mà không có tiết trống xen giữa.
Các phân tiết của cùng một lớp môn học nên diễn ra cách nhau ít nhất một ngày.
Các phân tiết không nên được xếp vào ngày thứ bảy.
Các phân tiết trong thời khoá biểu của lớp học không nên được sắp xếp rải rác trong tuần, vì điều này khiến sinh viên phải đến trường quá nhiều lần chỉ để học một phân tiết mỗi buổi Việc này ảnh hưởng tiêu cực đến thời gian tự học của sinh viên.
Các phân tiết cùng một môn học của các lớp cứng n ên được xểp rải rác vào các tiết học trong tuần để tiện cho việc xếp giảng viên.
Ràng buộc cứng về xếp phòng cho phân tiết
Các phân tiết phải được xếp vào phòng có tính chất phòng phù hợp.
Tại mỗi thời điểm, một phòng chỉ được gán cho một phân tiết duy nhất n ào đó.
Số sinh viên trong lớp môn học của phân tiết phải phù hợp với sức chứa của phòng.
Ràng buộc mềm về xếp phòng cho phân tiết
Các lớp môn học nên được xếp vào các tòa nhà phân bổ theo khoa quản lý môn học đó.
Những phân tiết trong cùng một buổi học của một lớp cứng n ên được xếp học ở những phòng học gần nhau.
Các phòng học cần được sử dụng một cách tối ưu để đảm bảo sức chứa phù hợp, tránh tình trạng phòng lớn được bố trí cho các lớp học có số lượng sinh viên ít.
Bài toán sắp xếp thời khóa biểu bao gồm nhiều loại ràng buộc cần được thỏa mãn Các ràng buộc cứng yêu cầu giải quyết bài toán thỏa mãn ràng buộc, trong khi các ràng buộc mềm liên quan đến bài toán tối ưu tổ hợp.
Dữ liệu mẫu cho bài toán sắp xếp thời khóa biểu môn học gồm 378 lớp, 1864 phân tiết và
Kết quả của luận văn
Kết quả của luận văn gồm những nội dung chính sau:
Nghiên cứu gần đây về bài toán sắp xếp thời khóa biểu môn học đã chỉ ra tầm quan trọng của quy hoạch nguyên Bài viết tổng hợp lý thuyết về quy hoạch nguyên và phương pháp Column Generation, nhằm áp dụng hiệu quả vào việc tối ưu hóa sắp xếp thời khóa biểu.
Nghiên cứu này tập trung vào mô hình sắp xếp thời khóa biểu tại Trường Đại học Bách Khoa Tp.HCM, phân tích các ưu điểm và nhược điểm của mô hình hiện tại khi áp dụng phương pháp Column Generation Bên cạnh đó, bài viết cũng đề xuất một mô hình mới nhằm đáp ứng các ràng buộc cứng và mềm trong quá trình sắp xếp thời khóa biểu.
Chúng tôi đã áp dụng mô hình đề xuất để phát triển một chương trình tự động sắp xếp thời khóa biểu cho các môn học tại trường Đại học Bách Khoa Tp HCM.
Phân tích và đánh giá kết quả thực nghiệm trên dữ liệu nhỏ giúp phát hiện các hiệu ứng bất thường và khắc phục chúng một cách hiệu quả.
Cấu trúc nội dung luận văn
Luận văn được chia thành 6 chương, trong đó chương 1 trình bày mục tiêu nghiên cứu và bài toán sắp xếp thời khóa biểu môn học tại trường Đại học Bách Khoa Tp HCM, đồng thời xác định rõ các mục tiêu và kết quả đạt được của nghiên cứu.
Trong chương 2, luận văn tổng hợp các nghiên cứu gần đây liên quan đến đề tài, làm nổi bật các tác giả và công trình của họ Phần này cũng chỉ ra những vấn đề còn tồn tại trong các nghiên cứu trước đó, từ đó định hướng cho những giải pháp mà đề tài sẽ đề xuất.
Trong chương 3, luận văn trình bày cơ sở lý thuyết cho đề tài, bắt đầu với lý thuyết về quy hoạch tuyến tính, nền tảng cho các phương pháp giải bài toán quy hoạch tuyến tính và quy hoạch nguyên Tiếp theo, phần này giới thiệu lý thuyết về quy hoạch nguyên, trong đó có hai phương pháp phổ biến là branch-and-bound và branch-and-cut Cuối cùng, chương cung cấp cơ sở lý thuyết cho phương pháp Column Generation, được sử dụng để giải bài toán sắp xếp thời khóa biểu môn học.
Trong chương 4, luận văn trình bày mô hình sắp xếp thời khóa biểu môn học và áp dụng phương pháp Column Generation để giải quyết bài toán Quá trình giải gồm các giai đoạn: tạo ra lời giải khả thi ban đầu, thực hiện branching và phát sinh các column.
Trong chương 5, luận văn giới thiệu phương pháp giải quyết bài toán sắp xếp thời khóa biểu môn học, bao gồm tổng quan về BCP framework được áp dụng trong nghiên cứu Ngoài ra, luận văn cũng đề cập đến các mô hình dữ liệu được sử dụng cho bài toán này Cuối cùng, chương trình trình bày các thử nghiệm thực hiện để đánh giá hiệu quả của giải pháp.
Chương 6 trình bày kết luận và hướng phát triển cho đề tài.
CÁC CÔNG TRÌNH LIÊN QUAN
Phương pháp xây dựng tuần tự
Nhóm phương pháp ra đời sớm nhất để giải bài toán sắp xếp thời khóa biểu môn học trong trường học bao gồm việc chia các môn học thành các tiết học tuần tự Một trong những phương pháp tiêu biểu là giải thuật tô màu đồ thị, trong đó mỗi đỉnh đại diện cho một môn học Hai đỉnh được nối bởi một cạnh nếu chúng có cùng sinh viên đăng ký Selim đã áp dụng phương pháp này để sắp xếp thời khóa biểu, nhằm giảm số màu tô bằng cách chia các đỉnh thành các tập khác nhau.
Thuật toán này được áp dụng để giải quyết bài toán lên lịch phân công giảng dạy (class-teacher scheduling) Gần đây, Asratian và de Werra cũng đã nghiên cứu và giải quyết bài toán này với nhiều nhóm giờ dạy khác nhau.
Phương pháp tô màu đồ thị trong sắp xếp thời khóa biểu môn học gặp khó khăn khi áp dụng cho các bài toán có nhiều ràng buộc, đặc biệt là với những ràng buộc mềm Việc thêm quá nhiều ràng buộc làm cho mô hình đồ thị trở nên phức tạp, dẫn đến việc tối ưu cho các ràng buộc mềm trở nên kém hiệu quả.
Lập trình ràng buộc
Lập trình ràng buộc (Constraint Logic Programming - CLP) là phương pháp hiệu quả để giải quyết bài toán sắp xếp thời khóa biểu môn học Các ngôn ngữ lập trình ràng buộc phổ biến như CHIP, OZ và CLP(FD) cho phép tìm kiếm giải pháp bằng cách sinh ra các giá trị cho biến và lan truyền các ràng buộc, từ đó loại bỏ những nhánh không cần thiết trong quá trình tìm kiếm CLP áp dụng phương pháp tìm kiếm có quay lui, giúp chuyển hướng quá trình tìm kiếm sang các nhánh khác khi gặp phải các ràng buộc vi phạm.
Azevedo và Barahoma [8] đã áp dụng ngôn ngữ lập trình ràng buộc DOMLOG cùng với phương pháp heuristic kiểm tra hướng tới để tối ưu hóa việc sắp xếp thời khóa biểu tại trường đại học Lisbon.
Zervoudakis và Stamatopoulus đã áp dụng thư viện lập trình ràng buộc ILOG SERVER C++ để tối ưu hóa thời khóa biểu cho khoa Công nghệ thông tin và Truyền thông tại trường đại học Athens Họ sử dụng phương pháp tìm kiếm theo chiều sâu và heuristics thứ tự biến để sắp xếp 68 môn học Phương pháp lập trình ràng buộc cho phép phát triển nhanh chóng và phù hợp với bài toán có nhiều ràng buộc Tuy nhiên, nhược điểm lớn nhất là không thể xử lý hiệu quả đồng thời cả ràng buộc cứng và mềm, đặc biệt trong các tình huống có nhiều cấp độ ưu tiên khác nhau.
Tìm kiếm cục bộ
Trong lĩnh vực tối ưu hóa, ba phương pháp phổ biến thường được áp dụng là giải thuật di truyền, mô phỏng luyện kim và tìm kiếm Tabu Những phương pháp heuristics này giúp tránh rơi vào tối ưu cục bộ và thực hiện tìm kiếm một cách có hệ thống Tuy nhiên, chúng không quét toàn bộ không gian nghiệm và thường loại bỏ một phần không gian này, dẫn đến kết quả tìm được thường không phải là tối ưu và không thể chứng minh tính tối ưu ngay cả khi đó là nghiệm tối ưu.
Giải thuật di truyền là một phương pháp tìm kiếm dựa trên sức mạnh của quần thể, mô phỏng quá trình chọn lọc tự nhiên Phương pháp này duy trì một tập hợp các lời giải khả thi và thực hiện lai ghép hoặc đột biến để tạo ra các cá thể con Quá trình tái tạo quần thể diễn ra bằng cách chọn lọc các cá thể tốt hơn từ thế hệ trước, tiếp tục cho đến khi đạt được lời giải tối ưu Erben và Keppler đã ứng dụng giải thuật di truyền để giải quyết bài toán sắp xếp thời khóa biểu cho trường đại học Konstanz, với thời khóa biểu được mô tả bằng 5 phần tử: lớp học, thầy giáo, bài giảng, phòng học và tiết học Nghiên cứu đã thử nghiệm trên dữ liệu thực và chạy qua 2500 thế hệ trong thời gian 8.5 giờ.
Mô phỏng luyện kim là một chiến lược tối ưu hóa dựa trên quá trình luyện kim thực tế, bắt đầu bằng việc đốt nóng kim loại đến nhiệt độ cao, sau đó làm nguội đến điểm đóng băng Chuỗi nhiệt độ và thời gian này được gọi là lịch biểu làm nguội Kirkpatrick và các đồng tác giả đã giới thiệu mô hình này vào năm 1983, với thuật toán khởi đầu từ việc tạo ra các lời giải ngẫu nhiên, sau đó tìm kiếm lời giải láng giềng theo lịch làm nguội Elmohammed đã áp dụng thuật toán luyện kim với nhiều lịch biểu khác nhau cho bài toán sắp xếp thời khóa biểu tại trường đại học Syracuse, đạt được kết quả tốt hơn so với các phương pháp truyền thống.
Tìm kiếm tabu là một giải thuật tìm kiếm cục bộ với khả năng thoát khỏi các điểm tối ưu cục bộ, dựa trên cơ chế của giải thuật leo đồi Giải thuật này sử dụng một danh sách tabu để ghi lại các bước chuyển đã thực hiện, giúp tránh rơi vào điểm cục bộ Chiều dài của danh sách tabu ảnh hưởng đến chiến lược tìm kiếm: khi cần đa dạng hóa, danh sách tabu nên ngắn để nhảy đến không gian mới; ngược lại, khi muốn tăng cường tìm kiếm trong không gian hiện tại, danh sách tabu cần đủ dài.
Costa đã áp dụng chiến lược tìm kiếm tabu với hai danh sách tabu cho bài toán sắp xếp thời khóa biểu môn học Danh sách đầu tiên chứa các bài giảng đã được phân bổ vào các tiết học cụ thể trong tuần, không được sắp xếp lại nếu đã có trong danh sách Danh sách thứ hai bao gồm các cặp (t, l) chứa thông tin về bài giảng và tiết dạy trước đó đã được sắp xếp, trong đó tiết dạy l không thể được sắp xếp vào giờ học t nếu đã nằm trong danh sách Tác giả còn sử dụng chiến lược đa dạng hóa không gian tìm kiếm để điều khiển quá trình tìm kiếm Kết quả thử nghiệm cho thấy thuật toán có khả năng tìm ra lời giải khả thi, mặc dù cần điều chỉnh nhiều thông số như chiều dài và trọng số của danh sách tabu.
Alvarez-Valdes [13] đã áp dụng phương pháp tìm kiếm tabu hai pha để tối ưu hóa lịch học cho sinh viên khoa Toán tại trường đại học Valencia Trong pha đầu tiên, ông tạo ra các thời khóa biểu phù hợp cho từng sinh viên Pha tiếp theo sử dụng giải thuật tìm kiếm tabu kết hợp với chiến lược tăng cường nhằm cải thiện hơn nữa lịch học của mỗi sinh viên.
Các heuristics là chiến lược khả thi cho bài toán sắp xếp thời khóa biểu, nhằm tìm ra các nghiệm xấp xỉ chấp nhận được trong thời gian cho phép Tuy nhiên, hiệu quả của các phương pháp này phụ thuộc vào đặc trưng cụ thể của bài toán, đòi hỏi phải khảo sát và đo đạc thực nghiệm kỹ lưỡng để điều chỉnh các thông số Giải thuật di truyền cần điều chỉnh hàm đánh giá độ thích nghi và các phép toán lai ghép với các ràng buộc, trong khi giải thuật mô phỏng luyện kim cần có lịch biểu làm nguội hợp lý và xác định nhiệt độ khởi đầu khó khăn Do đó, việc áp dụng các phương pháp này vào thực tế gặp khó khăn vì người sử dụng cần có kiến thức chuyên sâu về chúng.
Quy hoạch nguyên
Đối với các bài toán nhỏ, quy hoạch nguyên là phương pháp hiệu quả để giải quyết Phương pháp này yêu cầu mô tả các ràng buộc bằng phương trình hoặc bất phương trình toán học Chiến lược nhánh và cận được sử dụng để tìm kiếm lời giải tối ưu, trong đó mỗi node trên cây tìm kiếm đại diện cho một bài toán quy hoạch tuyến tính tương ứng với bài toán quy hoạch nguyên ban đầu Nhiều tác giả đã áp dụng phương pháp này, bao gồm Breslaw, Shin và Sullivan, cùng với Triphathy.
Đối với các bài toán quy hoạch nguyên có kích thước lớn, dữ liệu mô tả thường rất lớn, do đó cần phải giải quyết dần dần thay vì giải trực tiếp Barnhard và Maculan đã phát triển phương pháp Column Generation để xử lý những bài toán này Ý tưởng chính là tại mỗi node trong cây tìm kiếm, trước khi thực hiện nới lỏng bài toán quy hoạch nguyên thành bài toán quy hoạch tuyến tính, cần gọi thủ tục sinh cột để thêm các cột vào ma trận ràng buộc, với yêu cầu chi phí không âm nhằm tối ưu hóa bài toán Andrea đã áp dụng phương pháp này cho bài toán sắp xếp thời khóa biểu môn học, trong đó các ràng buộc mềm được thỏa mãn trong quá trình sinh cột Thực nghiệm của Papousis cho thấy phương pháp này hiệu quả trong việc sắp xếp thời khóa biểu cho một trường trung học ở Hy Lạp.
Kết luận
Qua nghiên cứu các công trìnhđã công bố, tôirút ra một số kết luận sau:
Nghiên cứu về phương pháp tìm kiếm cục bộ và lập trình ràng buộc trong bài toán sắp xếp thời khóa biểu đã thu hút sự chú ý của nhiều công trình Một số nghiên cứu áp dụng phương pháp quy hoạch nguyên, tuy nhiên, số lượng công trình sử dụng phương pháp Column Generation lại rất hạn chế.
Phương pháp Column Generation thường được áp dụng cho các bài toán có mô hình đơn giản, trong khi mô hình sắp xếp thời khóa biểu tại Đại học Bách Khoa lại phức tạp với nhiều ràng buộc cứng và mềm đặc thù Mặc dù các nghiên cứu trong lĩnh vực này đã tìm ra nghiệm tối ưu, nhưng chúng chỉ được thử nghiệm trên dữ liệu nhỏ, không đủ để phản ánh quy mô lớn của trường Đại học Bách Khoa.
Từ những kết luận trên và qua thảo luận với thầy hướng dẫn, tôi đã xácđịnh một số vấn đề cần tập trung nghiên cứu như sau:
Nghiên cứu cơ sở lý thuyết về quy hoạch tuyến tính, quy hoạch nguy ên và phương pháp Column Generation đ ể có cơ sở áp dụng cho đề tài.
Xây dựng mô hình sắp xếp thời khóa biểu cho tr ường Đại học Bách Khoa thích hợp với phương pháp Column Generation.
Nghiên cứu giải thuật branch-and-price để hiện thực phương pháp ColumnGeneration.
CƠ SỞ LÝ THUYẾT
Quy hoạch tuyến tính
Quy hoạch tuyến tính lần đầu tiên được giới thiệu bởi nhà toán học Liên Xô Leonid Vitaliyevich Kantorovich trong cuốn sách “Phương pháp toán học về tổ chức và kế hoạch hóa sản xuất” vào năm 1939, tập trung vào các công thức và biểu thức toán học cho các vấn đề kinh tế cơ bản Năm 1947, George Dantzig và các cộng sự đã phát hiện lại mô hình này khi nghiên cứu lập kế hoạch sản xuất cho không quân Mỹ, đồng thời công bố thuật toán đơn hình nổi tiếng để giải quyết bài toán quy hoạch tuyến tính.
Quy hoạch tuyến tính là một phần quan trọng trong quy hoạch toán học, được áp dụng cho nhiều bài toán thực tế trong các lĩnh vực như kinh tế, viễn thông và xây dựng Hiệu quả của quy hoạch tuyến tính đã được chứng minh qua thực tiễn, góp phần đáng kể vào sự thay đổi bộ mặt kinh tế toàn cầu vào nửa cuối thế kỷ 20.
Trong phần này sẽ trình bày một số khái niệm cơ bản về quy hoạch tuyến tính và giải thuật đơn hìnhđể giải bài toán quy hoạch tuyến tính.
3.1.1 Định nghĩa quy hoạch tuyến tính
Bài toán quy hoạch tuyến tính tổng quát được phát biểu như sau
| , ) ( min{ f x c x x D trong đó c ( c 1 , c 2 , , c n ) T R n và D R n là tập lồi đa diện được xác định bởi hệ bất phương trình tuyến tính m n mn m m n n n n b x a x a x a b x a x a x a b x a x a x a
Trong bài toán trên, ta gọi n n x c x c x c x c x f ( ) , 1 1 2 2 là hàm mục tiêu; n j c j , 1 , , là các hệ số của hàm mục tiêu; n j x j , 1 , , là các biến; m i b x a i , ( , ) i , 1 , ,
Tập lồi đa diện D được định nghĩa là tập nghiệm chấp nhận được, trong đó mỗi điểm x thuộc D được xem là một nghiệm chấp nhận hoặc phương án khả thi Điểm x* cũng thuộc D và đại diện cho một phương án tối ưu trong tập này.
D x x c x f x c x f ( ) , ( ) , , được gọi là nghiệm tối ưu hay lời giải tối ưu của bài toán.
Khi nghiên cứu quy hoạch tuyến tính, ng ười ta thường dùng hai dạng đặc thù sau:
Dạng chuẩn tắc n j x m i b x a subject x c x c x c x f j i n j j ij n n
hay có thể được viết dưới dạng ma trận là
Dạng chính tắc n j x m i b x a subject x c x c x c x f j i n j j ij n n
tương tự, chuyển sang dạng ma trận là
3.1.2 Sự tồn tại nghiệm và tính chất tập nghiệm của quy hoạch tuyến tính
Dưới đây trình bày một số định lý (không chứng minh) về tập nghiệm của quy hoạch tuyến tính.
Xét bài toán quy hoạch tuyến tính tổng quát
| , ) ( min{ f x c x x D LP trong đó c R n và D R n là tập lồi đa diện khác rỗng
Định lý 3.1 khẳng định rằng nếu tập nghiệm chấp nhận được D không rỗng và bị chặn, thì bài toán quy hoạch tuyến tính (LP) sẽ luôn có nghiệm tối ưu Đồng thời, Định lý 3.2 cho biết rằng nếu tập D không rỗng và hàm mục tiêu f(x) = bị chặn dưới, thì cũng tồn tại nghiệm cho bài toán quy hoạch tuyến tính.
D thì quy hoạch tuyến tính (LP ) luôn có nghiệm tối ưu.
Theo Định lý 3.3, nếu bài toán quy hoạch tuyến tính có nghiệm tối ưu, thì tập nghiệm tối ưu sẽ nằm trên một mặt (face) của tập lồi đa diện D Điều này khẳng định rằng nghiệm tối ưu không chỉ tồn tại mà còn được xác định rõ ràng trong không gian lồi, giúp cho việc phân tích và tìm kiếm nghiệm trở nên hiệu quả hơn.
Trong quy hoạch tuyến tính, nếu tồn tại nghiệm tối ưu và tập lồi đa diện có đỉnh, thì nghiệm tối ưu sẽ đạt tại ít nhất một đỉnh, tức là tại một phương án cực biên Hơn nữa, nếu một quy hoạch tuyến tính có nghiệm tối ưu, nghiệm này cũng chính là nghiệm tối ưu toàn cục của bài toán quy hoạch tuyến tính.
3.1.3 Phương pháp đơn h ình để giải bài toán quy hoạch tuyến tính chính tắc
Phương pháp đơn hình, được George Dantzig đề xuất vào năm 1947, là một trong những phương pháp phổ biến nhất để giải quyết bài toán quy hoạch tuyến tính Mặc dù thuật toán này có độ phức tạp hàm mũ, nhiều thuật toán khác như thuật toán elipsoid của Khachiyan và thuật toán điểm trong của Karmarkar đã được phát triển với độ phức tạp đa thức Tuy nhiên, cho đến nay, thuật toán đơn hình vẫn được ưa chuộng trong thực tế.
Tất cả các bài toán quy hoạch tuyến tính đều có thể được chuyển đổi về dạng chính tắc mà không làm giảm tính tổng quát Trong phần này, chúng tôi sẽ trình bày thuật toán đơn hình để giải quyết bài toán quy hoạch tuyến tính ở dạng chính tắc.
Xét bài toán quy hoạch tuyến tính chính tắc
| , min{ c x x D LP ct trong đó c R n \ { 0 }và D R n là tập lồi đa diện được xác định bởi
Ax (3.1) với A là ma trận cấp m n , m n và b ( b 1 , b 2 , , b m ) T 0 Định lý sau đây giúp ta xét bài toán quy hoạch tuyến tính (LP ct )với giả thiết rằng: Ma trận
Hạng của ma trận A được ký hiệu là rank(A) = m, có nghĩa là m vector hàng của A là độc lập tuyến tính Theo Định lý 3.5, cho tập lồi đa diện không rỗng D = {x | Ax = b, x ≥ 0}, với A là ma trận có kích thước n x m Nếu rank(A) = k < m và các hàng a_i1, a_i2, , a_ik là độc lập tuyến tính, thì D sẽ bằng D', trong đó D' là tập lồi đa diện được xác định bởi điều kiện trên.
Phương pháp đơn hình giải bài toán quy hoạch tuyến tính dựa trên hai tính chất quan trọng: Thứ nhất, nếu bài toán quy hoạch tuyến tính chính tắc (LP ct) có nghiệm tối ưu, nghiệm này sẽ nằm trên một đỉnh của tập lồi đa diện chấp nhận được D Thứ hai, nghiệm tối ưu địa phương của bài toán (LP ct) cũng đồng thời là nghiệm tối ưu toàn cục.
Dựa vào hai tính chất trên ta đi vào xem xét m ột số khái niệm và định lý để xây dựng phương pháp đơn hình. a Phương án cực biên
Do quy hoạch tuyến tính có nghiệm tối ưu tại ít nhất một phương án cực biên nên ta quan tâm đến các tính chất của nó.
Tập chấp nhận D của quy hoạch tuyến tính chính tắc (LP ct) được xác định theo định lý 3.5 Trong đó, A j biểu thị cột thứ j của ma trận A với j = 1, , n Hệ ràng buộc (3.1) của tập chấp nhận D có thể được diễn đạt lại dưới dạng vector như sau: A x ≤ b.
A 1 1 1 1 1 1 , j 0 , 1 , , (3.2)Xét một phương án chấp nhận được x 0 ( x 1 0 , x 2 0 , , x n 0 ) T D Ký hiệu:
J là tập các chỉ số của các thành phần dương của phương án chấp nhận được x 0 Tập J ( x 0 ) còn gọi là tập các chỉ số cơ sở.
Để xác định x 0 là phương án cực biên, cần thỏa mãn điều kiện rằng x 0 thuộc tập D và các vector { A j | j ∈ J ( x 0 )} phải độc lập tuyến tính Đây là nội dung của Định lý 3.6, nhấn mạnh mối liên hệ giữa phương án chấp nhận được và tính độc lập tuyến tính của các vector liên quan.
Dưới đây là các hệ quả trực tiếp từ định lý 3.6
Hệ quả 3.2: Số thành phần dương trong mỗi phương án cực biên của bài toán quy hoạch tuyến tính không vượt quá m
Hệ quả 3.3 : Số phương án cực biên của bài toán quy hoạch tuyến tính dạng chính tắc là hữu hạn. b Điều kiện tối ưu
Ta xét bài toán quy hoạch tuyến tính chính tắc
| , min{ c x x D LP ct trong đó c R n \ { 0 }, và tập chấp nhận được
Trong không gian D n, với b = (b1, b2, , bm) T ≥ 0, A là ma trận m×n có các cột A1, A2, , An và rank(A) = m, trong đó m < n Định nghĩa: Một tập hợp m vector cột độc lập tuyến tính B = {Aj1, Aj2, , A jm} được gọi là một cơ sở của ma trận A.
Cho x 0 ( x 1 0 , , x n 0 ) T là một phương án cực biên của bài toán ( LP ct ) Theo định lý 3.6, các vector { A j | j J ( x 0 )} độc lập tuyến tính Vì rank ( A ) m nên
Nếu x 0 là phương án cực biên không suy biến, tức | J ( x 0 ) | m thì { A j | j J ( x 0 )} là cơ sở duy nhất của A tương ứng với x 0
Nếu \( x_0 \) là phương án cực biên suy biến với \( | J ( x_0 ) | \leq m \), ta cần bổ sung các vector cột của ma trận \( A \) từ tập \( \{ A_j | j \notin J(x_0) \} \) vào bộ vector \( \{ A_j | j \in J(x_0) \} \) Điều này nhằm tạo thành bộ \( m \) vector độc lập tuyến tính \( \{ A_j | j \in J \} \) với \( J \supset J(x_0) \) và \( | J | = m \).
B j Dễ thấy, ứng với một ph ương án cực biên suy biến x 0 có thể có nhiều cơ sở của A
Xét bài toán quy hoạch tuyến tính chính tắc (LP ct) với giả thiết rằng bài toán này không suy biến và đã biết trước một phương án cực biên x0.
Quy hoạch nguyên
Bài toán tối ưu tổng quát là việc xác định giá trị nhỏ nhất hoặc lớn nhất của hàm f(x) trong miền xác định D Dựa vào đặc điểm của miền xác định D, bài toán tối ưu được phân loại thành hai dạng chính.
Tối ưu liên tục khi D là tập hợp các giá trị liên tục như tập hợp các số thực R
Tối ưu rời rạc, hay còn gọi là tối ưu tổ hợp, đề cập đến việc tìm kiếm giải pháp tốt nhất trong các tập hợp giá trị rời rạc, bao gồm các số nguyên, hoán vị, tổ hợp và đồ thị.
Quy hoạch nguyên là bài toán tối ưu tổ hợp với ràng buộc là các giá trị nguyên Dưới đây là định nghĩa hình thức của quy hoạch nguyên n m m
Trong đó f ( x ) : R n R là hàm mục tiêu
1 x g x g x g m là các hàm R n R đặc tả các ràng buộc cho miền xác định D
Quy hoạch nguyên, với đặc điểm là cung cấp lời giải tối ưu, đã được áp dụng rộng rãi trong thời gian gần đây để tìm kiếm nghiệm tối ưu cho nhiều bài toán khác nhau Các lĩnh vực như lập lịch, tìm đường đi và thiết kế mạng viễn thông đều đã hưởng lợi từ phương pháp này.
Dựa vào tính chất của hàm mục tiêu và hàm xác định các ràng buộc, người ta chia quy hoạch nguyên thành hai nhóm sau:
Quy hoạch nguyên phi tuyến (Integer Non-linear Programming) khi hàm mục tiêu hoặc các hàm ràng buộc là phi tuyến
Quy hoạch nguyên tuyến tính khi hàm mục tiêu và tất cả hàm ràng buộc là tuyến tính.
Do đó nó có thể được biểu diễn dựa vào quy hoạch tuyến tính với ràng buộc là các biến nguyên
Trong bài viết này, chúng tôi sẽ trình bày các phương pháp giải bài toán quy hoạch nguyên, bao gồm phương pháp nhánh-cận (branch-and-bound), phương pháp mặt phẳng cắt (cutting planes) và các phương pháp kết hợp như branch-and-cut và branch-and-price Những phương pháp này đóng vai trò quan trọng trong việc tối ưu hóa và giải quyết các bài toán phức tạp trong quy hoạch nguyên.
Về mặt lịch sử phát triển, ph ương pháp nhánh-cận (branch-and-bound) được Land và Doig
Phương pháp nhánh-cận, lần đầu tiên được giới thiệu vào năm 1960 như một giải pháp cho bài toán quy hoạch nguyên, đã trở nên phổ biến từ năm 1962 sau khi Little, Murphy, Sweeney và Karel công bố thuật toán giải bài toán người bán hàng rong Ngày nay, phương pháp này vẫn là một trong những công cụ chính để giải quyết các bài toán quy hoạch nguyên, với ý tưởng cốt lõi là "chia để trị", tức là thay vì giải quyết trực tiếp bài toán lớn, ta sẽ phân tách và giải các bài toán con.
Xét bài toán quy hoạch nguyên
Chúng ta tiến hành phân hoạch tập D thành một tập hữu hạn các tập con { D i | D i D , i I }, trong đó I là tập hợp hữu hạn các chỉ số tương ứng với mỗi tập con D i Từ đó, chúng ta xây dựng một bài toán con với hàm mục tiêu là tìm giá trị nhỏ nhất của hàm z = min (f(x), x ∈ D i).
Gọi z i là cận dưới của z i và z i là cận trên của z i
Ta có z min z i và z min z i
Dưới đây là mã giả cho giải thuật nhánh cận Giải thuật gồm các b ước sau
Bước 1- Khởi tạo (Initialization): L {S } là tập hợp các bài toán con, ở thời điểm ban đầu L được khởi tạo là bài toán cần giải, z và z.
Bước 2 - Kiểm tra điều kiện dừng (Termination test): Nếu L {} thì nghiệm hiện tại x 0 là nghiệm tối ưu.
Bước 3 - Chọn bài toán con (Subproblem selection): Chọn một bài toán con và xóa nó ra khỏi danh sách các bài toán con hiện tại L
Bước 4 trong quá trình giải bài toán là tính cận, bao gồm việc xác định cận dưới và cận trên Nếu cận trên z_i nhỏ hơn cận hiện tại z, cần cập nhật cận trên thành z = z_i Ngược lại, nếu cận dưới z_i lớn hơn cận hiện tại z, thì sẽ loại bỏ nhánh này.
Bước 5 – Phân nhánh (Branching) là quá trình chia tập con D i của bài toán hiện tại thành các tập con D ij Sau đó, chúng ta tạo các bài toán con tương ứng và đưa chúng vào danh sách L Cuối cùng, quay trở lại bước 2 để tiếp tục giải quyết.
Giải thuật nhánh-cận là một phương pháp tìm kiếm hệ thống, khảo sát tất cả các vùng không gian có khả năng chứa nghiệm, với các bước phân nhánh, tính cận và chiến lược lựa chọn bài toán con là điểm mấu chốt Đặc biệt, giải thuật này có khả năng đánh giá khả năng có nghiệm của một vùng không gian thông qua việc tính toán cận dưới và so sánh với cận trên hiện tại Ngoài ra, nó có thể phối hợp với các kỹ thuật khác như depth-first-search, best-first-search và các phương pháp heuristic để nâng cao hiệu quả tìm kiếm Phương pháp nhánh-cận rất thuận tiện cho bài toán quy hoạch nguyên tuyến tính, nhờ vào việc tính toán cận của mỗi bài toán con dễ dàng, với f(x) luôn lớn hơn hoặc bằng f(x0) cho mọi x thuộc tập chấp nhận D.
Cận dưới của bài toán quy hoạch nguyên tuyến tính được xác định bởi x₀f Trong quá trình tính cận của thuật toán nhánh-cận, chúng ta loại bỏ các ràng buộc nguyên trên các biến, bước này được gọi là bước nới lỏng, dẫn đến một bài toán nới lỏng có dạng quy hoạch tuyến tính Giải bài toán này cho phép chúng ta tìm ra giá trị tối ưu của hàm mục tiêu, chính là cận dưới của bài toán con Nếu phương án tối ưu đạt được là nguyên, giá trị tối ưu sẽ trở thành cận trên của bài toán con.
Ví dụ: Giải quy hoạch nguyên sau bằng phương pháp nhánh-cận eger x x x x x x x x x x x f int ,
Ký hiệu bài toán này là S 0 và tập chấp nhận đ ược là
Quá trình giải bài toán này theo thuật toán nhánh cận như sau
Bườc 2: Điều kiện dừng không thỏa mãn
Bước 4: Giải bài toán nới lỏng ta được nghiệm tối ưu
Bước 5: Phân nhánh Chia đôi t ập D 0 bởi biến chia nhánh
D Tạo hai bài toán con S 1 , S 2 tương ứng với
D rồi đưa vào danh sách L
Bươc 2: Điều kiện dừng không thỏa mãn.
Bước 3: Chọn bài toán con S 1
Bước 4: Giải bài toán nới lỏng ta được nghiệm tối ưu x 1 2 , 4 T và giá trị tối ưu là
( x 1 f Do x 1 nguyên nên ta cập nhật nghiệm nguyên hiện tại và cận trên
Bước 5: Khi đã xác định được nghiệm tối ưu cho bài toán con, cần loại bỏ bài toán này khỏi danh sách L và quay lại bước 2 để lựa chọn một bài toán con khác.
Bước 2:Điều kiện dừng không thỏa mãn.
Bước 3: Chọn bài toán con S 2
Bước 4: Giải bài toán nới lỏng ta được nghiệm tối ưu
2 3 và giá trị tối ưu
( x 1 f Cận dưới z ( S 2 ) 71 67 z nên tiếp tục chọn nhánh này để phân nhánh.
Bước 5: Chia đôi tập D 2 bởi biến phân nhánh
D Tạo hai bài toán con S 3 , S 4 tương ứng với
D rồi đưa vào danh sách L
Bước 2: Điều kiện dừng không thỏa mãn.
Bước 3: Chọn bài toán con S 3
Bước 4: Giải bài toán nới lỏng ta được nghiệm tối ưu
3 27 và giá trị tối ưu
( x 3 f Cận dưới z ( S 3 ) 70 625 z 70 nên chọn bài toán này để phân nhánh.
Bước 5: Chia đôi tập D 3 bởi biến phân nhánh
D Tạo hai bài toán con S 5 , S 6 tương ứng với
D rồi đưa vào danh sách L
Bước 2: Điều kiện dừng không thỏa mãn.
Bước 3: Chọn bài toán con S 4
Bước 4: Bài toán nới lỏng vô nghiệm do D 4 rỗng Quay lại bước 2 để chọn bài toán khác.
Bước 2: Điều kiện dừng không thỏa mãn.
Bước 3: Chọn bài toán con S 5
Bước 4: Giải bài toán nới lỏng ta được nghiệm tối ưu x 5 3 , 2 T và giá trị tối ưu
(x 5 f Do cận dưới z ( S 5 ) 65 z 70 nên loại bỏ nhánh này ra khỏi cây tìm kiếm Quay về bước 2.
Bước 2: Điều kiện dừng không thỏa mãn.
Bước 3: Chọn bài toán con S 6
Bước 4: Giải bài toán nới lỏng ta được nghiệm tối ưu
6 4 và giá trị tối ưu là
(x 6 f Cận dưới z ( S 6 ) 68 88 z 70 nên loại bỏ nhánh này ra khỏi cây tìm kiếm Quay về bước2.
Bước 2: Điều kiện dừng thỏa mãn Giải thuật kết thúc Ta có nghiệm tối ưu là
T x opt ( 2 , 4 ) và giá trị tối ưu là f opt 70.
Trong ví dụ trên, các tập con chấp nhận D5 và D6 bị loại khỏi không gian tìm kiếm do lower bound của chúng vượt quá giá trị upper bound hiện tại Vì vậy, việc sớm xác định một upper bound tốt có thể giúp loại bỏ nhiều tập chấp nhận được, điều này rất quan trọng khi áp dụng phương pháp nhánh-cận.
3.2.2 Phương pháp mặt phẳng cắt
Năm 1956, Dantzig, Fulkerson và Johnson đã giới thiệu phương pháp mặt phẳng cắt (cutting planes) nhằm giải quyết bài toán quy hoạch nguyên tuyến tính Phương pháp này dựa trên việc sử dụng một siêu phẳng cắt tại mỗi bước lặp để thu nhỏ miền chấp nhận được từ bước trước, đồng thời đảm bảo thỏa mãn hai yêu cầu quan trọng.
Mọi phương án chấp nhận được của quy hoạch nguy ên đều không bị cắt
Nghiệm tối ưu (chưa nguyên) vừa nhận được ở bước này phải bị cắt đi
Vào năm 1956, Ralph Gomory đã phát triển một thuật toán hoán chỉnh hoàn chỉnh nhằm giải quyết bài toán quy hoạch nguyên Thuật toán này đảm bảo rằng sau một số bước hữu hạn, sẽ tìm được nghiệm nguyên tối ưu, đáp ứng yêu cầu quan trọng trong lĩnh vực này.
Xét bài toán quy hoạch tuyến tính sau
D là tập lồi đa diện lồi chấp nhận đ ươc của LP
L là bài toán quy hoạch nguyên tương ứng khi thêm vào ràng buộc x Z * n
D là miền chấp nhận của L P Định lý khẳng định rằng nếu D là đa diện lồi và D là tập hợp các điểm nguyên của D, thì R (D ) sẽ là bao lồi của D Kết quả là R sẽ trở thành một đa diện lồi với các đỉnh nguyên.
Column Generation
Vào cuối thập niên 1950 và đầu thập niên 1960, Ford và Fulkerson đã áp dụng phương pháp phân rã Dantzig-Wolfe để mô hình hóa bài toán dòng trên mạng, sử dụng một cách không tường minh phương pháp Column Generation Sau đó, Gilmore và Gomory đã tìm ra nghiệm heuristic cho bài toán cutting stock thông qua Column Generation, mặc dù chưa kết hợp với branch-and-bound Sự kết hợp này được Desrosiers, Soumis và Desrochers đưa ra vào năm 1984 để giải bài toán vehicle routing Đến năm 1998, Barnhart và các cộng sự đã tổng kết lý thuyết hoàn chỉnh của phương pháp Column Generation cho bài toán quy hoạch nguyên tổng quát, đồng thời trình bày các hướng tiếp cận và vấn đề nảy sinh khi áp dụng phương pháp này kết hợp với branch-and-bound trong thực tế.
Phương pháp Column Generation là một kỹ thuật quan trọng trong tối ưu hóa, được áp dụng cho cả bài toán quy hoạch tuyến tính và quy hoạch nguyên Để hiểu rõ hơn về cách tiếp cận này đối với bài toán quy hoạch nguyên, trước tiên chúng ta cần xem xét phương pháp Column Generation trong bối cảnh quy hoạch tuyến tính.
Phần đầu tiên tôi trình bày phép phân rã Dantzig -Wolfe làm cơ sở lý thuyết cho phương pháp Column Generation cho bài toán quy hoạch tuyến tính.
Năm 1960, Dantzig và Wolfe đã giới thiệu phương pháp phân rã Dantzig-Wolfe, một cách tiếp cận mô hình hóa mới cho các bài toán có cấu trúc Phương pháp này đã trở thành nền tảng lý thuyết cho kỹ thuật Column Generation trong quy hoạch tuyến tính.
Xét bài toán quy hoạch tuyến tính có dạng cấu trúc nh ư sau
Trong đó, mỗi bài toán A i x i b i ; x i 0 ; i 1 , , n , x i là một vector, được gọi là một bài toán con của bài toán ban đầu.
Định lý biểu diễn tập lồi đa diện khẳng định rằng, với tập các điểm cực biên v , , 1 v N và tập các phương cực biên d , , 1 d M của tập lồi đa diện D, mọi điểm x thuộc D đều có thể được biểu diễn một cách chính xác.
Nếu D là một đa diện lồi, thì tập hợp các phương cực biên sẽ là rỗng Điều này dẫn đến việc biểu thức chỉ còn lại tổng thứ nhất, nghĩa là mỗi điểm trong D có thể được biểu diễn như một tổ hợp lồi của các điểm cực biên của nó.
Bây giờ ta xét bài toán (P) Do mỗi tập chấp nhận được của mỗi bài toán con là tập lồi đa diện nên theo định lýtrên, ta có:
Trong đó x i p , p 1 , , P ( i ) là các điểm cực biên và d i q , q 1 , , Q ( i ) là các phương cực biên của tập lồi đa diện với p 0 , p 0 và 1
p P (i ) là số lượng các điểm cực biên và
Q là số lượng các phương cực biên của tập chấp nhận được.
Trong bài toán quy hoạch tuyến tính, khi tập chấp nhận được là đa diện lồi, phân rã Dantzig-Wolfe được áp dụng để tối ưu hóa Phân rã này giúp chia nhỏ bài toán phức tạp thành các bài toán con dễ giải hơn, từ đó cải thiện hiệu quả tính toán và tìm ra giải pháp tối ưu cho bài toán ban đầu.
Sau khi áp dụng phân rã Dantzig-Wolfe, chúng ta nhận được một bài toán quy hoạch tuyến tính mới tương đương với bài toán gốc Bài toán này bao gồm các biến i p cùng với các ràng buộc tương ứng, được gọi là các ràng buộc convexity Bài toán này được gọi là bài toán master.
3.3.3 Column Generation cho bài toán quy ho ạch tuyến tính
Column Generation là phương pháp giải bài toán master sau khi áp dụng phân rã Dantzig-Wolfe lên bài toán gốc Phương pháp này tập trung vào việc chỉ xem xét các điểm cực biên "hữu dụng" của bài toán gốc, tức là những điểm có tham gia vào ma trận cơ sở của bài toán master Trong mô hình bài toán master, không cần liệt kê tất cả các điểm cực biên của bài toán gốc, mà chỉ cần sử dụng bài toán master rút gọn (restricted master problem) Do đó, Column Generation thường được áp dụng để giải quyết các bài toán quy hoạch tuyến tính lớn.
Xét bài toán master rút gọn sau
Áp dụng định lý (3.7), điều kiện để cột t tương ứng với biến ip tham gia vào ma trận cơ sở là ước lượng tương ứng Δpi = πDi xi p + α - ci xi p > 0 Trong đó, π là vector đối ngẫu liên quan đến các ràng buộc giữa các bài toán con trong bài toán master rút gọn, và α là giá trị đối ngẫu tương ứng với ràng buộc ∑ λi = 1.
Các column sinh ra còn phải thỏa mãn các ràng buộc trên mỗi bài toán con, mỗi bài toán như vậy gọi là pricing problem i i i i i i b x A x D c
Thông thường, người ta thường chuyển bài toán pricing về dạng quy hoạch tuyến tính như sau:
Giải bài toán quy hoạch tuyến tính trên, nếu giá trị tối ưu nhỏ hơn thì ta thêm column này vào bài toán master.
Như vậy, giải thuật cho bài toán quy hoạch tuyến tính sau khi áp dụng phân rã Dantzig- Wolfe được chia thành hai phần:
Để giải bài toán master, chúng ta sử dụng thuật toán simplex trên mô hình hiện tại Sau đó, các giá trị đối ngẫu được lấy và truyền vào bài toán pricing Nếu bài toán pricing tạo ra một cột mới, quá trình sẽ được lặp lại Ngược lại, nếu không có cột nào được tạo ra, bài toán master đã đạt được giá trị tối ưu.
Vấn đề định giá: Lấy các giá trị đối ngẫu từ bài toán master và sử dụng thuật toán simplex hoặc các thuật toán khác để xác định các cột có ước lượng âm Sau đó, trả các cột này về cho bài toán master để tiếp tục giải quyết.
Hình 3.5: Sơ đồ khối phương pháp Column Generation
3.3.4 Column Generation cho bài toán Quy ho ạch nguyên
Trong giải thuật nhánh-cận, các mặt phẳng cắt được tạo ra tại mỗi node của cây tìm kiếm nhằm cải thiện mô hình bài toán nới lỏng và đạt được cận dưới tốt hơn Phương pháp Column Generation cũng giúp đạt được mục tiêu tương tự.
Phương pháp Column Generation trong Quy hoạch nguyên khác biệt với Quy hoạch tuyến tính ở bước sinh column, vì các column trong Quy hoạch nguyên phải có giá trị nguyên Những column này đại diện cho các đỉnh của đa diện lồi, dẫn đến việc đa diện lồi thu được sẽ "chặt" hơn so với đa diện lồi của bài toán gốc.
Phương pháp Column Generation có tính hội tụ yếu, vì vậy thường được kết hợp với phương pháp nhánh-cận Sự kết hợp này được gọi là branch-and-price, trong đó Column Generation được sử dụng trong bước giải bài toán nới lỏng.
Xét bài toán quy hoạch nguyên sau:
Gọi S * x S , x Z n là tập tất cả các nghiệm nguyên của (IP )
Nếu S là một tập hợp các điểm nguyên của đa diện lồi, thì S* cũng sẽ là một tập hợp như vậy Đặc biệt, khi x là vector với các thành phần nhị phân, S* sẽ đại diện cho các điểm cực biên của tập bao lồi conv(S*) Do đó, phương pháp Column Generation trong trường hợp này tương tự như việc áp dụng phân rã Dantzig-Wolfe.
Kết luận
Trong Chương 3, các cơ sở lý thuyết của phương pháp Column Generation được trình bày, với quy hoạch tuyến tính là điểm khởi đầu cho các phương pháp giải bài toán quy hoạch nguyên Phương pháp cutting plane là phương pháp đầu tiên giải quyết các bài toán quy hoạch nguyên tuyến tính, mang lại ý nghĩa lý thuyết quan trọng Branch-and-bound là phương pháp tổng quát cho các bài toán quy hoạch nguyên, dẫn đến sự phát triển của phương pháp branch-and-cut, hiệu quả cho các bài toán quy hoạch nguyên tuyến tính nhỏ Cuối cùng, Column Generation là phương pháp tối ưu cho bài toán quy hoạch tuyến tính lớn, chỉ duy trì những column có lợi Branch-and-price kết hợp branch-and-bound và Column Generation, tối ưu hóa giải bài toán quy hoạch nguyên cỡ lớn bằng cách kết hợp lợi điểm đa dạng hóa và khả năng duy trì mô hình nhỏ gọn.
PHƯƠNG PHÁP GIẢI BÀI TOÁN SẮP XẾP THỜI KHÓA BIỂU MÔN HỌC
Giới thiệu
Chương 4 này sẽ sử dụng những cơ sở và kết quả đạt được trong Chương 3 để xây dựng chương trình sắp xếp thời khóa biểu môn học Ch ương này gồm các phần sau: phần 4.2 sẽ mô tả bài toán, nhiệm vụ của chương trình và các yêu cầu của trường Đại học Bách Khoa
Trong bài viết này, chúng tôi sẽ mô hình hóa bài toán sắp xếp thời khóa biểu môn học tại Tp HCM theo phương pháp Column Generation trong phần 4.3 Tiếp theo, phần 4.4 sẽ đề cập đến các vấn đề liên quan đến việc áp dụng giải thuật branch-and-price cho bài toán này, nhằm tối ưu hóa quy trình sắp xếp thời khóa biểu.
Mô tả bài toán
Bài toán sắp xếp thời khóa biểu môn học có những đặc điểm riêng biệt tùy thuộc vào từng trường đại học và cao đẳng Nghiên cứu này tập trung vào các đặc trưng cụ thể của việc sắp xếp thời khóa biểu tại trường Đại học Bách Khoa Tp HCM.
4.2.1 Các quy tắc học vụ
Lớp cứng (stable class) là nhóm sinh viên được ghép cố định khi nhập học, trong đó tất cả sinh viên trong lớp sẽ học chung các môn học mà họ đã đăng ký trong suốt một học kỳ.
Trong học kỳ, một môn học có thể được chia thành nhiều lớp môn học khác nhau Mỗi lớp môn học được hình thành từ một hoặc nhiều lớp cứng kết hợp lại, nhằm đảm bảo đủ số lượng sinh viên cần thiết để mở lớp.
Phân tiết là khái niệm chỉ việc mỗi lớp môn học có thể học một hoặc nhiều cụm tiết trong một tuần Mỗi cụm tiết học của một lớp môn học cụ thể được gọi là phân tiết.
Mỗi lớp học được tổ chức trong một phòng học cụ thể tại một thời điểm nhất định, với mỗi phòng học có sức chứa và loại hình riêng biệt.
Trước khi học kỳ mới bắt đầu, Phòng Đào tạo sẽ sử dụng thông tin về chương trình đào tạo và lớp sinh viên để lập danh sách các lớp môn học dự kiến Mỗi lớp môn học có thể có nhiều phân tiết trong tuần Đồng thời, thông tin về các phòng học trong trường cũng được thu thập để hỗ trợ trong việc xếp thời khóa biểu.
Các phân ti ết là đơn v ị được xếp thời khoá biểu : phân tiết được diễn ra vào tiết nào của một ngày trong tuần, và tại phòng nào.
Th ời khoá biểu cho một lớp cứng , hay cho một sinh viên sẽ được trích ra dựa vào thời khoá biểu đã xếp cho các phân tiết.
4.2.2 Các yêu cầu đặt ra
Chương trình sắp xếp thời khóa biểu môn học cần đáp ứng hai yêu cầu chính: đầu tiên, phải thỏa mãn các ràng buộc cứng, và thứ hai, cần tối ưu hóa các ràng buộc mềm để nâng cao hiệu quả học tập.
Ràng buộc cứng về xếp thời gian cho phân tiết
Các phân tiết xung đột nhau không được diễn ra trong các cụm tiết có phần “phủ lấp” nhau.
Các phân tiết học cần được giảng dạy đầy đủ trong một buổi học của một ngày trong tuần Việc chia nhỏ một phân tiết thành các tiết ở cuối buổi sáng và đầu buổi chiều, hoặc giữa ngày này và ngày kia là không được phép.
Một số phân tiết được quy định tránh không đ ược xếp vào một số tiết học cụ thể nào đó.
Ràng buộc mềm về xếp thời gian cho phân tiết
Thời khoá biểu của một sinh viên (hay một lớp cứng) nên hạn chế các ngày học cả hai buổi sáng và chiều.
Trong thời khoá biểu của sinh viên hoặc một lớp học, các tiết học cần được sắp xếp liên tục mà không có tiết trống xen kẽ.
Các phân tiết của cùng một lớp môn học nên diễn ra cách nhau ít nhất một ngày.
Các phân tiết không nên được xếp vào ngày thứ bảy.
Các phân tiết trong thời khoá biểu của lớp học cần được sắp xếp hợp lý, tránh việc xếp đơn lẻ rải rác trong tuần Việc này sẽ giúp sinh viên không phải đến trường quá nhiều lần chỉ để học một phân tiết mỗi buổi, từ đó bảo đảm thời gian tự học của sinh viên được tối ưu hóa.
Các phân tiết cùng một môn học của các lớp cứng n ên được xểp rải rác vào các tiết học trong tuần để tiện cho việc xếp giảng viên.
Ràng buộc cứng về xếp phòng cho phân tiết
Các phân tiết phải được xếp vào phòng có tính chất phòng phù hợp.
Tại mỗithời điểm, một phòng chỉ được gán cho một phân tiết duy nhất n ào đó.
Số sinh viên trong lớp môn học của phân tiết phải phù hợp với sức chứa của phòng.
Ràng buộc mềm về xếp phòng cho phân tiết
Các lớp môn học nên được xếp vào các tòa nhà phân bổ theo khoa quản lý môn học đó.
Những phân tiết trong cùng một buổi học của một lớp cứng n ên được xếp học ở những phòng học gần nhau.
Các phòng học nên được sử dụng một cách tối ưu để đảm bảo sức chứa phù hợp, tránh tình trạng phòng lớn được phân cho lớp có số sinh viên ít.
4.2.3 Mô hình hóa bài toán
Khi áp dụng phương pháp Column Generation trong quy hoạch, cần xác định khả năng phân rã của bài toán Nếu không thể phân rã thành các bài toán con, mỗi column sẽ đại diện cho một giải pháp tổng thể Ngược lại, nếu bài toán có thể phân rã, mỗi column sẽ tương ứng với một giải pháp của bài toán con.
Dựa vào quy tắc nghiệp vụ của bài toán sắp xếp thời khóa biểu tại Trường Đại học Bách Khoa, có hai phương pháp chính để xây dựng thời khóa biểu Phương pháp đầu tiên là tạo thời khóa biểu toàn phần từ các thời khóa biểu của từng phân tiết, trong đó đơn vị sắp xếp là các phân tiết Phương pháp thứ hai là xây dựng thời khóa biểu toàn phần dựa trên các thời khóa biểu của lớp học.
Khi áp dụng phương pháp Column Generation, mỗi cách sắp xếp đều có ưu nhược điểm riêng Cách thứ nhất tạo ra thời khóa biểu cho từng phân tiết, nhanh chóng nhưng khó khăn trong việc biểu diễn các ràng buộc mềm dưới dạng tuyến tính, làm cho mô hình trở nên phức tạp Ngược lại, cách thứ hai, với mỗi bài toán con là tạo ra thời khóa biểu cho mỗi lớp cứng, cho phép biểu diễn các ràng buộc mềm một cách hiệu quả hơn, dẫn đến mô hình quy hoạch nguyên tuyến tính Vì vậy, tôi chọn cách tiếp cận này để xây dựng mô hình cho bài toán sắp xếp thời khóa biểu môn học.
Từ các yêu cầu trên cho bài toán sắp xếp thời khóa biểu môn học, ta rút ra hai nhận xét sau:
Các ràng buộc mềm được thể hiện trên thời khóa biểu của một lớp cứng.
Các ràng buộc cứng được phân loại thành ba nhóm chính Đầu tiên, có các ràng buộc liên quan đến việc sắp xếp tiết học và phòng học cho các phân tiết trong một lớp cứng Thứ hai, là ràng buộc về thời gian và phòng học cho các lớp cứng có cùng phân tiết, yêu cầu hai lớp phải học trong cùng một phòng và cùng giờ Cuối cùng, là các ràng buộc cho các phân tiết cần có cùng kiểu phòng học, yêu cầu các phân tiết này không được chia sẻ cùng phòng vào một thời điểm.
Các thành phần chính của giải thuật
Trong bài viết này, chúng tôi sẽ trình bày các bước quan trọng trong việc hiện thực hóa giải thuật branch-and-price cho bài toán sắp xếp thời khóa biểu môn học Các bước này bao gồm việc khởi tạo nghiệm ban đầu, xây dựng chiến lược branching hợp lý, và áp dụng giải thuật cho bài toán pricing để tối ưu hóa quá trình sắp xếp.
4.3.1 Khởi tạo nghiệm ban đầu
Mục tiêu của chương trình là tạo ra nghiệm ban đầu phù hợp với bài toán master thông qua phương pháp big-M Phương pháp này giúp tạo ra các thời khóa biểu giả, và khi được thêm vào mô hình, chúng sẽ hình thành ma trận cơ sở.
Ta thấy khi thêm các thời khóa biểu vào mô hình, nó sẽ tạo ra các column có dạng nh ư sau:
Hình 4.1: Ma trận các vector cột
Mỗi cột trong ma trận bao gồm hai phần: phần đầu tiên chứa các giá trị a1, a2, , ak được tính toán bằng cách nhân ma trận A c với thời khóa biểu x c j Phần thứ hai chỉ có một thành phần duy nhất nhận giá trị 1, trong khi các thành phần còn lại nhận giá trị 0, với giá trị 1 tương ứng với ràng buộc 1.
Để tạo ra ma trận cơ sở cho mô hình, ta có thể tạo n cột giả tương ứng với n lớp có các thành phần a1, a2, , ak nhận giá trị 0 Điều này thực hiện dễ dàng bằng cách cho các thành phần của x cj nhận giá trị 0, tức là tạo ra một thời khóa biểu rỗng cho một lớp cứng Bên cạnh đó, cần lưu ý tính toán hệ số M trong hàm mục tiêu cho mỗi thời khóa biểu rỗng; các hệ số này phải đủ lớn để loại bỏ các thời khóa biểu giả khỏi mô hình, đồng thời không quá nhỏ để tránh hiện tượng scaling trong quy hoạch tuyến tính.
Hàm mục tiêu của bài toán master là tổng các chi phí của mỗi thời khóa biểu lớp Như vậy ta có
Trong phần Cơ sở lý thuyết, chúng ta đã đề cập đến hai chiến lược branching cơ bản: branching trên biến gốc và branching trên biến của mô hình Column Generation Việc lựa chọn chiến lược phù hợp sẽ phụ thuộc vào đặc điểm cụ thể của từng bài toán.
Do các ràng buộc đẳng thức giữa các lớp cứng có chung phân tiết, việc tạo ra các column thỏa mãn những ràng buộc này rất khó khăn Khi xem xét hai lớp cứng có chung phân tiết, miền trị của thời khóa biểu lớp rất lớn, dẫn đến khả năng sinh ra hai thời khóa biểu thỏa mãn ràng buộc là rất thấp Với đặc điểm bài toán như vậy, việc áp dụng chiến lược branching trên biến gốc trở nên không khả thi, vì branching chỉ ảnh hưởng đến việc tạo ra các thời khóa biểu cho lớp cứng tương ứng.
Chiến lược branching trên biến trong mô hình Column Generation cho phép chúng ta chọn thời khóa biểu j cho lớp c khi đặt c j 1 Điều này có nghĩa là không cần sinh thêm thời khóa biểu cho lớp c Nếu lớp c có chung phân tiết với các lớp khác, các thời khóa biểu được sinh ra cho các lớp đó cần phải tuân thủ ràng buộc với thời khóa biểu của lớp c.
Do chưa có đánh giá rõ ràng về hiệu quả của từng chiến lược branching, nghiên cứu này thực hiện cả hai chiến lược để tạo ra cơ sở so sánh.
Bài toán pricing yêu cầu xác định các thời khóa biểu cho mỗi lớp với chi phí giảm (reduced cost) âm Thông thường, bài toán này được diễn đạt dưới dạng tối ưu tổ hợp.
Do số lượng thời khóa biểu khả thi của mỗi lớp rất lớn, bài toán pricing trở thành một bài toán NP-hard Mục tiêu của giải thuật pricing là nhanh chóng tìm kiếm các thời khóa biểu khả thi cho bài toán master Trong trường hợp bài toán pricing không có nghiệm, giải thuật sẽ không tạo ra thời khóa biểu nào Vì vậy, quá trình sinh ra các thời khóa biểu khả thi được chia thành hai giai đoạn.
Giai đoạn đầu: bài toán cần rất nhiều column để tìm kiếm nghiệm Dùng giải thuật local search để tìm kiếm nhanh thời khóa biểu khả thi
Trong giai đoạn sau của bài toán nới lỏng, khi nghiệm hiện tại gần đạt giá trị tối ưu, số lượng cột sinh ra sẽ rất ít Việc áp dụng giải thuật branch-and-bound giúp chứng minh rằng bài toán nới lỏng đã tìm ra nghiệm tối ưu.
Mỗi thời khóa biểu lớp học bao gồm nhiều phân tiết, trong đó mỗi phân tiết được xác định bởi một cặp (tiết, phòng) Các phân tiết này được phân bổ vào các timeslot một cách hợp lý, đảm bảo rằng không có sự chồng chéo giữa chúng.
Dưới đây là giải thuật local search và giải thuật branch-and-bound cho bài toán pricing.
Mục đích của giải thuật local search là tạo ra các thời khóa biểu khả thi có reduced cost âm.
Giải thuật sẽ bắt đầu từ một thời khóa biểu khả thi ban đầu và lần lượt gán giá trị cho các phân tiết, nhằm tạo ra các thời khóa biểu khả thi với chi phí giảm dần Để hiện thực hóa, tôi đã chọn giải thuật local search, cụ thể là giải thuật hill-climbing.
Dưới đây là chi tiết của giải thuật: procedure local_search(M, D, S, alpha, maxIterations)
D: set of domains of meetings
S: initial solution alpha: dual multipliers maxIterations: maximum iterations begin currentIterations = 0 reduced_cost = f (S ) while(currentIterations < maxIterations and reduced_cost is not descendent) for each meeting m M , select an pair ( p , r ) D m if f ( S { m }) reduced _ cos t then
_ t f S m reduced currentIterations += 1 end if end for end while if reduced_cost < alpha return 1 else return 0 end if end
Hình 4.2: Giải thuật local search cho bài toán pricing
Giải thuật tìm kiếm cục bộ chọn một phân tiết ở mỗi bước, sau đó tìm cặp (tiết, phòng) để giảm thiểu chi phí Quá trình này tiếp tục cho đến khi không còn giảm được chi phí nữa hoặc đạt đến giới hạn số bước lặp cho phép.
Giải thuật branch-and-bound
HIỆN THỰC VÀ THỬ NGHIỆM
Hiện thực bài toán sắp xếp thời khóa biểu môn học
5.1.1 BCP Framework Để hiện thực bài toán sắp xếp thời khóa biểu môn học, cần phải xây dựng một ch ương trình hiện thực giải thuật branch-and-price Hiện tại, có nhiều framework hiện thực giải thuật branch-and-price như: Abacus [34], BCP [30] và Symphony [31].Trong đề tài này, tôi chọn BCP.
BCP (Branch-Cut-Price) là một phương pháp do tổ chức COIN-OR phát triển từ năm 2001, chuyên cung cấp các sản phẩm mã nguồn mở cho lĩnh vực vận trù học COIN-OR đóng vai trò quan trọng trong việc thúc đẩy sự phát triển của các công cụ tối ưu hóa trong ngành này.
BCP là một framework phát triển cho các giải thuật như branch-and-cut và tabu search, hiện đang ở phiên bản 1.2, trong khi phiên bản 1.1.3 được coi là ổn định nhất Phần mềm này chỉ hoạt động trên hệ điều hành Linux và hỗ trợ giải thuật branch-and-price cùng với branch-and-cut BCP có khả năng tích hợp nhiều solver để giải LP relaxation, bao gồm CLP, CPLEX, XPRESS-MP, và Vol Đặc biệt, BCP được thiết kế để chạy trên hệ thống song song, tối ưu hóa hiệu suất tính toán.
BCP là framework hỗ trợ hướng đối tượng hoàn toàn, bao gồm các modul chính sau đây:
Modul này đảm nhận vai trò khởi tạo bài toán, thực hiện giao tiếp I/O, điều khiển quá trình thực thi của các modul khác, quản lý cây tìm kiếm và phân phối các bài toán con cho các modul khác.
Modul Lập trình Tuyến tính thực hiện các chức năng chính của thuật toán, bao gồm bounding và branching Hiệu quả của thuật toán phụ thuộc vào tính thực tiễn của modul này.
Modul này có chức năng duy nhất, đó là tạo ra các biến cho mô hình master.
Modul này cũng có chức năng tương tự nhu Variable Generator Modul, nh ưng nó chỉ sinh ra các ràng buộc cho mô hình.
Dưới đây là sơ các khối chức năng
Send tree node to LP Module
Receive child node from LP Module
Receive child node from TM
Send primal and dual multipliers to Cut and
Send child node to Tree Manager Module
Variable Generator Receive dual multipliers from LP Module
Send variables to LP Module
Cut Generator Receive primal multipliers from LP Module
Send cut to LP Module
Hình 5.1: Sơ đồ khối của BCP framework
5.1.2 Tổ chức dữ liệu của b ài toán Để xây dựng thành công chương trình sắp xếp thời khóa biểu môn học, cần phải xây dựng các thành phần dữ liệu cơ bản của bài toán, với mục tiêu dễ dàng thực hiện được ý đồ của giải thuật vào chương trình Mô hình dữ liệu của bài toán sắp xếp thời khóa biểu môn học được trình bày cụ thể dưới đây:
Môn học là dữ liệu chứa thông tin quan trọng về một môn học, bao gồm mã số (course_id), tên môn học (course_name) và tổng số tiết (duration).
Lớp cứng (StudentClass) là dữ liệu lưu trữ thông tin về một lớp học, bao gồm nhóm sinh viên có chung đặc điểm Mỗi lớp được tổ chức theo khoa để thuận tiện trong việc theo dõi Thông tin cơ bản của lớp bao gồm mã số lớp (class_id), tên lớp (class_name), mã khoa (department_id) và số lượng sinh viên (student_num).
Hình 5.2: Dữ liệu bài toán theo mô hình UML
Phòng học là dữ liệu cơ bản trong công tác giáo vụ, đóng vai trò quan trọng trong việc sắp xếp thời khóa biểu môn học Mỗi phòng học sẽ được sử dụng cho các môn học và môn thi khác nhau tại từng thời điểm Thông tin về phòng học bao gồm mã số phòng (room_id), mã số tòa nhà (building_id), sức chứa (capacity) và loại phòng học (room_type).
Loại phòng học (RoomType) là phân loại các phòng học dựa trên chức năng cụ thể, bao gồm thông tin về mã số (type_id) và số lượng phòng học (count).
Lớp môn học là dữ liệu mô tả việc chia nhóm sinh viên theo từng môn học, bao gồm các thông tin như mã số môn học (course_id), mã số nhóm (group_id), tên nhóm (group_name) và tổng số sinh viên trong nhóm (student_num).
Phân tiết (Meeting) là khái niệm chỉ việc mỗi lớp môn học có thể học một hoặc nhiều cụm tiết trong tuần cho một môn học cụ thể Mỗi cụm tiết học này được gọi là phân tiết, bao gồm các thông tin quan trọng như mã số phân tiết (meeting_id), mã số môn học (course_id), mã số lớp môn học (group_id), số tiết học (duration) và loại phòng học phù hợp (room_type) Việc sắp xếp phân tiết chỉ được thực hiện trong các phòng học có loại phòng phù hợp với yêu cầu.
Khoa (Department) là dữ liệu thiết yếu trong công tác giáo vụ, bao gồm thông tin về các lớp học và các thông tin quan trọng như mã số khoa (department_id), tên khoa (department_name) và mã số tòa nhà (building_id).
Tòa nhà là thông tin quan trọng để sắp xếp các phòng học trong thời khóa biểu lớp Mỗi tòa nhà có nhiều phòng học khác nhau và bao gồm các thông tin như mã số tòa nhà (building_id), tên tòa nhà (building_name) và vị trí (x, y).
Trong công tác quản lý giáo vụ tại trường, tồn tại nhiều dữ liệu và mối liên hệ phức tạp Bài viết này chỉ tập trung vào việc trình bày những dữ liệu cơ bản của giáo vụ, nhằm tối ưu hóa việc sắp xếp thời khóa biểu cho các môn học.
Thử nghiệm
Chương trình sắp xếp thời khóa biểu môn học cho trường Đại học Bách Khoa Tp HCM được phát triển bằng ngôn ngữ C++ trên hệ điều hành Open SuSE Linux 11 Chương trình hoạt động trên máy tính với cấu hình bộ xử lý Intel Core Duo 2GHz, bộ nhớ RAM 2GB và ổ cứng 120GB Đề tài áp dụng giải thuật đơn hình để giải quyết bài toán quy hoạch tuyến tính.
5.2.1 Thống kế số liệu thử nghiệm ch ương trình sắp xếp thời khóa biểu môn học
3 Tổng số lớp môn học 1600
5 Tổng số phòng học bình thường 98
6 Tổng sô phòng học đặc biệt 114
8 Số tiết trong một ngày 12
Bảng5.1: Bảng các số liệu thử nghiệm 5.2.2 Kết quả thử nghiệm
Thử nghiệm được thực hiện trên dữ liệu thực của Đại học Bách Khoa TP.HCM, với số lượng lớp cứng lớn dẫn đến nhiều ràng buộc trong mô hình, làm tăng thời gian chạy thuật toán đơn hình Vì lý do này, đề tài chỉ tiến hành thử nghiệm trên một phần nhỏ dữ liệu với số lượng lớp cứng làm thông số thử nghiệm Hiện tại, chương trình đã tìm ra nghiệm cho các trường hợp 5 lớp, 10 lớp và 15 lớp.
Các kết quả cần thống kê được trình bàyở bảng dưới đây.
2 Số lượng biến trong mô hình gốc
3 Số lượng column trung bình
4 Tổng số column sinh ra
6 Thời gian chạy thủ tục pricing
7 Thời gian chạy giải thuật simplex
8 Thời điểm gặp nghiệm đầu tiên
9 Giá trị của nghiệm đầu tiên
Bảng 5.2: Bảng các kết quả cần thống kê
Thử nghiệm được tiến hành cho hai trường hợp: sử dụng heuristic (greedy search) để tìm lời giải khả thi và trường hợp không sử dụng heuristic
STT Kết quả Không dùng heuristic Dùng heuristic
2 Số lượng biến trong mô hình gốc 139860 139860
3 Số lượng column trung bình 32 32
4 Tổng số column sinh ra 29 27
6 Thời gian chạy thủ tục pricing 1.12 0.05
7 Thời gian chạy giải thuật simplex 0.08 0.07
8 Thời điểm gặp nghiệm đầu tiên 1.3 0.28
9 Giá trị của nghiệm đầu tiên 33.00 33.00
Bảng 5.3: Thử nghiệm cho 5 lớp
STT Kết quả Không dùng heuristic Dùng heuristic
2 Số lượng biến trong mô hình gốc 34 9440 349440
3 Số lượng column trung bình 269 98
4 Tổng số column sinh ra 651 185
6 Thời gian chạy thủ tục pricing 74.15 6.81
7 Thời gian chạy giải thuật simplex 10.42 1.05
8 Thời điểm gặp nghiệm đầu tiên 58.24 1.33
9 Giá trị của nghiệm đầu tiên 58.00 58.00
Bảng5.4: Thử nghiệm cho 10 lớp
STT Kết quả Không dùng heuristic Dùng heuristic
2 Số lượng biến trong mô hình gốc 324840 324840
3 Số lượng column trung bình 464 222
4 Tổng số column sinh ra 707 321
6 Thời gian chạy thủ tục pricing 42.56 15.88
7 Thời gian chạy giải thuật simplex 46.62 5.71
8 Thời điểm gặp nghiệm đầu tiên 124.52 24.18
9 Giá trị của nghiệm đầu tiên 113.00 113.00
Hình 5.3: Thử nghiệm cho 15 lớp
Dựa trên các số liệu từ bảng, khi thử nghiệm với 5 lớp, sự chênh lệch kết quả giữa hai trường hợp không đáng kể Đối với phương pháp heuristic, bài toán cho ra lời giải trong cả ba trường hợp Khi thử nghiệm với 15 lớp, thời gian chạy và thời điểm tìm ra nghiệm đầu tiên của phương pháp heuristic giảm rõ rệt, cùng với số lượng node trong cây tìm kiếm cũng giảm đáng kể so với trường hợp không sử dụng heuristic Điều này cho thấy việc nhanh chóng xác định upper bound đã giúp giảm đáng kể không gian tìm kiếm của thuật toán.
Phương pháp Column Generation có ưu điểm nổi bật là số lượng column duy trì trong quá trình chạy chương trình rất nhỏ so với số biến trong mô hình gốc, dẫn đến thời gian chạy của thuật toán simplex chiếm tỷ lệ rất nhỏ trong tổng thời gian Tuy nhiên, thời gian chạy của thuật toán tạo column lại chiếm tỷ lệ lớn, cho thấy đây là một đặc điểm chính của phương pháp này Do đó, cải thiện tốc độ của thuật toán pricing là một yêu cầu quan trọng trong thực tế.
Các thử nghiệm này được thực hiện với thuật toán branch-and-bound, nhưng chỉ tìm kiếm trong một số vùng không gian để hạn chế thời gian chạy, do thời gian chạy của thuật toán này rất kém trong trường hợp xấu nhất Hệ quả là, thuật toán có thể không tìm ra được cột thích hợp cho bài toán, dẫn đến việc bỏ sót một số nút trong cây tìm kiếm Điều này khiến thuật toán không thể chứng minh được nghiệm tối ưu.
Mô hình gốc có số lượng ràng buộc rất lớn, nhưng khi áp dụng phương pháp Column Generation, số lượng ràng buộc có thể được giảm bớt dựa trên tập hợp các column hiện tại Khi kích thước bài toán tăng, số lượng column cũng tăng theo, điều này có thể ảnh hưởng đáng kể đến hiệu suất của giải thuật simplex.