Các Kết Quả Đạt Được Từ thuật toán trên ta xác định được khối lượng từng vật phù hợp để bỏ vào túi với dung lượng tối đa cho sẵn trên nhiều trường hợp khác nhau.. Những trường hợp khác
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC KINH TẾ TP HỒ CHÍ MINH TRƯỜNG CÔNG NGHỆ VÀ THIẾT KẾ
Trang 2MỤC LỤC
MỤC LỤC 1
CHƯƠNG 1 TỔNG QUAN 2
1.1 Giới Thiệu Về Bài Toán Cái Túi 2
1.2 Phát Biểu Bài Toán 2
1.3 Một Số Hướng Tiếp Cận Giải Quyết Bài Toán 3
CHƯƠNG 2 GIẢI THUẬT DI TRUYỀN 4
2.1 Giới Thiệu Về Giải Thuật Di Truyền 4
2.2 Ứng Dụng Giải Thuật Di Truyền Cho Bài Toán Cái Túi 6
CHƯƠNG 3 CÁC KẾT QUẢ THỰC NGHIỆM 14
3.1 Các Tình Huống 14
CHƯƠNG 4 KẾT LUẬN 18
4.1 Các Kết Quả Đạt Được 18
4.2 Những Hạn Chế và Hướng Phát Triển 18
TÀI LIỆU THAM KHẢO 20
PHỤ LỤC 21
Trang 3CHƯƠNG 1 TỔNG QUAN
1.1 Giới Thiệu Về Bài Toán Cái Túi
Bài toán xếp ba lô, còn được gọi là bài toán cái túi, là một bài toán tối ưu hóa tổ hợp, xuất phát từ vấn đề chọn lựa những mục vật phẩm quan trọng nhất để đặt vào một cái túi với giới hạn về khối lượng, nhằm mang theo trong một chuyến đi Bài toán này không chỉ có ý nghĩa trong lĩnh vực du lịch mà còn xuất hiện trong nhiều lĩnh vực khác như kinh doanh, toán tổ hợp, lý thuyết độ phức tạp tính toán, mật mã học và toán ứng dụng
Có rất nhiều dạng khác nhau của bài toán cái túi mà tôi đã giới thiệu tới các bạn ở những chuyên đề trước Những dạng tiêu biểu của bài toán này có thể kể đến là:
Bài toán Knapsack với các giá trị số thực: Trọng lượng và giá trị của các món đồ là
số thực Bài toán này chỉ có thể giải quyết bằng phương pháp Quay lui (hoặc cải tiến bằng Nhánh cận)
Bài toán Knapsack cho phép cắt nhỏ đồ vật (Fractional Knapsack): Các đồ vật được phép cắt ra và lấy một phần Bài toán này có thể giải quyết bằng phương pháp Tham lam
Bài toán Knapsack 0−1: Các vật chỉ có thể chọn hoặc không chọn, ngoài ra giá trị
và trọng lượng của các vật đều là số nguyên
1.2 Phát Biểu Bài Toán
Bài toán Knapsack 0−1 :
Cho n đồ vật khác nhau, đồ vật thứ i có trọng lượng 𝑤𝑖và giá trị 𝑣𝑖 Bạn mang theo một chiếc túi có tải trọng tối đa là 𝑊𝑚𝑎𝑥, một vật chỉ có thể chọn hoặc không, nhiệm vụ của bạn
là chọn ra các đồ vật để cho vào túi sao cho tổng giá trị của các đồ vật lấy được là lớn nhất
có thể?
Maximize ∑𝑛𝑖=0⬚ 𝑣𝑖
Subject to the constraints ∑𝑛𝑖=0⬚ 𝑤𝑖 ≤ 𝑊𝑚𝑎𝑥
Giải bài toán 0/1 knapsack
Trang 41.3 Một Số Hướng Tiếp Cận Giải Quyết Bài Toán
Dưới đây là một số hướng tiếp cận phổ biến cho bài toán cái túi:
1 Quy hoạch động (Dynamic Programming) :
- Một trong những phương pháp hiệu quả nhất để giải bài toán cái túi
- Cần xây dựng một bảng (thường là ma trận) để lưu trữ giá trị tối ưu cho mọi tổ hợp có thể của các đối tượng và trọng lượng
- Dùng phương pháp quy hoạch động để điền các giá trị vào bảng dựa trên các quy tắc cập nhật phù hợp
2 Thuật toán tham lam (Greedy Algorithm) :
- Thường được sử dụng khi bài toán không có ràng buộc về trọng lượng
- Đơn giản, nhanh chóng và dễ triển khai
- Tuy nhiên, không đảm bảo lời giải tối ưu
3 Tìm kiếm theo chiều sâu (Depth-First Search) hoặc tìm kiếm theo chiều rộng First Search):
(Breadth Dùng để tìm kiếm qua tất cả các tổ hợp có thể của các đối tượng
- Không hiệu quả với bài toán có số lượng lớn đối tượng hoặc trọng lượng lớn
Trang 5CHƯƠNG 2 GIẢI THUẬT DI TRUYỀN
2.1 Giới Thiệu Về Giải Thuật Di Truyền
Thuật giải di truyền cũng như các thuật toán tiến hóa nói chung được hình thành dựa trên quan niệm quá trình tiến hóa tự nhiên là quá trình hoàn hảo nhất, hợp lý nhất và
tự nó đã mang tính tối ưu
Tiến hóa tự nhiên được duy trì nhờ hai quá trình cơ bản: sinh sản và chọn lọc tự nhiên Xuyên suốt quá trình tiến hóa tự nhiên, các thế hệ mới luôn được sinh ra để bổ sung thay thế thế hệ cũ Cá thể nào phát triển hơn, thích ứng hơn với môi trường sẽ tồn tại
Về mặt hình thức, thuật giải di truyền được định nghĩa là một bộ 7
GA=(I, , , s, t, , )
Trong đó :
(a) I = BI ; không gian quần thể
(b) : I → R+ ; ký hiệu hàm thích nghi (fitness) (độ thích nghi của một cá thể) (c) ; tập các phép toán di truyền (lai, đột biến, tái sinh)
(d) s :I+ → I ký hiệu phép chọn, giữ lại cá thể từ + cá thể ban đầu
(e) t : I → {true, false} tiêu chuẩn dừng
(f) ; số cá thể trong thế hệ cha mẹ
(g) ; số cá thể trong thế hệ con cái
2.1.1 Các phương thức tiến hóa của thuật giải di truyền
Phép lai
Chọn ngẫu nhiên hai hay nhiều cá thể bất kỳ trong quân thể Giả sử nhiễm sắc thể
của cha mẹ có m gen
Tạo một số ngẫu nhiên trong khoảng từ l đến m – l (điểm lai) Điểm lai chia các chuỗi cha mẹ dài m thành hai nhóm chuỗi con dài m 1 và m 2 Hai chuỗi nhiễm sắc thể con
mới sẽ là m 11 + m 22 và m 21 + m 12
Phép đột biến
Chọn ngẫu nhiên một cá thể bất kỳ cha mẹ trong quần thể
Tạo một số ngẫu nhiên k trong khoảng từ l đến m, l ≤ k ≤ m
Trang 6Thay đổi gen thứ k và trả cá thể này về quần thể để tham gia quá trình tiến hóa tiếp theo
Tạo một số ngẫu nhiên F trong đoạn từ 0 đến F m
Chọn cá thể thứ k đầu tiên thỏa F ≥ F tk đưa vào quần thể thế hệ mới
Phép chọn
Sắp xếp quần thể theo độ thích nghi giảm dần
Loại bỏ các cá thể cuối dãy để chỉ giữ lại n cá thể tốt nhất Ở đây, ta giả sử quần thể
Sắp xếp P(t) theo thứ tự (a i (t)) giảm dần;
Loại cá thể cuối cùng (giữ lại cá thể tốt nhất);
End;
Trang 72.2 Ứng Dụng Giải Thuật Di Truyền Cho Bài Toán Cái Túi
Khởi tạo quần thể (Population Initialization)
Mỗi cá thể (individual) trong quần thể là một chuỗi nhị phân (binary string) đại diện cho việc chọn hoặc không chọn các vật phẩm
Đánh giá hàm thích nghi (Fitness Function)
Hàm thích nghi đánh giá "chất lượng" của mỗi cá thể dựa trên tổng giá trị của các vật phẩm được chọn, và phạt (penalty) nếu tổng trọng lượng vượt quá dung lượng túi
Công thức hàm thích nghi có thể là: fitness=value−penalty×max(0,total weight−W)
Lựa chọn (Tournament Selection)
Lựa chọn các cá thể để tạo thế hệ tiếp theo dựa trên hàm thích nghi Các phương pháp lựa chọn phổ biến bao gồm Roulette Wheel Selection, Tournament Selection
Phép lai (Crossover)
Kết hợp hai cá thể (parents) để tạo ra cá thể con (offspring) Ví dụ, sử dụng point crossover hoặc two-point crossover
Trang 8one-Ví dụ với one-point crossover: Nếu hai cá thể cha mẹ là 10101 và 11000, có thể tạo ra các cá thể con như 10100 và 11001
Trang 9Tiến hóa (Evolution)
Quá trình này được lặp đi lặp lại nhiều lần cho đến khi đạt được tiêu chí dừng (số thế hệ tối đa hoặc đạt giá trị hàm thích nghi mong muốn)
Trang 10one_point_crossover
swap_mutate
one_point_crossover
inversion_mutate
Trang 11two_points_crossover
bit_flip
Trang 12two_points_crossover
swap_mutate
two_points_crossover
inversion_mutate
Trang 13uniform_crossover
bit_flip
Trang 14uniform_crossover
swap_mutate
uniform_crossover
inversion_mutate
Trang 15CHƯƠNG 3 CÁC KẾT QUẢ THỰC NGHIỆM
Trang 17Combination ValueEfficiency Generation Time Taken one_point_crossover
One-point crossover + Swap mutation và Uniform crossover + Swap mutation có
hiệu suất vượt trội, luôn đạt được giải pháp tối ưu (ValueEfficiency = 1.0) trong tất cả các lần chạy và thường hội tụ nhanh chóng (số Generation thấp)
Two-points crossover và One-point crossover + Bit flip mutation cho kết quả khá
tốt, thường đạt được giải pháp gần tối ưu trong hầu hết các lần chạy
Inversion mutation thường dẫn đến hiệu suất kém nhất, với nhiều trường hợp không
tìm được giải pháp khả thi (ValueEfficiency = 0.0) hoặc hội tụ rất chậm
Nhận xét chi tiết:
One-point crossover + Bit flip mutation: Tìm được giải pháp tối ưu trong 3/5 lần
chạy, nhưng có thể mất nhiều thế hệ hơn để hội tụ
One-point crossover + Swap mutation: Luôn tìm được giải pháp tối ưu và thường hội
tụ rất nhanh
One-point crossover + Inversion mutation: Hiệu suất kém nhất trong các phép lai
one-point, thường không tìm được giải pháp khả thi
Two-points crossover + Bit flip mutation: Tương tự one-point + bit flip, thường đạt
giải pháp gần tối ưu
Two-points crossover + Swap mutation: Tương tự one-point + swap mutation, luôn
tìm được giải pháp tối ưu và hội tụ nhanh
Trang 18Two-points crossover + Inversion mutation: Hiệu suất kém, đôi khi không tìm được
giải pháp khả thi
Uniform crossover + Bit flip mutation: Thường đạt giải pháp tối ưu, nhưng có thể
mất nhiều thế hệ để hội tụ
Uniform crossover + Swap mutation: Luôn tìm được giải pháp tối ưu và thường hội
tụ rất nhanh
Uniform crossover + Inversion mutation: Hiệu suất kém, thường không tìm được
giải pháp khả thi
Kết luận:
Dựa trên kết quả 5 lần chạy, có thể kết luận rằng kết hợp One-point crossover + Swap
mutation hoặc Uniform crossover + Swap mutation là lựa chọn tốt nhất cho bài toán
Knapsack này, do hiệu suất cao và khả năng hội tụ nhanh Tuy nhiên, kết quả này chỉ mang tính tương đối và có thể khác nhau đối với các bài toán khác
Trang 19CHƯƠNG 4 KẾT LUẬN
4.1 Các Kết Quả Đạt Được
Từ thuật toán trên ta xác định được khối lượng từng vật phù hợp để bỏ vào túi với dung lượng tối đa cho sẵn trên nhiều trường hợp khác nhau Những trường hợp khác nhau bao gồm các vật có khối lượng cũng như giá trị khác nhau cho vào túi trong những trường hợp khác nhau
Từ đó xác định được các giải pháp tối ưu hoặc gần tối ưu, khi mở rộng số lượng quần thể và tăng số lượng thế hệ thì không gian giải pháp được mở rộng hơn Một quần thể lớn và nhiều thế hệ thì sẽ tạo ra nhiều gen và biểu hiện trong quần thể
Từ độ fitness có thể xác định đâu là cá thể tốt nhất trong quần thể và đánh giá được chất lượng của giải pháp
4.2 Những Hạn Chế và Hướng Phát Triển
Hạn chế về kích thước và số lượng cá thể: Khi kích thước và số lượng cá thể tăng lên, thời gian tính toán và bộ nhớ yêu cầu cũng tăng lên đáng kể Điều này có thể làm cho việc tìm kiếm không hiệu quả và yêu cầu nguồn tài nguyên cao Để giải quyết vấn đề này,
có thể áp dụng các kỹ thuật tối ưu hóa và thuật toán di truyền hiệu quả hơn
Hạn chế về việc xác định độ thích nghi: Một trong những yếu tố quan trọng trong bài toán này là xác định độ thích nghi của từng cá thể Điều này có thể làm cho việc tính toán phức tạp và không chính xác Để cải thiện hiệu suất và độ chính xác, có thể áp dụng các phương pháp xác định độ thích nghi hiệu quả và đơn giản hóa tính toán
Hạn chế về việc xác định ràng buộc: Trong bài toán cái túi, có rất nhiều ràng buộc cần được xác định, bao gồm cả trọng lượng tối đa của túi và trọng lượng của từng mục Việc xác định ràng buộc này có thể phức tạp và dẫn đến kết quả không chính xác Để giải quyết vấn đề này, có thể sử dụng các phương pháp xác định ràng buộc hiệu quả và tối ưu hóa quy trình xác định ràng buộc
Hạn chế về việc tìm kiếm toàn diện: Giải thuật di truyền GA có thể không đảm bảo tìm ra lời giải tối ưu toàn diện cho bài toán cái túi Điều này có thể làm cho kết quả không chính xác và không thể đáp ứng được yêu cầu thực tế Để cải thiện hiệu suất tìm kiếm, có thể áp dụng các thuật toán tìm kiếm toàn diện khác như thuật toán tiến hóa đa nhiệm hoặc thuật toán tìm kiếm phân cấp
Hạn chế về tính đa dạng: Giải thuật di truyền GA có thể dễ dẫn đến việc mất đa dạng trong quần thể, điều này có thể khiến cho quy trình tìm kiếm trở nên hạn chế và không mang lại kết quả tối ưu Để giải quyết vấn đề này, có thể áp dụng các kỹ thuật đa dạng hóa quần thể như phép lai ghép đa điểm hoặc phép đột biến ngẫu nhiên
Tổng quan, bài toán cái túi bằng giải thuật di truyền GA có thể đạt được kết quả tốt
Trang 20phát triển các phương pháp xác định độ thích nghi, xác định ràng buộc và tìm kiếm toàn diện Đồng thời, cần đảm bảo tính đa dạng trong quần thể để mang lại kết quả tốt hơn Một số hướng phát triển cho bài toán cái túi bằng giải thuật di truyền GA bao gồm:
Tối ưu hóa các tham số của giải thuật: Giải thuật di truyền GA có nhiều tham số như kích thước quần thể, số vòng lặp, tỷ lệ lai ghép và tỷ lệ đột biến Tối ưu hóa các tham
số này có thể cải thiện hiệu suất và độ chính xác của giải thuật Có thể sử dụng phương pháp thử và sai hoặc các thuật toán tối ưu hóa khác như thuật toán di truyền đa nhiệm để tìm ra các giá trị tối ưu cho các tham số này
Áp dụng các biến thể của GA: Có nhiều biến thể của giải thuật di truyền GA như
GA đa mục tiêu, GA đa nhóm, GA đa tầng, GA đa mục đích Áp dụng các biến thể này có thể mở rộng khả năng giải quyết của giải thuật và đáp ứng được nhiều yêu cầu thực tế hơn
Kết hợp GA với các phương pháp tìm kiếm khác: Có thể kết hợp giải thuật di truyền
GA với các phương pháp tìm kiếm khác như tìm kiếm cục bộ, tìm kiếm ngẫu nhiên, tìm kiếm hướng đạo Kết hợp các phương pháp này có thể tăng cường tính đa dạng và khả năng tìm kiếm của giải thuật
Sử dụng các phương pháp khác để xác định độ thích nghi: Ngoài việc sử dụng hàm mục tiêu, có thể áp dụng các phương pháp khác để xác định độ thích nghi của từng cá thể
Ví dụ, có thể sử dụng mạng nơ-ron nhân tạo để xác định độ thích nghi dựa trên các đặc trưng của cá thể
Tối ưu hóa quy trình đột biến và lai ghép: Quy trình đột biến và lai ghép có thể được tối ưu hóa để đảm bảo tính đa dạng và tìm kiếm hiệu quả Có thể sử dụng các phương pháp như đột biến đa điểm, lai ghép đa điểm hoặc các phương pháp lai ghép và đột biến khác để cải thiện quy trình này
Trang 21TÀI LIỆU THAM KHẢO
1-RQqKLxJzK7z
1.https://viblo.asia/p/thuat-toan-di-truyen-ung-dung-giai-mot-so-bai-toan-kinh-dien-phan-2 Artificial Intelligence Applications and Innovations - 12th IFIP WG 11.https://viblo.asia/p/thuat-toan-di-truyen-ung-dung-giai-mot-so-bai-toan-kinh-dien-phan-2.5 International Conference and Workshops, AIAI 2016 Thessaloniki, Greece, September 16–18, 2016 Proceedings
3 (PDF) Comparative Performance Analysis of Genetic Algorithm Variants on Solving 0/1 Knapsack Problem (researchgate.net)
Trang 22PHỤ LỤC
Mã nguồn github: GA/blob/main/Baitoancaitui-GA.ipynb
https://github.com/ngocthach041104/Giaithuaditruyen-Phân công nhiệm vụ
Thành Đạt: Viết báo cáo phần 3,4, code từ phần mutation, giải bài toán bằng giải thuật di truyền
Ngọc Thạch: Viết báo cáo phần 1,2, code form, code hàm fitness, selection và 3 trường hợp crossover