Giới thiệu chung về giải thuật di truyề n

Một phần của tài liệu Giải thuật di truyền giải bài toán p median có hạn chế khả năng (Trang 56 - 67)

Một cách tiếp cận khác để xử lý các bài toán NP-khó đang rất được chú trọng trong thời gian hiện nay là phát triển các giải thuật tìm kiếm. Trong chương này ta trình bày giải thuật di truyền là một trong những giải thuật như

vậy.

Giải thuật di truyền (Genetic Algorithm) là một bộ phận của lý thuyết tính toán theo thuyết tiến hoá.

Ý tưởng tính toán theo thuyết tiến hoá được giới thiệu lần đầu tiên bởi I.Rechenberg vào những năm 60. Ý tưởng của ông đã được nhiều nhà nghiên cứu khác phát triển. Đến năm 1975, giải thuật di truyền (GA) được đề xuất bởi John Holland, và được ông cùng các học trò (như DeJong…) phát triển.

Năm 1992, John Koza đã sử dụng giải thuật di truyền để phát triển các chương trình thực hiện một số tác vụ. Ông gọi phương pháp đó là “lập trình di truyền” (GP). Ông đã sử dụng ngôn ngữ LISP, vì các chương trình viết bởi ngôn ngữ này có thể biểu diễn được dưới dạng một “cây cú pháp”, thể hiện các đối tượng mà GA làm việc.

các phép toán tổ hợp trên các cấu trúc này nhằm duy trì các thông tin quan trọng thiết yếu. Giải thuật di truyền thường được phát triển đối với các bài toán tối ưu hoá, mặc dù phạm vi áp dụng giải thuật di truyền là rộng hơn.

Xuất phát từ một quần thể gồm các nhiễm sắc thể (thường là ngẫu nhiên), giải thuật di truyền tiến hành ước lượng, đánh giá chúng nhằm xác định xem chúng có khả năng tái sản xuất ra các nhiễm sắc thể mới tốt hơn hay không. “Độ tốt” của lời giải phụ thuộc vào quần thểđang có.

Với tầm ứng dụng rộng, có thể hiểu GA là một hình thức dựa trên quần thể, sử dụng các phép chọn lọc và lai ghép nhằm tạo ra các mẫu mới trong không gian tìm kiếm.

Các lời giải tốt của bài toán nằm rải rác trong không gian tìm kiếm, do

đó việc tìm kiếm chúng một cách ngẫu nhiên hoặc bằng cách liệt kê trong một không gian tìm kiếm lớn không phải là cách giải quyết tốt. Mặt khác, mọi cách tìm kiếm khác với tìm kiếm ngẫu nhiên sẽ phải đưa ra được cách tìm kiếm các lời giải tốt hơn và phải tìm chúng ở đâu trong không gian tìm kiếm. Thực vậy, GA đã đưa ra được một khuynh hướng riêng xác định được các điểm mới nào trong miền tìm kiếm có thểđược dùng làm mẫu. Tuy nhiên, GA thuộc vào lớp các phương thức được coi là “các phương thức yếu” trong trí tuệ nhân tạo bởi nó tạo ra một số giả thuyết tương đối về vấn đề cần giải quyết.

Rõ ràng có rất nhiều phương pháp tối ưu được phát triển trong toán học. Vậy GA làm gì để thực hiện vai trò là một công cụ tối ưu? GA thường được mô phỏng như là một phương pháp tìm kiếm tối ưu toàn cục của hàm số mà không sử dụng thông tin vềđạo hàm của nó. Vì vậy, giải thuật di truyền có thể

2.3.1.1 Nhiễm sắc thể

Mọi cơ thể sống đều bao gồm các tế bào. Mỗi tế bào đều chứa các tập nhiễm sắc thể. Một nhiễm sắc thể bao gồm các gen. Về cơ bản, mỗi gen mã hoá một đặc điểm, ví dụ như màu mắt. Khả năng thiết lập mỗi đặc tính (ví dụ

màu xanh, nâu) được gọi là các alen. Mỗi gen đều nằm tại một vị trí nào đó trong nhiễm sắc thể.

Tập đầy đủ các vật chất di truyền (tất cả các nhiễm sắc thể) được gọi là bộ gen. Tập các gen riêng biệt trong bộ gen được gọi là kiểu di truyền. Kiểu di truyền được phát triển trên cơ thể dựa vào các đặc điểm về kiểu hình, tính chất vật lí, trí lực của cơ thể như màu mắt, trí thông minh, …

Trong quá trình tái tạo, sự lai ghép xảy ra đầu tiên. Các gen của cha mẹ

kết hợp với nhau hình thành nên một nhiễm sắc thể hoàn toàn mới. Con mới

được tạo ra có thể bị đột biến. Đột biến có nghĩa là các phần tử của DNA có một chút thay đổi. Sự thay đổi này phần lớn là do lỗi sao chép các gen từ cha mẹ.

