Tìm hiều và ứng dụng của thuật giải di truyền trong bài toán xếp ba lô

Những vấn đề giải quyết được trong bài tập lớn: - Hiểu về giải thuật di truyền. - Tìm hiểu về các bước để giải quyết một bài toán bằng giải thuật di truyền. - Ứng dụng của giải thuật di truyền trong từng bài toán. - Bài toán ba lô và hướng giải quyết bài toán ba lô dạng 0-1. - Giải một bài toán ba lô cụ thể theo giải thuật di truyền. Những vấn đề chưa giải quyết được: - Tài liệu tham khảo ít nên kiến thức về giải thuật di truyền và bài toán ba lô còn hạn chế - Trong bước chọn lọc còn khá nhiều phương pháp chọn lọc nhóm chưa lấy ví dụ được

docx28 trang | Chia sẻ: lylyngoc | Lượt xem: 4454 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Tìm hiều và ứng dụng của thuật giải di truyền trong bài toán xếp ba lô, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MỤC LỤC LỜI NÓI ĐẦU Với khả năng hiện nay, máy tính đã giúp giải được rất nhiều bài toán khó mà trước đây thường bó tay. Mặc dù vậy vẫn có một số lớn các bài toán thú vị mà chưa có giải thuật hợp lý để giải chúng. Trong đó các bài toán tối ưu là những bài toán thường gặp trong thực tiễn. Bài toán tối ưu hóa tổ hợp có thể xem như bài toán tìm kiếm giải pháp tốt nhất trong không gian vô cùng lớn các giải pháp. Khi không gian tìm kiếm nhỏ, những phương pháp cổ điển như trên cũng đủ thích hợp, nhưng khi không gian tìm kiếm lớn phải dùng kỹ thuật trí tuệ nhân tạo đặc biệt. Thuật giải di truyền (GA) là một trong những kỹ thuật đó. Giải thuật di truyền là một kỹ thuật của khoa học máy tính nhằm tìm kiếm giải pháp thích hợp cho các bài toán tối ưu tổ hợp (combinatorial optimization). Giải thuật di truyền là một phân ngành của giải thuật tiến hóa vận dụng các nguyên lý của tiến hóa như di truyền, đột biến, chọn lọc tự nhiên, và trao đổi chéo. Ngày nay, giải thuật di truyền được dùng phổ biến trong một số ngành như tin sinh học, khoa học máy tính, trí tuệ nhân tạo, tài chính và một số ngành khác. Bài toán xếp ba lô (một số sách ghi là bài toán cái túi) là một bài toán tối ưu hóa tổ hợp. Bài toán được đặt tên từ vấn đề chọn những gì quan trọng có thể nhét vừa vào trong một cái túi (với giới hạn khối lượng) để mang theo trong một chuyến đi. Các bài toán tương tự thường xuất hiện trong 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. Chính vì ứng dụng lớn của giải thuật di truyền( GA) và bài toán xếp ba lô, với sự giúp đỡ của thầy Trần Thanh Hùng giáo viên bộ môn Giải thuật di truyền, chúng em tiến hành đi tìm hiểu về giải thuật di truyền và ứng dụng của giải thuật di truyền trong bài toán xếp ba lô với đề tài “Tìm hiều và ứng dụng của thuật giải di truyền trong bài toán xếp ba lô”. Sinh viên thực hiện: Trần Quang Hợp. MSSV: 0441060068. Lớp: KHMT1-K4-Đại học công nghiệp Hà Nội(Haui). Email: hauiquanghop@gmail.com Môn Giải thuật di truyền và ứng dụng. CHƯƠNG I - TỔNG QUAN VỀ GIẢI THUẬT DI TRUYỀN Khái niệm Giải thuật di truyền là một kỹ thuật của khoa học máy tính nhằm tìm kiếm giải pháp thích hợp cho các bài toán tối ưu tổ hợp (combinatorial optimization). Giải thuật di truyền là một phân ngành của giải thuật tiến hóa vận dụng các nguyên lý của tiến hóa như di truyền, đột biến, chọn lọc tự nhiên, và trao đổi chéo. Ngày nay, giải thuật di truyền được dùng phổ biến trong một số ngành như tin sinh học, khoa học máy tính, trí tuệ nhân tạo, tài chính và một số ngành khác. Tư tưởng của thuật toán di truyền là mô phỏng các hiện tượng tự nhiên: Kế thừa và đấu tranh sinh tồn để cái tiến lời giải và khảo sát không gian lời giải khái niệm kế thừa và đấu tranh sinh tồn được giải thích qua thí dụ về sự tiến hóa của một quần thể thỏ như sau: Có một quần thể thỏ, trong đó có một số con nhanh nhẹn và thông minh hơn những con khác. Những chú thỏ nhanh nhẹn và thông minh có xác suất bị chồn cáo ăn thịt nhỏ hơn, do đó cũng tồn tại dể làm những gì tốt nhất có thể : Tạo thêm nhiều thỏ tốt. Dĩ nhiên, một số thỏ chậm chạp đần độn cũng sống sót vì may mắn. Quần thể những chú thỏ còn sống sót sẽ bắt đầu sinh sản. Việc sinh sản này sẽ tạo ra một hỗn hợp tốt về "nguyên liệu di truyền thỏ". Một số thỏ chậm chạp có con với những con thỏ nhanh, một số nhanh nhẹn có con với thỏ nhanh nhẹn, một số thông minh với thỏ đần độn… Và trên tất cả thiên nhiên lại ném vào một con thỏ "hoang dã" bằng cách làm đột biến nguyên liệu di truyền thỏ. Những chú thỏ con do kết quả này sẽ nhanh hơn và thông minh hơn những con thỏ trong quần thể gốc vì có nhiều bố mẹ nhanh nhẹn và thông minh hơn đã thoát chết khỏi chồn cáo. Khi tìm kiếm lời giải tối ưu , thuật toán di truyền cũng thực hiện các bước tương ứng với câu chuyện đấu tranh sinh tồn của loài thỏ. Thuật toán di truyền sử dụng các thuật ngữ vay mượn của di truyền học. Ta có thể nói về các cá thể (hay kiểu gen, cấu trúc) trong một quần thể, những cá thể này cũng còn được gọi là chuỗi hay các nhiễm sắc thể. Mỗi kiểu gen (ta gọi là một nhiễm sắc thể) sẽ biểu diễn một lời giải của bài toán đang giải (ý tưởng của một nhiễm sắc thể cụ thể được người sử dụng xác định trước), một tiến trình tiến hóa được thực hiện trên một quần thể các nhiễm sắc thể tương ứng với một quá trình tìm kiếm lời giải trong không gian lời giải. Tìm kiếm đó cần cân đối hai mục tiêu: Khai thác những lời giải tốt nhất và khảo sát không gian tìm kiếm. Leo đồi là một ví dụ về chiến lược cho phép khai thác và cải thiện lời giải tốt nhất hiện hành nhưng leo đồi lại bỏ qua việc khảo sát không gian tìm kiếm. Ngược lại, tìm kiếm ngẫu nhiên là một ví dụ điển hình của chiến lược khảo sát không gian tìm kiếm mà không chú ý đến việc khai thác những vùng đầy hứa hẹn của không gian. Thuật toán di truyền (GA) là phương pháp tìm kiếm (độc lập miền) tạo được sự cân đối đáng kể giữa việc khai thác và khảo sát không gian tìm kiếm. Thực ra, GA thuộc lớp các thuật giải xuất sắc, nhưng lại rất khác những thuật giải ngẫu nhiên vì chúng kết hợp các phần tử tìm kiếm trực tiếp và ngẫu nhiên. Khác biệt quan trọng giữa tìm kiếm của GA và các phương pháp tìm kiếm khác là GA duy trì và xử lý một tập các lời giải (ta gọi là một quần thể) Theo đề xuất của giáo sư John Holland, một vấn đề bài toán đặt ra sẽ được mã hóa thành các chuỗi với chiều dài bit cố định. Nói một cách chính xác là các thông số của bài toán sẽ được chuyển đổi và biểu diễn lại dưới dạng các chuỗi nhị phân. Các thông số này có thể là các biến của một hàm hoặc hệ số của một biểu thức toán học. Người ta gọi các chuỗi bít này là mã genome ứng với mỗi cá thể, các genome đều có cùng chiều dài. Nói ngắn gọn, một lời giải sẽ được biểu diễn bằng một chuỗi bít, cũng như mỗi cá thể đều được quy định bằng gen của cá thể đó vậy. Như vậy, đối với thuật giải di truyền, một cá thể chỉ có một gen duy nhất và mọt gen cũng chỉ phục vụ cho một cá thể duy nhât. Do đó, gen chính là cá thể và cá thể chính là gen. Ban đầu, ta sẽ phát sinh một số lượng lớn, giới hạn các cá thể có gen ngẫu nhiên - nghĩa là phát sinh một tập hợp các chuỗi bit ngẫu nhiên. Tập các cá thể này được gọi là quần thể ban đầu (initial population). Sau đó, dựa trên một hàm nào đó, ta sẽ xác định được một giá trị có độ thích nghi - Fitness. Giá trị này, để đơn giản cho đơn giản chính là độ "tốt" của lời giải hay đọ cao trong tìm kiếm theo kiểu leo đồi. Vì phát sinh ngẫu nhiên nên độ "tốt" của lời giải hay tính thích nghi của cá thể trong quần thể ban đầu là không xác định. Để cải thiện tính thích nghi của quần thể người ta tìm cách tạo ra quần thể mới. Có hai cách thao tác thực hiện trên thế hệ hiện tại để tạo ra một thế hệ khác với độ thích nghi tốt hơn. Thao tác đầu tiên là sao chép nguyên mẫu một nhóm các cá thể tốt từ thế hệ trước rồi đưa sang thế hệ sau (selection). Thao tác này đảm bảo độ thích nghi của thế hệ sau luôn được giữ ở một mức độ hợp lý. Các cá thể được chọn thông thường là các cá thể có độ thích nghi cao nhất. Thao tác thứ hai là tạo ra cá thể mới bằng cách thực hiện các thao tác sinh sản trên một số cá thể được chọn từ thế hệ trước, thông thường cũng là những cá thể có độ thích cao. Có hai loại thao tác sinh sản: một là thao tác lai tạo (crossover), hai là đột biến (mutalion). Trong thao tác lai tạo, từ gen của hai cá thể được chọn trong thế hệ trước sẽ được phối hợp với nhau (theo một quy tác nào đó) để tạo thành hai gen mới. Thao tác chọn lọc và lai tạo giúp tạo ra thế hệ sau. Tuy nhiên, nhiều khi do thế hệ khởi tạo ban đầu có đặc tính chưa phong phú và chưa phù hợp nên các cá thể không rải đều được không gian của bài toán (tương tự như trường hợp leo đồi, các người leo đồi tập trung dồn vào một góc trên vùng đất). Từ đó, khó có thể tìm ra lời giải tối ưu cho bài toán. Thao tác đột biến sẽ giúp giải quyết được vấn đề này. Đó là sự biến đổi ngẫu nhiên một hoặc nhiều thành phần gen của một cá thể ở thế hệ trước tạo ra một cá thể hoàn toàn mới ở thế hệ sau. Nhưng thao tác này chỉ được phép xảy ra với tần suất rất thấp (thường dưới 0.01), vì thao tác này có thể gây xáo trộn và làm mất đi những cá thể chọn lọc và lai tạo có tính thích nghi cao, dẫn đến thuật toán không còn hiệu quả. Thế hệ mới được tạo ra lại được xử lý như thế hệ trước cho đến khi có một cá thể đạt được giải pháp mong muốn hoặc đạt đến thời gian giới hạn Hình 1. Sơ đồ giải thuật di truyền Cấu trúc của giải thuật di truyền như sau: T=0 Initialize P(t) evaluate structures in P(t) While not end do T= t + 1 Select C(t) from P(t - 1) Recombine structures in C(t) forming C'(t) Mutate structures in C' (t) forming C'' (t) Evaluate structures in C''(t) Replace P(t) from C''(t) and/or P (t - 1) Các bước của giải thuật di truyền Khởi tạo quần thể (initialize) Quần thể đầu tiên được khởi tạo một cách ngẫu nhiên từ tập hợp những cá thể riêng lẻ. Kích cỡ của quần thể đầu tiên phụ thuộc vào yếu tố tự nhiên của bài toán, nhưng nhìn chung thì một bài toán có đến hàng trăm hay hàng nghìn giải pháp hợp lý. Tập hợp những giải pháp hợp lý cho vấn đề được gọi là không gian tìm kiếm (search space). Trước một bài toán áp dụng thuật toán di truyền, ta cần phải xác định rõ nhiễm sắc thể và cá thể cho vấn đề, và thông thường đó sẽ là kết quả cuối cùng. Việc phân tích sẽ dựa trên kết quả cơ bản tốt nhất. Ví dụ: v1: 1 0 0 0 1 1 1 v2: 1 1 1 1 0 0 0 v3: 1 0 1 0 1 0 1 v4: 1 1 0 0 0 1 1 v5: 1 1 1 0 0 0 1 v6: 0 1 0 1 1 1 0 Tính toán độ thích nghi(evaluate) Các quá trình tiến hóa diễn ra trong vòng lặp While, tại thế hệ thứ t, thuật toán di truyền duy trì một tập lời giải P(t) = {xt1, xt2, ,…, xtn }. Mỗi lời giải xti được đánh giá "độ thích nghi ", hay độ "tốt" của lời giải. Chọn lọc(select) Phép chọn là quá trình loại bỏ các cá thể xấu trong quần thể để chỉ dữ lại trong quần thể các cá thể tốt. Phép chọn được mô phỏng: Sắp xếp quần thể theo thứ tự độ 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. Giả sử ở đây quần thể có kích thước cố định n Có nhiều phương pháp chọn lọc nhiễm sắc thể: Chọn lọc Roulette (Roulett Wheel Selection). Chọn lọc xếp hạng (Rank Selection). Chọn lọc cạnh tranh (Tournament Selection) Ví dụ về Chọn lọc Roulette (Roulett Wheel Selection). Hình 2. Bánh xe Roulette Chia phần trên bánh xe Roulette tùy thuộc vào độ thích nghi của từng nhiễm sắc thể. Độ thích nghi càng cao thì phần của nhiễm sắc thể đó càng lớn. Rơi random càng nhiều xác suất rơi chủ yếu vào các phần lớn càng lớn. Từ đó xác định được các nhiễm sắc thể tốt. Quá trình sinh sản Có hai loại thao tác sinh sản - Phép lai tạo (Crossover): là quá trình hình thành nhiễm sắc thể mới trên cơ sở nhiễm sắc thể cha mẹ bằng cách ghép một hay nhiều đoạn gen của hai hay nhiều nhiễm sắc thể cha mẹ với nhau. Có những phương pháp lai ghép sau: Lai ghép ánh xạ từng phần (PMX Partial Mapped Crossover). Lai ghép có trật tự (OX order Crossover). Lai ghép dựa trên vị trí (Position Based Crossover). Lai ghép dựa trên thứ tự (Order Base Crossover). Lai ghép có chu trình (CX cycle Crossover). Lai ghép thứ tự tuyến tính (LOX Linear order Crossover). Phép lai tạo xảy ra với xác suất pc, được mô phỏng như sau: Chọn ngẫu nhiên một hay nhiều cá thể bất kỳ trong quần thể. Giả sử các nhiễm sắc thể của cha mẹ đều có m gen. Tạo một số ngẫu nhiên trong khoảng từ 1 đến m - 1 (được gọi là điểm lai). Điểm lai chia các chuỗi cha mẹ có độ dài m thành hai nhóm chuỗi con với độ dài m1, m2 hai chuỗi nhiễm sắc thể mới là m11 + m12 và m21 + m22 Đưa hai cá thể mới vào quần thể để tham gia các quá trình tiến hóa tiếp theo. Ví dụ : Hai nhiễm sắc thể cha mẹ : Thì việc trao đổi chéo các nhiễm sắc thể sau gen thứ năm sẽ tạo ra hai con: - Phép đột biến (mutalion): Phép đột biến là hiện tượng cá thể con mang một (hoặc một số) tính trạng có trong mã di truyền của cha mẹ, tức là sự sửa đổi một hoặc một vài gen của một nhiễm sắc thể chọn bằng cách thay đổi ngẫu nhiên với xác suất là tỷ lệ đột biến. Không ai có thể đánh giá được phương pháp đột biến nào tốt hơn, do đó có một vài phương pháp đơn giản, cũng có vài trường hợp khá phức tạp. Người ta thường chọn một trong những phương pháp sau : Đột biến đảo ngược (Inversion Mutation). Đột biến chèn (Insertion Mutation) Đột biến thay thế (Displacement Mutation). Đột biến tương hỗ (Reciprocal Exchange). Đột biến chuyển dịch (Shift Mutation). Phép đột biến xảy ra với xác suất pm nhỏ hơn rất nhiều so với xác suất lai pc. Phép đột biến có thể được mô phỏng: 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ừ 1 đến m với 1≤ k ≤ m. Thay đổi gen thứ k và trả cá thể này về quần thể để tham gia vào quá trình tiến hóa tiếp theo. Một thuật giải di truyền, giải một bài toán được cho phải có năm thành phần: Một cấu trúc dữ liệu biểu diễn không gian lời giải của bài toán. Phương pháp khởi tạo quần thể ban đầu P(0). Hàm định nghĩa độ thích nghi evaluate đóng vai trò môi trường. Các phép toán di truyền như đã mô phỏng trên. Và các tham số thuật toán di truyền sử dụng (kích thước, quần thể, xác suất lai, đột biến…) Điều kiện kết thúc Thoát ra quá trình tiến hóa quần thể, dựa vào bài toán mà có các cách kết thúc vấn đề khác nhau, một khi đã đạt đến mức yêu cầu. Một vài trường hợp thông thường như sau: Kết thúc theo kết quả: một khi đạt đến mức giá trị yêu cầu thì chấm dứt ngay quá trình thực hiện. Kết thúc dựa vào số thế hệ: chọn số thế hệ, quá trình sẽ dừng lại đúng ngay số thế hệ đã qui định trước, không cần biết kết quả như thế nào. Tính theo thời gian: Không cần biết đã bao nhiêu thế hệ hay kết quả thế nào, chỉ cần dựa vào số giờ qui định mà kết thúc. Tổ hợp: dung nhiều phương án khác nhau cho vấn đề, chẳng hạn như: chạy theo số thế hệ xong sau đó đánh giá cho chạy theo kết quả, hoặc ngược lại. CHƯƠNG II - BÀI TOÁN XẾP BA LÔ Giới thiệu Bài toán xếp ba lô (một số sách ghi là bài toán cái túi) là một bài toán tối ưu hóa tổ hợp. Bài toán được đặt tên từ vấn đề chọn những gì quan trọng có thể nhét vừa vào trong một cái túi (với giới hạn khối lượng) để mang theo trong một chuyến đi. Các bài toán tương tự thường xuất hiện trong 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. Bài toán xếp ba lô thường được giải bằng quy hoạch động, tuy chưa có một thuật toán thời gian đa thức cho bài toán tổng quát. Cả bài xếp ba lô tổng quát và bài toán tổng con đều là các bài NP-khó, và điều này dẫn đến các cố gắng sử dụng tổng con làm cơ sở cho các hệ thống mật mã hóa khóa công khai, chẳng hạn Merkle-Hellman. Các cố gắng này thường dùng nhóm thay vì các số nguyên. Merkle-Hellman và một số thuật toán tương tự khác đã bị phá, do các bài toán tổng con cụ thể mà họ tạo ra thực ra lại giải được bằng các thuật toán thời gian đa thức. Phiên bản bài toán quyết định của bài xếp ba lô được mô tả ở trên là NP-đầy đủ và trong thực tế là một trong 21 bài toán NP-đầy đủ của Karp. Bài toán có thể được giải bởi khá nhiều thuật toán như thuật toán tham lam, giải thuật di truyền,… Nội dung bài toán Một kẻ trộm đột nhập vào một cửa hiệu tìm thấy có n mặt hàng có trọng lượng và giá trị khác nhau, nhưng hắn chỉ mang theo một cái túi có sức chứa về trọng lượng tối đa là M. Vậy kẻ trộm nên bỏ vào ba lô những món nào và số lượng bao nhiêu để đạt giá trị cao nhất trong khả năng mà hắn có thể mang đi được. Hình 3. Ba lô Bài toán xếp ba lô dạng 0-1 Đồ vật nào được cho vào ba lô sẽ là loại 1 (được chọn), còn không được cho vào ba lô sẽ là loại 0( không được chọn) Bài toán dạng 0-1 sẽ được phát biểu như sau: Cực đại hóa:  sao cho Ví dụ Cho 8 đồ vật có khối lượng và giá trị tương ứng. Chọn các đồ vật sao cho không vượt quá khối lượng tối đa của túi và giá trị là lớn nhất Khối lượng tối đa của túi là: 26. Nếu biểu diễn 1 lần nhặt đồ vào túi v1 dưới dạng 0-1 ta sẽ có: 1 2 3 4 5 6 7 8 1 0 0 1 1 0 1 0 Tức là: v1=10011010 (mã nhị phân 8 bit tương ứng với 8 đồ vật) Đồ vật 1 được chọn. Đồ vật 3 không được chọn. Đồ vật 4 được chọn. Đồ vật 5 được chọn. Đồ vật 6 không được chọn. Đồ vật 7 được chọn. Đồ vật 8 không được chọn. Áp dụng vào hàm ta sẽ được giá trị và khối lượng của lần chọn này là: Giá trị: 100x1+ 30x0+ 250x0+ 150x1+ 50x1+75x0+ 50x1+ 50x0 = 350 Khối lượng: 5x1+ 3x0 +10x0 +6x1 +5x1 +5x0 +5x1 +4x1 +4x0 = 25 (thỏa mãn) CHƯƠNG III - ỨNG DỤNG GIẢI THUẬT DI TRUYỀN TRONG BÀI TOÁN XẾP BA LÔ Tiếp cận giải thuật di truyền trong bài toán ba lô Có 3 mặt hàng tiềm năng: A, B, C có khối lượng và giá trị tương ứng A B C Khối lượng 6 7 8 Giá trị 4 3 5 Khối lượng tối đa ba lô có thể chứa là: 13. Hàm tính giá trị lớn nhất: Điều kiện thỏa mãn: X=0 or X=1, for i= 1, 2, …, n. Từ 3 đồ vật được đưa ra ta có 8 trạng thái của ba lô như sau: A B C Tổng khối lượng Tổng giá trị 0 0 0 0 0 0 0 1 8 5 0 1 0 7 3 1 0 0 6 4 0 1 1 15 8 1 0 1 14 9 1 1 0 13 7 1 1 1 21 12 Để tìm được giải pháp tốt nhất, ta liệt kê các tập con đáp ứng các khối lượng tối đa (=13) của ba lô A B C Tổng khối lượng Tổng giá trị 0 0 0 0 0 0 0 1 8 5 0 1 0 7 3 1 0 0 6 4 1 1 0 13 7 Trong trường hợp này, phương án tối ưu để ba lô đạt giá trị lớn nhất là trường hợp được in nghiêng. Lấy đồ vật 1 và 2 cho vào ba lô, khối lượng đạt được là 13( thỏa mãn), giá trị đạt được là 7. Vấn đề đặt ra: Nếu bài toán nếu ra có 4 đồ vật trở lên , thì số lượng phương án cũng sẽ nhiều lên. Ứng với mỗi đồ vật số lượng phương án sẽ tăng lên 2 lần. Số lượng này sẽ ra vô cùng nhiều với số đồ vật lớn. Thời gian máy tính thực hiện sẽ rất lớn để đưa ra kết quả. Vậy đòi hỏi 1 thuật toán để giải quyết những bài toán loại này. Trong nội dung bài tập lớn này, chúng ta đi giải quyết nó theo giải thuật di truyền tiến hóa, sẽ được trình bày ở chương sau. Thay vì tìm kiếm rộng rãi như ví dụ ở trên để tìm được kết quả đúng nhất, giải thuật di truyền sử dụng trình tự các bước của quá trình tiến hóa, chọn 1 khoảng nhỏ của các trạng thái(nhiễm sắc thể) ở trong các tập con trạng thái(quần thể) để đưa ra các cặp tốt nhất, có độ thích nghi cao nhất, ở đây là có giá trị cao nhất. Từ đó lai ghép để tạo ra các thế hệ con cái mang đặc tính tốt của cả bố và mẹ. Giải thuật di truyền không cố gắng tìm phương án đúng nhất mà đi tìm các phương án gần đúng với phương án đúng nhất, nhưng vẫn đảm bảo về thời gian thực hiện. Sử dụng giải thuật di truyền để giải bài toán xếp ba lô Để hiểu việc áp dụng giải thuật di truyền để giải bài toán ba lô như thế nào? Ta tiến hành giải ví dụ về bài toán ba lô dưới đây: Khởi tạo dữ liệu Bài toán: Cho bảng các đồ vật có khối lượng và giá trị tương ứng như sau: 1 2 3 4 5 6 7 Khối lượng 7 8 4 10 4 6 4 Giá trị 5 8 3 2 7 9 4 Khối lượng tối đa của ba lô có thể chứa là 22. Sơ đồ bài toán xếp ba lô giải theo giải thuật di truyền như sau: Điều kiện chấm dứt của sơ đồ là: 90% các NST của dân số có cùng độ thích nghi. Kiểm tra tỷ lệ giống nhau của độ thích nghi trong dân số Khởi tạo dữ liệu( đồ vât, khối lượng & giá trị tương ứng Mã hóa dữ liệu. Khởi tạo số lượng dân số ngẫu nhiên Thực hiện đột biến trên 2 NST thu được Thực hiện chéo giữa 2 NST Lựa chọn ngẫu nhiên 2 NST Tỷ lệ >90% Tính tổng khối lượng, tổng giá trị của các NST. Từ đó tính độ thích nghi của mỗi NST Tỷ lệ > 90% & số lượng thế hệ lớn hơn giới hạn Mã hóa dữ liệu. Khởi tạo số lượng dân số ngẫu nhiên Chọn dân số là 6 với các giá trị ngẫu nhiên. 1 2 3 4 5 6 7 T. KL T. GT v1 0 1 0 1 0 1 0 24 19 v2 1 1 0 0 1 0 0 19 20 v3 0 1 0 0 1 1 1 22 28 v4 1 0 0 1 0 0 1 21 11 v5 0 1 1 0 1 0 0 16 18 v6 1 0 1 0 1 0 0 15 15 Cho pop-size =6 Xác suất lai ghép = 0.67 Xác suất đột biến = 0.1 Tính độ thích nghi của mỗi NST Tính độ thích nghi của mỗi NST Chúng ta tính toán độ thích nghi của mỗi nhiễm sắc thể bằng cách tổng hợp các giá trị của các đồ vật có trong ba lô, trong khi đảm bảo rằng khối lượng của ba lô không vượt quá khối lượng cho phép. Nếu khối lượng của nhiễm sắc thể lớn hơn khối lượng của ba lô thì một trong những bit của nhiễm sắc thể có giá trị là 1 được đảo ngược và nhiễm sắc thể được kiểm tra một lần nữa. Đây là một sơ đồ của thuật toán tính độ thích nghi. Loại bỏ mặt hàng khỏi ba lô(thay đổi bit 1 thành bit 0) Lấy tổng khối lượng và tổng giá trị của NST cho vào mảng độ thích nghi[] Chọn ngẫu nhiên 1 mục trong NST có bit là 1 Nếu tổng KL> giới hạn khối lượng của ba lô Tính tổng khối lượng và tổng giá trị của NST Đối với mỗi NST ta tiến hành: Hàm tính độ thích nghi: Ví dụ: 1 2 3 4 5 6 7 T. KL T. GT v1 0 1 0 1 0 1 0 24 19 v2 1 1 0 0 1 0 0 19 20 v3 0 1 0 0 1 1 1 22 28 v4 1 0 0 1 0 0 1 21 11 v5 0 1 1 0 1 0 0 16 18 v6 1 0 1 0 1 0 0 15 15 Trong bảng: v1 có T.KL = 24 > khối lượng tối đa của ba lô có thể chứa Đổi 1 bit 1 thành bit 0 trong các mục của NST v1, ta được bảng dân số mới( thỏa mãn điều kiện khối lượng tối đa của ba lô). 1 2 3 4 5 6 7 T. KL T. GT v1 0 0 0 1 0 1 0 16 16 v2 1 1 0 0 1 0 0 19 20 v3 0 1 0 0 1 1 1 22 28 v4 1 0 0 1 0 0 1 21 11 v5 0 1 1 0 1 0 0 16 18 v6 1 0 1 0 1 0 0 15 15 Độ thích nghi = T.GT của từng NST. Eval(v1)= 16 Eval(v2)= 20 Eval(v3)= 28 Eval(v4)= 11 Eval(v5)= 18 Eval(v6)= 15 Ta thấy độ thích nghi của v3 lớn nhất và của v4 yếu nhất. Chọn lọc Tỉ lệ giống nhau < 90%. Ta tiếp tục bước tiếp theo là lựa chọn ngẫu nhiên 2 NST, việc lựa chọn ở đây ta có nhiều cách lựa chọn. Lựa chọn với bánh xe roulette. Bánh xe Roulette là một phương pháp đơn giản của việc thực hiện lựa chọn độ thích nghi-tương ứng. Mỗi NST là một phần của bánh xe roulette, độ lớn của phần tùy theo độ thích nghi. Các bánh xe được quay N lần, trong đó N là số các NST có trong dân số (N = Size). Sau mỗi vòng xoay, bánh xe dừng tại NST nào thì sẽ được ghi lại. Phương pháp này có thể được thực hiện theo cách sau: Chọn ngẫu nhiên 1 số từ 0 – Size làm giới hạn Các NST được rơi vào nhiều hơn sẽ được chọn làm cha mẹ của thế hệ tiếp theo Bánh xe quay qua tất cả các phần tương ứng của các NST. Tổng hợp các vị trí rơi của vòng quay Tính độ lớn của từng NST trong bánh xe Roulette Tổng độ thích nghi của quần thể: F = 16+ 20+ 28+ 11+ 18+ 15 = 108 Xác suất chọn lọc pi của mỗi NST vi (i= 1..6) là: p1= 16*100/(16+20+28+11+18+15) = 14,8 % p2= 20*100/(16+20+28+11+18+15) = 18,5 % p3= 28*100/(16+20+28+11+18+15) = 25,9 % p4= 11*100/(16+20+28+11+18+15) = 10,2 % p5= 18*100/(16+20+28+11+18+15) = 16,7 % p6= 15*100/(16+20+28+11+18+15) = 13,9 % Các vị trí sác xuất qi của mỗi NST vi (i=1…6) là: q1= 14.8% = 0.148. q2= 14,8+ 18.5 = 33.3 % = 0.333. q3= 14,8+ 18.5+ 25,9 = 59.2% = 0.592. q4= 14,8+ 18.5+ 25,9+ 10,2 = 69.4 % = 0.694. q5= 14,8+ 18.5+ 25,9+ 10,2+ 16,7 = 86.1 % = 0.861. q6= 14,8+ 18.5+ 25,9+ 10,2+ 16,7+ 13,9 = 100% = 1.000. Giả sử quay 6 lần bánh xe Roulette, mỗi lần chọn 1 NST cho quần thể mới, và đạt được các giá trị ngẫu nhiên trong khoảng từ [0,1] như sau: NST cũ Số lần quay bánh xe Vị trí rơi Giải thích NST mới V1 Lần 1 0.277 0.148<0.277<0.333 V2 V2 Lần 2 0.521 0.333<0.521<0.592 V3 V3 Lần 3 0.811 0.694<0.811<0.861 V5 V4 Lần 4 0.111 0<0.111<0.148 V1 V5 Lần 5 0.498 0.333<0.498<0.592 V3 V6 Lần 6 0.602 0.592<0.602<0.694 V4 Như vậy ta sẽ có quần thể mới là: NST mới 1 2 3 4 5 6 7 NST cũ V’1 1 1 0 0 1 0 0 V2 V’2 0 1 0 0 1 1 1 V3 V’3 0 1 1 0 1 0 0 V5 V’4 1 0 0 1 0 0 1 V1 V’5 0 1 0 0 1 1 1 V3 V’6 1 0 0 1 0 0 1 V4 Lai ghép Sử dụng lai ghép, lai những NST có trong quần thể mới. Vì xác suất lai là pc=0.67 nên sẽ có nhiều nhất là 6*0.67= 4 cặp NST tham gia lai ghép. Ta tiến hành theo cách: Đối với mỗi NST trong quần thể mới, ta phát sinh ngẫu nhiên 1 số r thuộc [0,1], nếu r <0.67 thì NST đó được chọn để lai tạo. Giả sử các số ngẫu nhiên là: NST R ngẫu nhiên V’1 0.32 V’2 0.95 V’3 0.55 V’4 0.44 V’5 0.32 V’6 0.78 Theo bảng trên thì v’1, v’3, v’4, v’5 sẽ được chọn làm các NST để lai ghép Ta gộp 2 cặp NST 1 cách ngẫu nhiên (v’1, v’3); (v’4,v’5) để lai ghép. Từ 2 cặp bố mẹ v2 và v3, ta tiến hành lai ghép để tạo ra các thế hệ con cái. V’1: 1 1 0 0 1 0 0 V’3: 0 1 1 0 1 0 0 V’4 1 0 0 1 0 0 1 V’5 0 1 0 0 1 1 1 Ta có rất nhiều kiểu lai ghép để tạo ra thế hệ con mới, ví dụ như: Lai ghép đơn điểm cắt . Chọn 1 số pos ngẫu nhiên( pos) là vị trí lai ghép, điều kiện: pop =[1,6]. Ta chọn pos của cặp 1 là 3, cặp 2 là 4 và tiến hành lai ghép V’1: 1 1 0 0 1 0 0 V’3: 0 1 1 0 1 0 0 Con cái:(V’’1,V’’3) pos =3 V’’1 1 1 0 0 1 0 0 V’’3 0 1 0 0 1 0 0 V’4 1 0 0 1 0 0 1 V’5 0 1 0 0 1 1 1 Con cái(V’’4,V’’5) pos=4 V’’4 1 0 0 1 1 1 1 V’’5 0 1 0 0 0 0 1 Còn 1 số phương pháp nữa có thể sử dụng như: Lai ghép hai điểm cắt: V’1: 1 1 0 0 1 0 0 V’3: 0 1 0 0 1 1 1 Con cái: 1 1 0 0 1 1 0 0 1 0 0 1 0 1 Lai ghép đồng nhất + Có một mặt nạ sao chép là một chuỗi nhị phân có chiều dài bằng chiều dài NST. + Xây dựng NST mới: Duyệt qua mặt nạ, bit có giá trị một thì sao chép gen tại vị trí đó từ NST cha sang con, bit có giá trị 0 thì sao chép từ mẹ. + Mặt nạ được phát sinh ngẫu nhiên đối với từng cặp cha mẹ. V’1: 1 1 0 0 1 0 0 V’3: 0 1 0 0 1 1 1 Mặt nạ( sao chép bit 1 từ v2, bit 0 từ v3) 1 0 1 1 0 0 0 Con ( Duyệt các bit của mặt nạ, nếu bit 1 thì sao chép bit của cha sang con, nếu bit 0 thì sao chép bit của mẹ sang con) 1 1 0 0 1 1 1 Lai ghép số học + NST con được tạo thành bằng cách thực hiện một phép toán logic nào đó như AND, OR, … với cặp NST bố mẹ. V’1: 1 1 0 0 1 0 0 V’3: 0 1 0 0 1 1 1 Con( Dùng phép or) 0 1 0 0 1 0 0 Trong bài toán, chúng ta sử dụng phép lai ghép đơn điểm cắt, vị trí cắt là ngẫu nhiên, ta sẽ tạo được 4 con mới. V’’1 1 1 0 0 1 1 1 V’’3 0 1 0 0 1 0 0 V’’4 1 0 0 1 1 1 1 V’’5 0 1 0 0 0 0 1 Các NST sẽ được thay thế bởi các con của chúng.Quần thể hiện tại sẽ là: NST 1 2 3 4 5 6 7 V’1 1 1 0 0 1 1 1 V’2 0 1 0 0 1 1 1 V’3 0 1 0 0 1 0 0 V’4 1 0 0 1 1 1 1 V’5 0 1 0 0 0 0 1 V’6 1 0 0 1 0 0 1 Đột biến Phép đột biến được thực hiện trên 1 bit của NST. Bit đó sẽ được đổi từ 0 sang 1 hoặc từ 1 sang 0. Xác suất đột biến là pm = 0.1 .Sẽ có nhiều nhất 1/10 số bit được đột biến. Có tổng công 7*6= 42 bit trong toàn bộ quần thể nên sẽ có nhiều nhất 4,2 bit được đột biến. Mỗi bit có cơ hội đột biến là như nhau nên ta phát sinh ngẫu nhiên 1 số r với r thuộc [0,1]. Nếu r < 0.1 thì chọn bit đó làm vị trí đột biến. Ta Phát sinh ngẫu nhiên 42 số thuộc [0,1], giả sử xác định được 4 vị trí đột biến như sau: Vị trí bit Sô ngẫu nhiên 11 0.04 20 0.07 26 0.09 34 0.02 Quần thể sau khi đột biến. Những vị trí đột biến sẽ in đậm NST 1 2 3 4 5 6 7 V’1 1 1 0 0 1 1 1 V’2 0 1 0 1 1 1 1 V’3 0 1 0 0 1 1 0 V’4 1 0 0 1 0 1 1 V’5 0 1 0 0 0 1 1 V’6 1 0 0 1 0 0 1 Ta vừa hoàn thành 1 thế hệ của giải thuật di truyền. Sau khi kết thúc vòng lặp kết quả được đưa lên bước 2 tạo quần thể và tiếp tục kiểm tra điều kiện. Nếu thỏa mãn thì sẽ dừng đưa ra kết quả tối ưu, nếu không sẽ tiếp tục thế hệ tiếp theo cho tới khi thỏa mãn điều kiện Kiểm tra độ thích nghi của quần thể mới so với quần thể cũ NST 1 2 3 4 5 6 7 T.KL T.GT V’1 1 1 0 0 1 1 1 24 33 V’2 0 1 0 1 1 1 1 32 30 V’3 0 1 0 0 1 1 0 18 24 V’4 1 0 0 1 0 1 1 27 20 V’5 0 1 0 0 0 1 1 18 21 V’6 1 0 0 1 0 0 1 21 11 Tính độ thích nghi: V’1, V’2,V’4 có khối lượng không thỏa mãn(<22), đổi ngẫu nhiên 1 bit 1 thành bit 0 trong mỗi NST đó. Những vị trí đổi là ngẫu nhiên và được bôi đen, ta sẽ có T.GT và T.KL mới là: NST 1 2 3 4 5 6 7 T.KL T.GT V’1 1 1 0 0 1 1 0 20 29 V’2 0 1 0 0 1 1 1 22 28 V’3 0 1 0 0 1 1 0 18 24 V’4 0 0 0 1 0 1 1 20 15 V’5 0 1 0 0 0 1 1 18 21 V’6 1 0 0 1 0 0 1 21 11 Tổng độ thích nghi là : F= 29+28+24+15+21+11 = 128 > 108 của quần thể cũ và độ thích nghi cao nhất 29 > độ thích nghi cao nhất của quần thể cũ (28). KẾT LUẬN Những vấn đề giải quyết được trong bài tập lớn: Hiểu về giải thuật di truyền. Tìm hiểu về các bước để giải quyết một bài toán bằng giải thuật di truyền. Ứng dụng của giải thuật di truyền trong từng bài toán. Bài toán ba lô và hướng giải quyết bài toán ba lô dạng 0-1. Giải một bài toán ba lô cụ thể theo giải thuật di truyền. Những vấn đề chưa giải quyết được: Tài liệu tham khảo ít nên kiến thức về giải thuật di truyền và bài toán ba lô còn hạn chế Trong bước chọn lọc còn khá nhiều phương pháp chọn lọc nhóm chưa lấy ví dụ được Nhờ vào sự hướng dẫn và bài giảng của thầy, chúng em đã hoàn thành bản báo cáo bài tập lớn “Tìm hiều và ứng dụng của thuật giải di truyền trong bài toán xếp ba lô”. Trong bài tập lớn còn nhiều thiếu sót, mong thấy giúp đỡ để hoàn thiện báo cáo hơn. TÀI LIỆU THAM KHẢO [1]. Ts. Nguyễn Đình Thúc, Trí tuệ nhân tạo- Lập trình tiến hóa .Nhà xuất bản Giáo dục. [2]. [3]. [4]. PC Chu , JE Beasley. A Genetic Algorithm for the Multidimensional Knapsack Problem

Các file đính kèm theo tài liệu này:

  • docxbtl_gtdt_chuan_9877.docx