Mã hóa nhiễm sắc thể

Một phần của tài liệu giải thuật di truyền bài toán cây steiner (Trang 41 - 47)

6. KHỞI TẠO QUẦN THỂ BAN ĐẦU VÀ CHỌN LỌC CÁ THỂ

7.1. Mã hóa nhiễm sắc thể

Đây là câu hỏi đầu tiên chúng ta phải đặt ra khi quyết định giải bài toán bằng

GA. Để phân biệt cá thể này vỡi cá thể khác thuật toán phải dựng được một cách mã hóa thích hợp đã là một nửa thành công của giải thuật. Ta sẽ xét một số cách mã hóa NST thường gặp để đánh giá về mặt lưu trữ thông tin cũng như về mặt đóng góp cho giải thuật di truyền.

7.1.1 Mã hóa nhị phân (Binary Encoding)

Đây là cách mã hóa nhị phân phổ biến nhất.Mỗi một nhiễm sắc thể là một chuỗi bit nhị phân 0 & 1. Mỗi một bit có thể biểu diến một đặc tính nào đó của lời giải, và số bit cần để mã hóa được tính toán hợp lý để chuỗi nhị phân không quá dài, mà chỉ vừa đủ cho biểu diễn thông tin cần thiết cho lời giải.

Mã hoá nhị phân thường hay dùng trong các bài toán tối ưu các hàm một biến hay nhiều biến. Khi đó, mỗi chuỗi nhị phân sẽ biểu diễn hàm tại một (tập) giá trị của (các) biến hoặc mỗi bộ chuỗi nhị phân sẽ biểu diễn một bộ nghiệm của hàm.

Bảng 2.1. Mã hóa nhị phân độ dài 20 bit.

Ví dụ 1: Trong bài toán cái túi, dùng một chuỗi nhị phân để biểu diễn một cách xếp đồ vào túi có kích thước bằng số đồ vật, mỗi bit tương ứng với các đồ vật sẽ có hai

Chronosome A 00110101000010111010

giá trị : giá trị 0 nếu đồ vật đó không được cho vào túi và giá trị 1 nếu đồ vật được cho vào túi.

Ví dụ 2: Trong bài toán tìm giá trị cực đại của hàm só f(x) = sin(x)*x3 + ex+1. Nếu giải theo cách rời rạc hóa miền giá trị và tìm kiếm vét cạn. Nếu bước chia miền càng nhỏ, công việc càng trở nên phức tạp và tồn thời gian. Một cách khác là giải bài toán với GA, cách mã hóa mỗi một giá trị x tương ứng là một chuỗi nhị phân 0 và 1.

Mã hoá nhị phân tuy là phổ biến nhưng nó có một nhược điểm là có thể tạo ra không gian mã hoá lớn hơn so với không gian giá trị của NST. Do đó, với nhiều bài toán thì biểu diễn nhị phân là không hữu hiệu.

7.1.2. Mã hóa hoán vị (PermutationEncoding)

Mỗi NST là một chuỗi hoán vị của các số (thường là số tự nhiên) để biểu diễn một trình tự nào đó.

Chronosome A 4 7 9 3 2 1 8 6 5

Chronosome B 9 6 5 1 4 3 2 7 8 Bảng 2.2: Mã hóa hoán vị 2 NST A&B

Mã hoá hoán vị phù hợp cho các bài toán liên quan đến thứ tự. Đối với các bài toán này, việc thao tác trên các nhiễm sắc thể chính là hoán vị các số trong chuỗi đó làm thay đổi trình tự của nó. Mã hóa hoán vị rất hữu ích với các bài toán sắp xếp.

VD: Bài toán người du lịch. Cho trước một số thành phố và khoảng cách giữa chúng. Tìm đường đi cho người du lịch để anh ta có thể đi thăm tất cả các thành phố, mỗi thành phố chỉ đi qua một lần đồng thời tổng đường đi là ngắn nhất

Cách mã hóa: Mỗi một lời giải hay một cách đi của người du lịch được biểu diến bằng một dãy các số chỉ trình tự người đó sẽ đi.

7.1.3. Mã hóa giá trị (Value Encoding)

Mã hóa giá trị trực tiếp có thể được sử dụng trong các bài toán mà giá trị của nó là các giả trị phức tạp như là số thực. Sử dụng mã hóa nhị phân sẽ trở nên khó khăn. Trong đó, mỗi NST là một chuỗi các giá tri. Các giá trị có thể là bất cứ cái gì liên quan đến bài toán, từ số nguyên, số thực, kí tự cho đến các đối tượng phức tạp hơn.

Chronosome A 1.4765 6.2324 3.8653 9.2134

Chronosome B ABDJEIFJDHDIERJFDLDFLFEGT

Chronosome C (black) (black) (blue) (red) (white) Bảng 2.3: Mã hóa giá trị các NST A,B,C

Mã hoá theo giá trị thường dùng cho các bài toán đặc biệt. Trong cách mã hoá này ta thường phải phát triển các toán tử đột biến và lai ghép cho phù hợp với từng bài toán.

7.1.4. Mã hóa theo cấu trúc cây (Tree Encoding)

Cách mã hóa này được dùng chủ yếu trong chương trình hoặc biểu thức tiến hóa. Trong mã hoá theo cấu trúc cây, mỗi NST là một cây các đối tượng. Các đối tượng có thể là các hàm, các lệnh của ngôn ngữ hay các giá trị của biến, v.v.

Cách mã hóa này được dùng nhiều trong ngôn ngữ lập trình LISP, vì ngôn ngữ biểu diễn chương trình dưới dạng cây và rất dễ dàng phân giải cây, do đó lai ghép và đột biến thực hiện thuận lợi hơn.