Độ tương thích của một cơ thể được đo bởi sự thành công của nó trong thời gian tồn tại.

2.3.1.2 Khônggiantìmkiếm

Khi giải quyết một bài toán, ta thường tìm lời giải tốt nhất cho nó. Tập tất cả các lời giải chấp nhận sẽ được gọi là không gian tìm kiếm (hoặc không gian trạng thái). Mỗi điểm trong không gian tìm kiếm tương ứng với một lời giải chấp nhận được. Mỗi lời giải chấp nhận được có thểđược “đánh dấu” bởi giá trị của nó (hoặc độ tương thích) cho bài toán. Trong GA, chúng ta tìm kiếm

Việc tìm kiếm một lời giải tương đương với việc tìm kiếm các cực trị

(cực tiểu hoặc cực đại) trong không gian tìm kiếm. Nếu thời gian cho phép ta có thể xác định được toàn bộ không gian tìm kiếm, tuy nhiên thường thì chúng ta chỉ biết được một số điểm trong đó và từ đó phải tiến hành tìm kiếm các

điểm khác bằng quá trình tiến hoá để có thể tìm được lời giải mong muốn. Việc tìm kiếm đó có thể rất phức tạp. Một trong những khó khăn chính là ta không biết phải tìm kiếm lời giải đó ở đâu và bắt đầu từđâu. Có rất nhiều phương pháp để tìm kiếm lời giải thích hợp như hill climbing, tabu search, simulated annealing, genetic… nhưng chưa hẳn những lời giải đó đã là tối ưu. Những lời giải tìm được bởi các phương pháp này thường được coi là tốt, vì không phải lúc nào cũng đưa ra được điều kiện nhận biết tính tối ưu.

Một trong những ví dụ của lớp bài toán không thể giải bằng các phương pháp truyền thống là các bài toán thuộc lớp NP-khó. Rất nhiều lớp bài toán thuộc lớp NP-khó đã được giải bằng GA, chẳng hạn: bài toán cái túi, bài toán người du lịch, bài toán cây Steiner, ...

2.3.1.3 Sơ đồ giải thuật di truyền

Giải thuật di truyền dựa trên thuyết tiến hoá của Darwin. Để tìm được lời giải của bài toán, GA đã thực hiện một quá trình tiến hóa.

Thuật toán bắt đầu từ một tập các lời giải (chúng được biểu diễn bởi các nhiễm sắc thể) gọi là quần thể. Các lời giải từ một quần thể được sử dụng để

xây dựng nên một quần thể mới với hi vọng sẽ tốt hơn quần thể cũ. Các lời giải

được chọn để tạo ra các lời giải (con) mới được chọn theo độ tương thích của chúng – tương thích hơn sẽ có nhiều cơ hội để sao chép hơn. Thực hiện nhiều lần ta sẽ có cơ hội duyệt qua nhiều lời giải trong không gian tìm kiếm, và cải tiến chúng để có thể thu được lời giải tốt nhất có thể. Quá trình đó sẽđược lặp

lại cho đến khi thoả mãn một sốđiều kiện như số lượng quần thể hoặc đạt lời giải tốt nhất.

Sơ đồ GA:

1. [Bắt đầu] Tạo ra ngẫu nhiên một quần thể gồm n nhiễm sắc thể (phù hợp với lời giải của bài toán)

2. [Độ tương thích] Tính toán giá trị tương thích f(x) cho mỗi nhiễm sắc thểx trong quần thể

3. [Tạo quần thể mới] Tạo quần thể mới bằng cách lặp lại các bước sau cho đến khi quần thể mới được hoàn thành:

9 [Chọn lọc] Chọn hai nhiễm sắc thể bố và mẹ từ quần thể cũ

theo thứ tự độ tương thích (tương thích hơn thì cơ hội được chọn lớn hơn)

9 [Lai ghép] Với một giá trị lai ghép được chọn, tiến hành lai ghép cha mẹ để được con mới. Nếu không chọn được, thì con sẽ là bản sao y nguyên từ cha mẹ

9 [Đột biến] Tiến hành đột biến con mới tại một số vị trí trong nhiễm sắc thể

9 [Chấp nhận] Đưa con mới vào quần thể mới

4. [Thay thế] Dùng quần thể vừa tạo để tiếp tục lặp lại các bước của thuật toán

5. [Điều kiện dừng] Nếu điều kiện cuối cùng được thoả mãn, thuật toán kết thúc và trả lại giá trị tốt nhất trong quần thể hiện tại

Sơ đồ GA vừa phác thảo ở trên mới chỉ rất chung chung, có rất nhiều tham số và các cách sắp đặt khác nhau mà ta có thể áp dụng trong mỗi bài toán khác nhau.

