Tính toán tiến hóa được I. Rechenberg giới thiệu vào những năm 1960 trong công trình “Evolution Stragies” (Những chiến lược tiến hóa). Ý tưởng của ông đã được các nhà khoa học nghiên cứu phát triến tiếp.
Giải thuật di truyền do John Holland phát minh và được ông phát triển cùng với các đồng nghiệp và sinh viên. Cuốn sách "Adaption in Natural and Artificial Systems" (Sự thích nghi trong các hệ tự nhiên và nhân tạo) xuất bản năm 1975 đã tổng hợp các kết quả của quá trình nghiên cứu và phát triển đó.
Năm 1992, John Koza đã dựng GA để xây dựng các chương trình giải quyết một số bài toán và gọi phương pháp này là "Genetic Programming" (GP).
Năm 1996, thư viện các hàm C++ cho GA (GALib) đã được Mathew Wall, trường Đại học Massachussets (Massachusetts Institute of Technology) đưa ra. Đây là các công cụ sử dụng giải thuật di truyền cho tối ưu hoá các chương trình có sử dụng sự biểu diễn hay các toán tử di truyền.
Ngày nay giải thuật di truyền càng trở nên quan trọng, đặc biệt là trong lĩnh vực tối ưu hoá, một lĩnh vực có nhiều bài toán thú vị, được ứng dụng nhiều trong thực tiễn nhưng thường khó và chưa có giải thuật hiệu quả để giải .
2. Các khái niệm cơ bản
2.1. Nhiễm sắc thể (Chromosome)
Nhiễm sắc thể (NST) hay còn gọi là cá thể. Các sinh vật sống đều cấu tạo từ cá tế bào, và tất cả các tế bào này đều bao gồm một tập hợp các nhiếm sắc thể giống nhau. Các NST này là một chuỗi các AND, quy định đặc tính của cả cá thể. Mỗi NST bao gồm rất nhiều GEN, mỗi gen quy định một trạng thái nào đó.
Trong bài toán tối ưu, cá thể tương ứng với một lời giải tiềm tàng.
2.2. Quần thể (Population)
Quần thể trong tự nhiên là một tập hợp các cá thể có cùng một số đặc điểm nào đấy. Trong giải thuật di truyền ta quan niệm quần thể là một tập các lời giải tiềm tàng
của một bài toán.
2.3. Chọn lọc (Selection)
Trong tự nhiên, quá trình chọn lọc và đấu tranh sinh tồn đã làm thay đổi các cá thể trong quần thể. Những cá thể tốt, thích nghi được với điều kiện sống thì có khả năng đấu tranh lớn hơn, do đó có thể tồn tại và sinh sản. Các cá thể không thích nghi được với điều kiện sống thì dần mất đi. Dựa vào nguyên lý của quá trình chọn lọc và đấu tranh sinh tồn trong tự nhiên, chọn lựa các cá thể trong GA chính là cách chọn các cá thể có độ thích nghi tốt để đưa vào thế hệ tiếp theo hoặc để cho lai ghép, với mục đích là sinh ra các cá thể mới tốt hơn. Tuy nhiên, quá trình chọn lọc mang rất nhiều yếu tố ngẫu nhiên. Có nhiều cách để lựa chọn nhưng cuối cùng đều nhằm đáp ứng mục tiêu là các cá thể tốt sẽ có khả năng được chọn cao hơn.
2.4. Lai ghép (CrossOver)
Lai ghép trong tự nhiên là sự kết hợp các tính trạng của bố mẹ để sinh ra thế hệ con. Trong giải thuật di truyền, lai ghép được coi là một sự tổ hợp lại các tính chất (thành phần) trong hai lời giải cha mẹ nào đó để sinh ra một lời giải mới mà có đặc tính mong muốn là tốt hơn thế hệ cha mẹ. Đây là một quá trình xảy ra chủ yếu trong giải thuật di truyền.
2.5. Đột biến (Mutation)
Đột biến là một sự biến đổi tại một (hay một số) gen của NST ban đầu để tạo ra một NST mới. Đột biến có thể tạo ra một cá thể mới tốt hơn hoặc xấu hơn cá thể ban đầu. Tuy nhiên trong giải thuật di truyền thì ta luôn muốn tạo ra những phép đột biến cho phép cải thiện lời giải qua từng thế hệ. Đột biến cũng mang tính chất ngẫu nhiên.
2.6. Hàm thích nghi (Fitness Function)
Trong tự nhiên, chỉ có những cá thể nào thích nghi được với môi trường thì mới tồn tại, không nó sẽ bị diệt vong. GA đưa ra khái niệm hàm thích nghi, hay hàm sức khỏe để đánh giá một cá thể hay một lời giải, so với các cá thể khác. Từ đó mới có thể chọn lựa được các lời giải tốt cho các thế hệ sau. Hàm thích nghi cũng là một tiêu chí đánh giá mức độ tiến hóa của quần thể.
3. Không gian tìm kiếm (Search Space)
Không gian của tất cả các lời giải khả thi được gọi là không gian tìm kiếm (hay không gian trạng thái). Mỗi một điểm trong không gian tìm kiếm biểu diễn cho 1 lời giải. Mỗi lời giải được đánh dấu bằng giá trị hay sức khỏe của nó trong bài toán. Với GA, ta tìm kiếm lời giải tốt nhất trong số các lời giải trong không gian tìm kiếm.
Vấn đề là việc tìm kiếm rất là phức tạp. Lời giải sẽ được tìm ở đâu, và bắt đầu từ đâu. Có rất nhiều cách để tìm lời giải thích hợp, nhưng những phương pháp này có thể không cần phải đưa ra lời giải tốt nhất như các giải thuật leo đồi (hill climbing), tìm kiếm tabu (tabu search), mô phỏng tôi luyện (simulated annealing) và giải thuật di truyền (genetic algorithm).
4. Mô tả GA
GA được lấy cảm hứng từ Thuyết tiến hóa của Darwin. Lời giải của một bài toán được giải bằng GA sử dụng quá trình tiến hóa.
Giải thuật bắt đầu bằng một tập các lời giải, được biểu diễn bằng các NST, gọi là Quần Thể. Các lời giải này được lấy ra và sử dụng để tạo nên quần thể mới, với một mong muốn quấn thể mới sẽ tốt hơn quần thể cũ. Những lời giải được chọn từ quần thể mới hay thế hệ con cháu theo độ thích nghi. Chúng càng thích nghi cao, chúng càng có nhiều cơ hội để tái sinh sản.
Với các khái niệm được giới thiệu ở trên, giải thuật di truyền được mô tả như sau: 1. [ Bắt đầu ] Sinh ngẫu nhiên một quần thể gồm n cá thể (là n lời giải cho bài toán)
2. [ Thích nghi ] Ước lượng độ thích nghi eval(x) của mỗi cá thể x trong quần thể
3. [ 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 hoàn thành
a. [Chọn lọc] Chọn hai cá thể bố mẹ từ quần thể cũ theo độ thích nghi của chúng (cá thể có độ thích nghi càng cao thì càng có nhiều khả năng được chọn)
b. [Lai ghép] Với một xác suất lai ghép được chọn, lai ghép hai cá thể bố mẹ để tạo ra một cá thể mới
c. [Đột biến] Với một xác suất đột biến được chọn, biến đổi cá thể mới d. [Chấp nhận] Thay con mới vào quần thể
4. [Thay thế] Sử dụng quần thể mới cho quá trình tiếp theo của thuật toán
5. [Thử nghiệm] Nếu điều kiện dừng được thoã mãn thì thuật toán kết thúc và trả về lời giải tốt nhất trong quần thể hiện tại
6. [Vòng lặp ] Quay lại bước 2
Mô tả giải thuật di truyền theo ngôn ngữ giả PASCAL
1. Procedure GTDiTruyen 2. Begin
3. t := 0;
4. Khởi tạo quần thể P(0);
5. Tính giá trị thích nghi của các cá thể trong P(t);
6. While not Điều_kiện_kết_thúc do
7. Begin
8. Chọn lọc và tái tạo từ P(t) ; 9. Lai ghép các cá thể đã chọn lọc; 10. Đột biến các cá thể con cháu;
11. Tính độ thích nghi của các cá thể trong P(t); 12. Tạo lập P(t+1) từ P(t);
13. t = t+1;
14. end;
15. Trả về cá thể tốt nhất trong P(t).
Sau một bước lặp t, một quần thể mới P(t) được tạo ra từ P(t-1), hay một tập các lời giải tiềm tàng cho bài toán. Sau mỗi bước lặp, các cá thể mới được sinh ra hoàn toàn ngẫu nhiên, ngẫu nhiên từ khi tạo quần thể ban đầu, cho đến ngẫu nhiên chọn lọc các cá thể bố mẹ mang đi lai ghép, ngẫu nhiên cả trong quá trinh lai ghép gen, cho đến đột biến gen. Nó hoàn toàn giống như một quá trình tiến hóa trong tự nhiên. Với nguyên tắc chung của GA rất khái quát như vậy, cần quan tâm đến các tham số và sự sắp đặt mà từ đó ta có thể áp dụng để giải nhiều các bài toán khác nhau.
• NST được tạo ra như thế nào, và mã hóa chúng như thế nào?
• Lựa chọn cha mẹ để lai ghép như thế nào? Có nhiều cách khác nhau để lựa chọn, nhưng ý tưởng chủ đạo luôn là chọn những bố mẹ tốt hơn với hi vọng sinh ra con cái cũng sẽ tốt hơn.
• Sự chọn lựa các gen để đột biến cũng là một vấn đề phải quan tâm. Đột biến không phải lúc nào cũng mang lại kết quả tốt, thậm chí còn mang lại kết quả ngược lại.
5. Các tham số của GA
5.1. Kích thước quần thể
Kích thước quần thể cho biết có bao nhiêu cá thể trong một quần thể (trong một thế hệ). Tuy nhiên khi kích thước quá lớn cũng không thể cải thiện được hiệu suất tìm ra kết quả tối ưu. Qua các nghiên cứu cũng như các thử nghiệm đã cho thấy kích thước quần thể không nên quá bộ cũng như không quá lớn. Nếu có quá ít cá thể thì ít có khả năng thực hiện lai giống và chỉ một phần nhỏ không gian tìm kiếm được dựng. Như vậy sẽ dễ xảy ra trường hợp bỏ qua các lời giải tốt, các thế hệ sẽ thoái hóa dần theo quá trình. Nhưng quá nhiều cá thể cũng không tốt vì GA sẽ chạy chậm đi, ảnh hưởng đến hiệu quả của giải thuật. Các nghiên cứu cũng đã chỉ ra không có lợi khi tăng kích thước quần thể lên quá một giới hạn cho phép. Ngoài ra, chất lượng lời giải còn phụ thuộc vào phương pháp mã hóa.
5.2. Xác suất lai ghép
Xác suất lai ghép cho biết việc lai ghép tạo ra thế hệ mới được thực hiện thường xuyên như thế nào. Xác suất lai ghép là pc , khi đó khả năng để một cá thể được lai ghép là pc. Nếu không thực hiện lai ghép, con sinh ra sẽ giống hoàn toàn bố mẹ. Nếu được lai ghép, con sinh ra sẽ có một phần giống bố và một phần giống mẹ. Nếu xác xuất lai ghép pc = 100% thì tất cả con sinh ra là do lai ghép, còn nếu pc = 0%, toàn bộ thế hệ mới là sự sao chép chính xác thế hệ cũ.
5.3. Xác suất đột biến
Xác suất đột biến cho biết các gen của nhiễm săc thể thay đổi thường xuyên như thế nào. Xác suất đột biến là pm, khả năng để mỗi gen của một NST bất kỳ bị đột biến là pm. Nếu pm = 100%, toàn bộ NST đều bị đột biến, nếu pm = 0%, không gen nào thay đổi. Toán tử đột biến có tác dụng ngăn ngừa giải thuật di truyền rơi vào tình trạng cực trị địa phương Tuy nhiên nếu thực hiện đột biến với xác suất quá cao sẽ biến giải thuật di truyền thành giải thuật tìm kiếm ngẫu nhiên.
6. Khởi tạo quần thể ban đầu và chọn lọc cá thể
6.1. Khởi tạo quần thể
Khởi tạo quần thể là bước đầu tiên của bài toán theo GA. Quần thể ban đầu thường được sinh ra một cách ngẫu nhiên, bao gồm các lời giải ngẫu nhiên thỏa mãn các điều kiện của bài toán nhưng ta chưa biết chắc được liệu nó có phải là lời giải tối ưu hay không? Tùy thuộc vào bài toán khác nhau mà ta có các cách khởi tạo quần thể khác nhau. Cũng như trong tự nhiên, nếu chất lượng của quần thể ban đầu càng tốt, ta càng hi vọng các thế hệ sau sẽ ngày càng tốt hơn. Do đó, khi tính toán giải thuật để tạo quần thể ban đầu, chúng ta cố gằng tìm những cách có thể đưa ra những lời giải tiềm tàng chấp nhận được.
VD: Nếu giải các bài toán về đồ thị và cây, để tìm đồ thị hay cây có trọng số nhỏ nhất, các cá thể xuất phát cũng nên có trọng số đủ nhỏ.
6.2. Hàm tính độ thích nghi
Theo các nghiên cứu và các thử nghiệm của nhiều nhà nghiên cứu về giải thuật di truyền thì hàm tính độ thích nghi là một trong hai yếu tố quan trọng nhất quyết định sự thành công hay thất bại của GA. Hàm thích nghi được xây dựng sao cho giá trị thích nghi phải phản ánh được giá trị thực của NST trong việc đáp ứng yêu cầu của bài toán. Hàm thích nghi càng tốt thì cá thể càng có khả năng di truyền cao.
Ví dụ: Trong các bài toán về cây khung nhỏ nhất thì hàm thích nghi sẽ là hàm tính tổng trọng số các cạnh trên các cây khung.
Trong bài toán tìm giá trị min của một hàm, thì hàm thích nghi chính là giá trị hàm tại các điểm đang xét.
Trong bài toán tìm hàm từ dữ liệu cho trước thì hàm thích nghi tính giá trị của các lời giải tiềm tàng tại các giá trị input. Nếu nó càng gần với các giá trị output đầu bài thì lời giải càng tốt.
6.3. Chọn lọc
Theo cơ chế di truyền, thế hệ P(t) sẽ sinh ra thế hệ sau P(t+1). Có nhiều cách để lựa chọn các cá thể từ một quần thể. Sau đây sẽ giới thiệu một số cơ chế hay áp dụng. Để tiện mô tả các cơ chế lựa chọn ta đưa ra một số kí hiệu sau:
• Cách biểu diễn các NST thứ i là vi
• Hàm tính độ thích nghi của NST vi là f(vi).
• Kích thước quần thể là pop_size.
• Số NST cần chọn là N.
6.3.1 Lựa chọn theo bánh xe Roulet
Trước khi lựa chọn thì tính các giá trị sau :
• Tính tổng độ thích nghi của cả quần thể : F =
• Tính vị trí xác suất qi của mỗi NST : qi=
Cơ chế lựa chọn theo bánh xe Roulet được thực hiện bằng cách quay bánh xe Roulet N lần. Mỗi lần chọn một NST từ quần thể hiện hành vào quần thể mới bằng cách sau :
Hình 2.1. Xác suất của mỗi NST theo kiểu lựa chọn Roulet.
• Phát sinh ngẫu nhiên một số r trong khoảng [0,1].
• Nếu r < q1 thì chọn NST v1; ngược lại thì chọn NST thứ i ( 2 ≤i ≤pop_size) sao cho qi-1≤r≤ qi.
Với cơ chế lựa chọn như thế này thì có một số nhiếm sắc thể sẽ được chọn nhiều lần. Điều này phù hợp với lý thuyết lược đồ: Các NST tốt nhất thì có nhiều bản sao, NST trung bình thì không đổi , NST kém thì chết đi [11].
Hoặc lựa chọn kiểu bánh xe Roulet có thể mô tả theo thuật toán sau:
(1)[SUM] Tính tổng giá trị thích nghi S của tất cả các cá thể hay nhiễm săc thể trong toàn quần thể.
(2)[SELECT] sinh một số ngẫu nhiên trên đoạn (0 ..S) ta được r.
(3)[LOOP] duyệt lại toàn bộ quần thể, tính tổng hàm thích nghi từ 0, ta gọi là s. Khi nào s > r thì ta dừng lại với nhiễm sắc thể hiện tại.
6.3.2 Lựa chọn xếp hạng
Theo cơ chế lựa chọn trên khi sự khác biệt giữa các hàm thích nghi lớn, các NST có độ thích nghi kém sẽ rất ít có cơ hội được lựa chọn, nhất là khi có các NST tốt có độ thích nghi trên 90%.
Hình 2.2. Trạng thái quần thể trước khi sắp xếp (đồ thị theo hàm thích nghi) Cơ chế lựa chọn xếp hạng được mô tả như sau:
• Đặt lại độ thích nghi cho quần thể đã sắp xếp theo kiểu: NST thứ nhất có độ thích nghi là 1, nhiễm săc thể thứ hai có độ thích nghi là 2, v.v…, NST thứ
pop_size có độ thích nghi là pop_size.
Theo phương pháp này việc một NST được chọn nhiều lần như trong lựa chọn theo kiểu bánh xe Roulet đã giảm đi. Nhưng nó có thể dẫn đến sự hội tụ chậm và NST có độ thích nghi cao cũng không khác mấy so với các NST khác.
Hình 2.3. Trạng thái quần thể sau khi sắp xếp (đồ thị theo thứ tự)
6.3.3. Lựa chọn theo cơ chế lấy mẫu ngẫu nhiên
Cơ chế lựa chọn:
• Biểu diễn xác suất chọn các NST lên trên một đường thẳng.
• Đặt N điểm chọn lên đường thẳng. Các điểm chọn này cách nhau 1/N, điểm đầu tiên đặt ngẫu nhiên trong khoảng [0,1/N].
• Với một điểm chọn, NST gần với nó nhất về bên phải sẽ được chọn.
Phương pháp này có đặc điểm là các điểm chọn được phân bố đều trên trục số, do đó sẽ gần với điểm xứng đáng được chọn.
6.3.4. Lựa chọn cạnh tranh
Hay còn được gọi là lựa chọn theo trạng thái ổn định. Cơ chế lựa chọn :
• Lấy một số NST trong quần thể ra để chọn, NST có độ thích nghi cao nhất được chọn.
• Lặp lại thao tác trên N lần
7. Các toán tử di truyền