Cách mã hóa này được dùng chủ yếu trong chương trình hoặc biểu thức tiến hóa. Trong mã hoá theo cấu trúc cây, mỗi NST là một cây các đối tượng. Các đối tượng có thể là các hàm, các lệnh của ngôn ngữ hay các giá trị của biến, v.v.

Chronosome A

Biểu thức (*a(/(-(b9)c))

Bảng 2.4: Mã hóa NST A theo cấu trúc cây

Cách mã hóa này được dùng chủ yếu trong chương trình hoặc biểu thức tiến hóa. Trong mã hoá theo cấu trúc cây, mỗi NST là một cây các đối tượng. Các đối tượng có thể là các hàm, các lệnh của ngôn ngữ hay các giá trị của biến, v.v.

Cách mã hóa này được dùng nhiều trong ngôn ngữ lập trình LISP, vì ngôn ngữ biểu diễn chương trình dưới dạng cây và rất dễ dàng phân giải cây, do đó lai ghép và đột biến thực hiện thuận lợi hơn.

VD: Tìm hàm từ các cặp giá trị cho trước

Bài toán: Cho trước các giá trị đầu vào cà đầu ra. Nhiệm vụ là phải tìm một hàm cho giá trị đàu ra tốt nhất với các giá trị đầu vào.

Cách mã hóa: Mỗi một hàm lời giải có thể được biểu diễn thành một cây.

7.2. Lai ghép (CrossOver)

Lai ghép là một trong những toán tử cơ bản của GA để tạo nên những cá thể con. Mỗi một cách má hóa NST sẽ có những cách lai ghép khác nhau.

7.2.1. Mã hóa nhị phân

Lai ghép một điểm cắt (One Points Crossover) Điểm cắt là một gen vị trí ngẫu nhiên k trên NST

Cá thể con có phần đầu đến gen thứ k giống hệt mẹ, phần còn lại giống hệt cha.

* * a a // - - cc b b 99

Hình 2.4. Lai ghép một điểm cắt mã hóa nhị phân Lai ghép hai điểm cắt (Two Points Crossover)

- Hai điểm cắt sẽ được chọn ngẫu nhiên.

- Con sinh ra từ đầu cho đến điểm cắt thứ nhất được sao chép từ cha, từ điểm cắt thứ nhất đến điểm cắt thứ hai sao chép từ mẹ và phần còn lại sao chép từ cha.

Hình 2.5. Lai ghép hai điểm cắt mã hóa nhị phân Lai ghép đồng nhất

- Chuỗi nhị phân của con sẽ được lai ghép ngẫu nhiên hoặc từ mẹ hoặc từ cha. Hay nói cách khác, ta sẽ xây dựng một mặt nạ lai ghép. Nó cũng là một chuỗi nhị phân các bit 0&1.

- Duyệt mặt nạ: ở vị trí bit mặt nạ = 1 thì gen ở vị trí tương ứng của mẹ được lai ghép cho con, nếu bit mặt nạ = 0 thì gen ở vị trí tương ứng của cha được lai ghép cho con.

Hình 2.6. Lai ghép đồng nhất mã hóa nhị phân Cụ thể hơn ta có bảng sau: Cha 11111111 Mẹ 00000000 Mạt nạ 10110001 Con 10110001 Bảng 2.5:Mặt nạ lai ghép đồng nhất Lai ghép số học:

NST bố mẹ.

Hình 2.7. Lai ghép số học mã hóa nhị phân

7.2.2. Mã hóa hoán vị

Lai ghép một điểm cắt:

- Vị trí cắt được chọn một cách ngẫu nhiên

- Con mới được sinh ra sẽ có phần gen đầu cho đến vị trí cắt giống mẹ. - Duyệt NST cha từ đầu, gen nào chưa có trong NST của con thì đưa vào.

Mẹ 1234 | 56789

Cha 9876 | 54321

Con 1234 | 98765

Bảng 2.6: Lai ghép một điểm cắt mã hóa hoán vị

7.2.3 Mã hóa giá trị

Mã hoá theo giá trị có thể áp dụng tất cả các toán tử lai ghép có trong mã hoá nhị phân.

7.2.4. Mã hóa theo cấu trúc cây

Hình 2.8. Lai ghép với lưu trữ cấu trúc cây.

Lai ghép cây:

- Tạo một điểm cắt cho cả hai cây bố và mẹ

- Hoán đổi các cây con được cắt để tạo ra cây con mới

7.3. Đột biến (Mutation)

con sẽ có độ thích nghi tăng lên. Song thực chất, không phải lúc nào đột biến cũng mang lái kết quả như ý muốn.

Ta sẽ xét một số toán tử đột biến với các cách mã hóa khác nhau.

7.3.1 Mã hóa nhị phân

Phép đảo bit: Bit được chọn sẽ được đảo.

Bảng 2.7: Phép đảo bit mã hóa nhị phân

7.3.2 Mã hóa hoán vị

Hoán đổi thứ tự:

Thứ tự các gen được hoán đổi được lựa chọn ngẫu nhiên

Bảng 2.8. Hoán vị thứ tự mã hóa hoán vị

7.3.3 Mã hóa giá trị

VD: nếu mã hóa số thực, ta có thể thêm hoặc bớt một lượng rất nhỏ vào các gen được chọn để đột biến

Bảng 2.9. Thay đổi giá trị trong mã hóa giá trị.

7.3.4 Mã hóa theo cấu trúc cây

Hình 2.9. Phép đột biến với mã hóa cấu trúc cây

Chọn một nút không phải lá ở trên cây và thay đối toán tử đó. Ví dụ dưới ta thay phép + bằng phép – trong cây biểu thức.

Một phần của tài liệu giải thuật di truyền bài toán cây steiner (Trang 41 - 47)