Câu hỏi đầu tiên là làm thế nào để tạo ra một nhiễm sắc thể và phải chọn cách mã hoá nào? Thứ hai là chọn bố mẹ nào để lai ghép. Điều đó có thể

thực hiện được bằng nhiều cách, nhưng ý tưởng chính là hãy chọn các cha mẹ

tốt hơn (tốt nhất đang có) với hi vọng là cha mẹ tốt hơn sẽ sinh ra con tốt hơn. Cũng có thể việc tạo ra các quần thể mới gồm toàn các con mới sẽ làm mất đi các nhiễm sắc thể tốt nhất từ quần thể cũ, do đó ta phải sao chép nguyên bản ít nhất một lời giải tốt nhất trong quần thể cũ sang quần thể mới, làm như

vậy ta có thểđảm bảo được lời giải tốt nhất có thể tồn tại đến khi kết thúc thuật toán.

2.3.1.4 Các toán tử GA

9 Toán tử lai ghép

Sau khi đã quyết định được sử dụng loại mã hoá nào, ta sẽ chuyển sang bước lai ghép. Đầu tiên lựa chọn các gen từ các nhiễm sắc thể cha mẹ và tạo ra con. Cách đơn giản nhất là chọn ngẫu nhiên một điểm lai ghép, rồi sao chép toàn bộ phần trước điểm lai ghép này từ cha và toàn bộ phần sau điểm lai ghép từ mẹ vào con mới.

Toán tử lai ghép có thể mô tả như sau: ( | là điểm lai ghép):

Nhiễm sắc thể 1 (cha) 11011 | 00100110110

Nhiễm sắc thể 2 (mẹ) 11011 | 11000011110

Con 1 11011 |11000011110

Con 2 11011 | 00100110110

Có nhiều cách để tạo toán tử lai ghép, ví dụ như ta có thể chọn nhiều

điểm lai ghép hơn. Toán tử lai ghép khá phức tạp và phụ thuộc chủ yếu vào việc mã hoá nhiễm sắc thể. Chọn được toán tử lai ghép đặc biệt cho bài toán sẽ

làm tăng hiệu quả của giải thuật thuật di truyền. 9 Toán tử đột biến

Sau khi thực hiện lai ghép, ta sẽ tiến hành đột biến. Đột biến sẽ ngăn

được tình trạng tất cả các lời giải trong quần thể đều là cực trị địa phương. Toán tử lai ghép nhằm thay đổi ngẫu nhiên con mới thu được từ quá trình lai ghép. Nếu mã hoá bằng nhị phân, ta có thể biến đổi ngẫu nhiên một số bít từ 1 về 0 hoặc từ 0 thành 1. Ta có thể mô tảđột biến như sau:

Con 1 ban đầu 1101111000011110 Con 2 ban đầu 1101100100110110 Con 1 đột biến 1100111000011110 Con 2 đột biến 1101101100110110

Kĩ thuật đột biến (cũng giống như lai ghép) phụ thuộc chủ yếu vào mã hoá nhiễm sắc thể.

2.3.1.5 Các tham số của GA

9 Xác suất lai ghép và đột biến

Xác suất lai ghép cho biết tần suất thực hiện lai ghép. Nếu không có toán tử lai ghép, con sẽ là bản sao y nguyên của cha mẹ, ngược lại con sẽđược tạo ra từ một số phần thuộc nhiễm sắc thể của cha mẹ. Nếu xác suất lai ghép là 100%, thì toàn bộ các con sẽđược tạo bởi toán tử lai ghép. Nếu xác suất là 0% thì toàn bộ thế hệ mới là bản sao của các nhiễm sắc thể trong thế hệ cũ (nhưng không có nghĩa là mọi thế hệ mới đều giống nhau hoàn toàn).

Thực hiện lai ghép với hi vọng các nhiễm sắc thể mới sẽ giữ các phần tốt của các nhiễm sắc thể cũ và do đó các nhiễm sắc thể mới sẽ tốt hơn. Tuy nhiên sẽ tốt hơn nếu chuyển một số phần của quần thể cũ sang quần thể mới.

Xác suất đột biến cho biết tần suất thực hiện đột biến các nhiễm sắc thể. Nếu không có đột biến, con được tạo ra ngay sau quá trình lai ghép sẽđược giữ

nguyên. Nếu thực hiện đột biến, một hoặc một số phần của nhiễm sắc thể sẽ bị

thay đổi. Nếu xác suất đột biến là 100% thì toàn bộ nhiễm sắc thể sẽ bị thay

đổi, nếu là 0% thì sẽ không có sự thay đổi nào.

Đột biến thường ngăn chặn việc GA không bị rơi bào tình trạng cực trị địa phương, nhưng nếu thực hiện đột biến thường xuyên sẽ làm cho GA trở thành tìm kiếm ngẫu nhiên.

9 Một số tham số khác

