Trong ngành khoa học máy tính, tìm kiếm lời giải tối ưu cho các bài toán là vấn đề được các nhà khoa học máy tính đặc biệt rất quan tâm. Mục đích chính của các thuật toán tìm kiếm lời giải là tìm ra lời giải tối ưu nhất cho bài toán trong thời gian nhỏ nhất. Các thuật toán như tìm kiếm không có thông tin / vét cạn ( tìm kiếm trên danh sách, trên cây hoặc đồ thị ) sử dụng phương pháp đơn giản nhất và trực quan nhất hoặc các thuật toán tìm kiếm có thông tin sử dụng heurictics để áp dụng các tri thức về cấu trúc của không gian tìm kiếm nhằm giảm thời gian cần thiết cho việc tìm kiếm được sử dụng nhiều nhưng chỉ với không gian tìm kiếm nhỏ và không hiệu quả khi tìm kiếm trong không gian tìm kiếm lớn. Tuy nhiên, trong thực tiễn có rất nhiều bài toán tối ưu với không gian tìm kiếm rất lớn cần phải giải quyết. Vì vậy, việc đòi hỏi thuật giải chất lượng cao và sử dụng kỹ thuật trí tuệ nhân tạo đặc biệt rất cần thiết khi giải quyết các bài toán có không gian tìm kiếm lớn. Thuật giải di truyền (genetic algorithm) là một trong những kỹ thuật tìm kiếm lời giải tối ưu đã đáp ứng được yêu cầu của nhiều bài toán và ứng dụng. Hiện nay, thuật toán di truyền cùng với logic mờ được ứng dụng rất rộng rãi trong các lĩnh vực phức tạp. Thuật toán di truyền kết hợp với logic mờ chứng tỏ được hiệu quả của nó trong các vấn đề khó có thể giải quyết bằng các phương pháp thông thường hay các phương pháp cổ điển, nhất là trong các bài toán cần có sự lượng giá, đánh giá sự tối ưu của kết quả thu được. Chính vì vậy, thuật giải di truyền đã trở thành đề tài nghiên cứu thú vị và đem đến nhiều ứng dụng trong thực tiễn.
LỜI NÓI ĐẦU Trong ngành khoa học máy tính, tìm kiếm lời giải tối ưu cho các bài toán là vấn đề được các nhà khoa học máy tính đặc biệt rất quan tâm. Mục đích chính của các thuật toán tìm kiếm lời giải là tìm ra lời giải tối ưu nhất cho bài toán trong thời gian nhỏ nhất. Các thuật toán như tìm kiếm không có thông tin / vét cạn ( tìm kiếm trên danh sách, trên cây hoặc đồ thị ) sử dụng phương pháp đơn giản nhất và trực quan nhất hoặc các thuật toán tìm kiếm có thông tin sử dụng heurictics để áp dụng các tri thức về cấu trúc của không gian tìm kiếm nhằm giảm thời gian cần thiết cho việc tìm kiếm được sử dụng nhiều nhưng chỉ với không gian tìm kiếm nhỏ và không hiệu quả khi tìm kiếm trong không gian tìm kiếm lớn. Tuy nhiên, trong thực tiễn có rất nhiều bài toán tối ưu với không gian tìm kiếm rất lớn cần phải giải quyết. Vì vậy, việc đòi hỏi thuật giải chất lượng cao và sử dụng kỹ thuật trí tuệ nhân tạo đặc biệt rất cần thiết khi giải quyết các bài toán có không gian tìm kiếm lớn. Thuật giải di truyền (genetic algorithm) là một trong những kỹ thuật tìm kiếm lời giải tối ưu đã đáp ứng được yêu cầu của nhiều bài toán và ứng dụng. Hiện nay, thuật toán di truyền cùng với logic mờ được ứng dụng rất rộng rãi trong các lĩnh vực phức tạp. Thuật toán di truyền kết hợp với logic mờ chứng tỏ được hiệu quả của nó trong các vấn đề khó có thể giải quyết bằng các phương pháp thông thường hay các phương pháp cổ điển, nhất là trong các bài toán cần có sự lượng giá, đánh giá sự tối ưu của kết quả thu được. Chính vì vậy, thuật giải di truyền đã trở thành đề tài nghiên cứu thú vị và đem đến nhiều ứng dụng trong thực tiễn. I. Giới thiệu chung: Thuật toán tìm kiếm và tối ưu hóa dựa trên nguyên lý tiến hóa tự nhiên goi chung là thuật toán tiến hóa. Giải thuật di truyền – Genetic Algorithm (GA) là một trong số các thuật toán tiến hóa đã được công bố do D.E. Goldberg đề xuất, sau này được L. Davis và Z. Michalevicz phát triển. Giải thuật di truyền được hình thành dựa trên quan niệm cho rằng : 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. Quan niệm này có thể xem như một tiên đề đúng, ta không chứng minh được, nhưng nó lại phù hơp với thực tế khách quan. Vì quá trình tiến hóa trong tự nhiên thể hiện tính tối ưu ở chỗ : thế hệ sau bao giờ cũng tốt hơn ( phát triển hơn, hoàn thiện hơn ) thế hệ trước . 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. Trong quá trình tiến hóa tự nhiên, thế hệ mới luôn được sinh ra để bổ sung thay thế cho 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, cá thể nào không thích ứng được với môi trường sẽ bị đào thải. Môi trường thì liên tục thay đổi và chính nó là động lực thúc đẩy quá trình tiến hóa. Tuy nhiên, tiến hóa cũng tác động trở lại góp phần làm thay đổi môi trường. Trong tự nhiên, cá thể mới sinh ra trong quá trình tiến hóa nhờ sự lai ghép ở thế hệ cha mẹ. Do đó, nó mang phấn lớn những tính trạng của cha mẹ ( di truyền ) và một phần tính trạng mới do đột biến nhưng nó cũng có thể mang những tính trạng hoàn toàn mới. Hai cơ chế di truyền và đột biến có vai trò quan trọng như nhau trong tiến trình tiến hóa, mặc dù đột biến chỉ xảy ra với xác xuất nhỏ hơn nhiều so với hiện tượng di truyền. Giải thuật di truyền nêu sau đây cũng được mô phỏng theo bốn quá trình cơ bản của tiến hóa tự nhiên đó là : lai ghép, đột biến, sinh sản và chọn lọc tự nhiên. Trong thuật giải 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à các chuỗi hay các nhiễm sắc thể. Các nhiễm sắc thể được tạo thành từ các đơn vị - các gen biểu diễn trong chuỗi tuyến tính, mỗi gen kiểm soát một số đặc trưng. Gen với những đặc trưng nhất định có vị trí nhất định trong nhiễm sắc thể. Bất cứ đặc trưng nào của mỗi cá thể có thể tự biểu hiện một cách phân biệt, và gen có thể nhận một số giá trị khác nhau ( các giá trị về tính năng). Mỗi kiểu (nhóm) gen (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. 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. Thực ra, GA thuộc lớp các thuật giải xác xuất, 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ể)- tất cả những phương pháp khác chỉ xử lý một điểm trong không gian tìm kiếm. Chính vì thế, GA mạnh hơn các phương pháp tìm kiếm hiện có rất nhiều. GA thực hiện tiến trình tìm kiếm lời giải tối ưu theo nhiều hướng, bằng cách duy trì một quần thể các lời giải, thúc đẩy sự hình thành và trao đổi thông tin giữa các hướng này. Quần thể trải qua tiến trình tiến hóa: ở mỗi thế hệ lại tái sinh các lời giải tương đối tốt, trong khi các lời giải tương đối xấu thì chết đi (loại bỏ). Để phân biệt các lời giải khác nhau, hàm mục tiêu được dùng để đóng vai trò môi trường. Sau đây ta sẽ xem xét các quá trình cơ bản của tiến hóa tự nhiên đã được áp dụng như thế nào: • Quá trình lai ghép (phép lai ) Phép lai là quá trình hình thành nhiễm sắc thể mới trên cơ sở các nhiễm sắc thể cha mẹ, bằng cách ghép một hay nhiều đoạn gen cua hai (hay nhiều ) nhiễm sắc thể cha mẹ với nhau. Phép lai xảy ra với xác xuất p/c, có thể mô phỏng như sau: +Chọn ngẫu nhiên hai ( 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 (ta gọi 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 m1 và m2. Hai chuỗi nhiễm sắc thể con mới sẽ là m11+ m22 và m21+ m12. +Đưa hai cá thể mới này vào quần thể để tham gia các quá trình tiến hóa tiếp theo. • Quá trình đột biến ( phép đột biến ) Đột biến là hiện tượng các cá thể con mang một (số) tính trạng không có trong mã di truyền của cha mẹ. Phép đột biến xảy ra với xác suất p----, nhỏ hơn rất nhiều so với xác xuất lai p/c. Phép đột biến có thể mô phỏng như sau: +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, 1<=k<=m. +Thay đổ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. • Quá trình sinh sản và chọn lọc (phép tái sinh và phép chọn) Phép tái sinh là quá trình trong đó các cá thể được sao chép trên cơ sở độ thích nghi của nó. Độ thích nghi là một hàm gán một giá trị thực cho các cá thể trong quần thể. Quá trình này có thể thực hiện được mô phỏng như sau: +Tính độ thích nghi của từng cá thể trong quần thể hiện hành, lập bảng cộng dồn các giá trị thích nghi (theo số thứ tự gán cho từng cá thể). Giả sử quần thể có n cá thể. Gọi độ thích nghi của cá thể thứ i là F i tống dồn thứ I là F ti , tống độ thích nghi của toàn quần thể là F m . +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ể của thế hệ mới. Phép chọn là quá trinh loại bỏ các cá thể xấu trong quần thể để chỉ giữ lại trong quần thể các cá thể tốt. Phép chọn có thể được mô phỏng như sau: +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. Ở đây, ta giả sử quần thể có kích thước cố định n. Một thuật giải di truyền, giải một bài toán phải có năm thành phần sau : +)Một cấu trúc dữ liệu I 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 eval(-) đóng vai trò môi trường. +)Các phép toán di truyền đã mô phỏng như trên. +)Các tham số thuật giải di truyền sử dụng (kích thước quần thể, xác xuất lai , đột biến, …). Thuật giải di truyền Bắt đầu t = 0; Khởi tạo p(t); Tính độ thích nghi cho các cá thể thuộc P(t); Khi (điều kiện dừng chưa thỏa) lặp t = t + 1; tái sinh P’(t) từ P(t) lai Q(t) từ P(t-1); đột biến R(t) từ P(t-1); chọn lọc P(t) từ P(t-1) hợp Q(t) hợp R(t) hợp P(t); Hết lặp Kết thúc Sơ đồ thuật toán được mô tả như sau: II. Các giải thuật di truyền 1. Một số ví dụ để hiểu rõ các tính năng chính của giải thuật di truyền Ví dụ 1: Bài toán thỏa CNF Bài toán thỏa mãn dạng chuẩn hội (Conjunctive normal form – CNF) là một bài toán đơn giản: Một biểu thức của các mệnh đề (clause) ở dạng chuẩn hội hay CNF khi nó là một dãy các biến mệnh đề được kết nối với nhau bởi toán tử quan hệ and (∧). Mỗi mệnh đề có dạng là một tuyển (disjunction), gồm các toán tử quan hệ or (v) trên các biến mệnh đề (literal). Ví dụ : Nếu ta có 6 biến mệnh đề a, b, c, d, e và f, thì biểu thức sau đây là một CNF: (¬a v c) ∧ (¬a v c v ¬e) ∧ (¬b v c v d v ¬e) ∧ (a v ¬b v c) ∧ (¬e v f) (1- 3) Thỏa mãn CNF có nghĩa rằng chúng ta phải tìm ra một phép gán true hoặc false (1 hoặc 0) cho mỗi biến mệnh đề a, b, c, d, e, f sao cho biểu thức CNF có giá trị là TRUE. Một cách biểu diễn tự nhiên cho lời giải của bài toán này là một dãy sáu bit, mỗi bit theo thứ tự a, b, c, d, e, f biểu diễn true (1) hoặc false (0) cho mỗi biến mệnh đề. Như vậy mẫu bit: 1 0 1 0 1 0 cho biết a, c, và e là true và b, d, và f là false, và do đó khi thay các giá trị này vào biểu thức (1-3), thì cho giá trị false. Chúng ta muốn rằng các toán tử di truyền sinh ra các thế hệ lời giải sao cho biểu thức CNF mang trị true, vì vậy mỗi toán tử phải sinh ra một mẫu 6-bit của phép gán true cho biểu thức. Cách biểu diễn lời giải dưới dạng một mẫu các bit như trên mang lại cho ta rất một điều rất thuận lợi là bất kỳ toán tử di truyền nào (lai ghép, đột biến, đảo ngược, hay trao đổi) đều tạo ra một mẫu bit mới là một lời giải khả dĩ hợp lệ. Việc chọn lựa một hàm thích nghi cho quần thể các chuỗi bit này không phải hoàn toàn dễ dàng. Thoạt nhìn chuỗi bit, ta khó có thể xác định một hàm thích nghi để đánh giá được chất lượng của nó như thế nào, nghĩa là khó đoán được độ tốt của nó so với đáp án đúng. Đáp án đúng ở đây chính là chuỗi bit sao cho biểu thức CNF có giá trị true. Tuy nhiên có một số cách khác. Nếu ta chú ý đến biểu thức CNF (1-3), thì ta thấy rằng nó được tạo thành từ hội của 5 mệnh đề. Do đó chúng ta có thể thiết lập một hệ phân hạng cho phép chúng ta sắp hạng các lời giải (mẫu bit) tiềm năng trong khoảng giá trị từ 0 đến 5, tùy thuộc vào số mệnh đề mà mẫu đó thỏa mãn. Do đó mẫu: 1 1 0 0 1 0 có độ thích nghi là 1. 0 1 0 0 1 0 có độ thích nghi là 2 0 1 0 0 1 1 có độ thích nghi là 3 1 0 1 0 1 1 có độ thích nghi là 5, và nó chính là một lời giải. Ví dụ2 : Xét bài toán tìm max Xét bài toán tìm max của hàm f(x) = x 2 với x là số nguyên trên đoạn [0,31]. Để sử dụng TTDT, ta mã hoá mỗi số nguyên x trong đoạn [0,31] bởi một số nhị phân độ dài 5, chẳng hạn, chuỗi 11000 là mã của số nguyên 24. Hàm thích nghi được xác định là chính hàm f(x) = x 2 . Quần . toán di truyền đã mô phỏng như trên. +)Các tham số thuật giải di truyền sử dụng (kích thước quần thể, xác xuất lai , đột biến, …). Thuật giải di truyền. Kết thúc Sơ đồ thuật toán được mô tả như sau: II. Các giải thuật di truyền 1. Một số ví dụ để hiểu rõ các tính năng chính của giải thuật di truyền Ví dụ