Ngoài hai tham số trên, GA còn có một số tham số khác. Một tham số

Kích thước quần thể cho biết có bao nhiêu nhiễm sắc thể trong quần thể

(trong một thế hệ). Nếu có quá ít nhiễm sắc thể, GA sẽ có ít cơ hội thực hiện lai ghép và chỉ có một phần rất nhỏ của không gian tìm kiếm được xem xét. Mặt khác, nếu có quá nhiều nhiễm sắc thể, GA sẽ trở nên chậm chạp. Các nghiên cứu cho thấy sau một số hữu hạn (phụ thuộc chủ yếu vào việc giải mã và bài toán) việc tăng kích thước quần thể sẽ không còn ý nghĩa bởi nó sẽ

không làm cho việc giải bài toán nhanh hơn so với kích thước vừa phải.

2.3.1.6 Chọn lọc

Nhưđã trình bày ở phần sơ đồ GA, các nhiễm sắc thể được lựa chọn từ

quần thể để thực hiện lai ghép. Vấn đề là chọn các nhiễm sắc thể nào. Theo thuyết tiến hoá của Darwin, cách tốt nhất để tồn tại là tạo con mới. Có rất nhiều phương pháp để lựa chọn các nhiễm sắc thể tốt nhất. Ví dụ như chọn lọc theo phương pháp bánh xe Roulette, chọn lọc Boltzman, chọn lọc tranh chấp, chọn lọc xếp hạng, chọn lọc theo trạng thái vững bền, …

Chọn lọc theo phương pháp bánh xe Roulette

Cha mẹđược chọn theo giá trị tương thích của chúng. Các nhiễm sắc thể

tương thích hơn sẽ có cơ hội được chọn nhiều hơn. Tưởng tượng một bánh xe là nơi chứa tất cả các nhiễm sắc thể của quần thể. Khả năng được chọn của mỗi nhiễm sắc thể trong bánh xe Roulette phụ thuộc vào giá trị tương thích của nó, ta có thể mô tả chúng như sau:

Tung một hòn bi cho nó lăn trên bánh xe Roulette, nếu nó dừng ở nhiễm sắc thể nào thì nhiễm sắc thể đó sẽ được chọn. Rõ ràng, nhiễm sắc thể nào có giá trị tương thích lớn hơn sẽ chiếm phần lớn hơn trên bánh xe và như vậy sẽ có nhiều cơ hội được chọn hơn.

Quá trình đó có thểđược mô tả bằng thuật toán sau:

1. [Tổng] Tính tổng tất cả các giá trị tương thích của các nhiễm sắc thể

trong quần thể, gọi tổng đó là S

2. [Chọn lọc] Sinh một số ngẫu nhiên r trong khoảng (0, S)

3. [Vòng lặp] Duyệt qua từng nhiễm sắc thểđể cộng dồn các giá trị

tương thích của chúng, giả sửđang thu được một giá trị là s, nếu s

lớn hơn r thì dừng và trả về nhiễm sắc thểđang duyệt đến

2.3.1.7 Lai ghép và đột biến

Lai ghép và đột biến là hai toán tử cơ bản của GA. Hiệu năng của GA phụ thuộc rất nhiều vào chúng. Kiểu và cách thực hiện hai toán tử này lại phụ

thuộc vào cách mã hoá và bài toán cần giải quyết.

Có nhiều cách để thực hiện lai ghép và đột biến. Trong phần này chỉ mô tả một số ví dụ và đề xuất thực hiện chúng đối với các loại mã hoá đã đề cập ở phần trên.

Lai ghép:

9 Lai ghép một điểm cắt - một điểm cắt được chọn, xâu nhị phân từđầu nhiễm sắc thểđến điểm cắt được sao chép từ cha, phần còn lại được sao chép từ mẹ

9 Lai ghép hai điểm cắt – hai điểm cắt được chọn, xâu nhị phân từ đầu nhiễm sắc thểđến điểm cắt thứ nhất được sao chép từ cha, phần từđiểm cắt đầu tiên thứ nhất đến điểm cắt thứ hai được sao chép từ mẹ và phần còn lại được sao chép từ phần còn lại của cha.

9 Lai ghép đồng dạng - các bit được sao chép ngẫu nhiên từ cha hoặc mẹ.

9 Lai ghép số học - một số phép toán logic được sử dụng để tạo con mới.

+ = 11001011+11011101=11011111 Cha Mẹ Con + = 11001011+11011111=11011111 Cha Mẹ Con + = 11001011 + 11011111 = 11001111 Cha Mẹ Con

Đột biến:

Đảo bit - các bit được chọn sẽđược đảo giá trị.

Một phần của tài liệu Giải thuật di truyền giải bài toán p median có hạn chế khả năng (Trang 56 - 67)

Tải bản đầy đủ (PDF)

(97 trang)