Giải thuật di truyền đơn giản

Một phần của tài liệu Bài toán định vị và cấu trúc topo trong thiết kế mạng (Trang 53)

Một giải thuật di truyền đơn giản có thể mô phỏng như sau:

Bƣớc 1: Khởi tạo một quần thể ngẫu nhiên gồm n cá thể(mỗi cá thể là một chuỗi có độ dài l). Đây chính là không gian tìm kiếm của bài toán.

Bƣớc 2: Tính độ thích nghi f(x) cho từng cá thể x trong quần thể.

Bƣớc 3: Lặp lại các bước sau cho đến khi quần thể mới bao gồm n cá thể.

i. Lựa chọn một cặp cá thể cha mẹ để lai. Có rất nhiều chiến lược lựa chọn nhưng đều phải đảm bảo là khả năng được lựa chọn của cá thể phải tỉ lệ với độ thích nghi của cá thể đó và lựa chọn được thực hiện với sự thay thế, nghĩa là một cá thể có độ thích nghi cao có thể được lựa chọn nhiều lần.

ii. Lai ghép cặp cha mẹ đó với xác suất lai pc. Có thể là lai một điểm cắt hoặc nhiều điểm cắt tuỳ theo từng trường hợp.

iii. Đột biến cá thể con thu được sau lai ghép với xác suất đột biến pm. Nếu kích thước quần thể là lẻ thì một phần tử của quần thể mới được loại bỏ ngẫu nhiên.

Bƣớc 4: Thay thế quần thể hiện tại bằng quần thể mới.

Bƣớc 5: Nếu thoả mãn điều kiện dừng, kết thúc thuật toán

Bƣớc 6: Nếu chưa thoả mãn điều kiện dừng, quay lại bước 2.

Mỗi bước lặp của quá trình trên tạo ra một thế hệ. Số thế hệ của mỗi quần thể có thể từ 50-500 hoặc hơn.

i. Giới hạn số lần lặp. Tức là chương trình sẽ dừng sau một số thế hệ cố định. Số thế hệ này có thể do người dùng cài đặt sao cho thích hợp.

ii. Lặp cho đến khi sau một vài thế hệ mà kết quả không có gì cải thiện (trường hợp này thường rất khó nhưng luôn luôn cho kết quả tốt). Một tỉ lệ hay được dùng trong phương pháp này là khi 2/3 số cá thể có độ thích nghi bằng nhau thì dừng giải thuật.

Tuỳ theo từng bài toán cụ thể và từng cách cài đặt mà ta có thể lựa chọn các điều kiện dừng thích hợp.

3.8. Các chiến lƣợc lựa chọn

3.8.1. Lựa chọn theo cơ chế quay bánh xe Roulette

Trong giải thuật GA nguyên bản ban đầu của Holland thì việc lựa chọn một cá thể hay không tỉ lệ thuận với giá trị độ thích nghi của chúng, và ta định nghĩa giá trị "kì vọng" của một cá thể được tính bằng độ thích nghi của cá thể đó chia cho tổng độ thích nghi của cả thế hệ quần thể đó. Mỗi cá thể sẽ được khai báo một phần trong vòng tròn của bánh xe Roulette mà độ rộng của phần phân chia này tỉ lệ thuận với giá trị kì vọng của chúng.

Cơ chế bánh xe roulette được thực hiện bằng cách quay bánh xe Roulette N

lần, mỗi lần chọn một nhiễm sắc thể từ quần thể hiện hành để làm cha mẹ hay cho vào quần thể mới. Cách lựa chọn này phù hợp với quy luật tự nhiên là các cá thể tốt sẽ tồn tại và thông thường sẽ được chọn để sinh sản, di truyền các tính trạng tốt cho các thế hệ về sau.

Bƣớc 1: Tính tổng độ thích nghi của các cá thể trong quần thể. Ta gọi tổng này là S.

Bƣớc 2: Phát sinh một số ngẫu nhiên r trong khoảng [0…S]

Bƣớc 3: Duyệt lại toàn bộ quần thể, tính tổng độ thích nghi của các cá thể bắt đầu từ nhiễm sắc thể đầu tiên. Ta gọi là s. Khi nào s > r thì ta dừng với nhiễm sắc thể hiện tại.

3.8.2. Lựa chọn xếp hạng

Khi sử dụng phương pháp lựa chọn theo cơ chế bánh xe Roulette thì sẽ xảy ra một tình trạng là các nhiễm sắc thể có độ thích nghi thấp nhất sẽ hầu như không có khả năng được chọn, nhất là khi các nhiễm sắc thể có độ thích nghi cao chiếm đến hơn 90% tổng độ thích nghi và kích thước quần thể nhỏ. Phương pháp lựa chọn xếp hạng được Baker đưa ra vào năm 1985, trong đó mỗi cá thể trong quần thể được xếp hạng theo độ thích nghi của chúng. Như vậy, giá trị kì vọng của cá thể sẽ phụ thuộc vào hạng của nhiễm sắc thể đó.

Phương pháp này mô tả như sau:

Bƣớc 1: Các nhiễm sắc thể được sắp xếp theo thứ tự độ thích nghi tăng dần

Bƣớc 2: "Xếp hạng" cho các nhiễm sắc thể đó. Nhiễm sắc thể đứng đầu dãy đã sắp xếp có hạng là 1,… Nhiễm sắc thể có độ thích nghi lớn nhất, đứng cuối dãy có độ thích nghi là N .

Bƣớc 3: Coi bậc là độ thích nghi mới là hạng. Áp dụng cơ chế quay bánh xe

Roulette.

Phương pháp này đã khắc phục được nhược điểm của cơ chế lựa chọn theo bánh xe Roulette. Tuy nhiên, nếu phương án tối ưu nằm trong số những phương án có độ thích nghi cao thì cơ chế này sẽ dẫn đến sự hội tụ chậm và làm giảm hiệu quả của GA.

3.8.3. Lựa chọn theo vòng đấu

Cơ chế lựa chọn:

Bƣớc 1: Chọn ngẫu nhiên lấy một số nhiễm sắc thể. (Ví dụ: Nếu là lựa chọn

vòng đấu đôi (Binary Tournament Selection) thì chọn ra 2 NST ngẫu nhiên)

Bƣớc 2: Chọn NST tốt nhất (có độ thích nghi cao nhất) trong số các NST vừa

Cơ chế này đảm bảo tính chất ngẫu nhiên cũng như đảm bảo các cá thể tốt có khả năng được lựa chọn cao hơn. Ta có thể dùng vòng đấu đôi (mỗi lần chọn ra 2 cá thể) hoặc vòng đấu có k-đối thủ.

3.8.4. Cơ chế "Elitism"

Đây là cơ chế thường dùng kết hợp với các cơ chế khác. Các cá thể tốt nhất trong quần thể có thể xảy ra hiện tượng bị mất đi do lai ghép, hoặc do đột biến. Cơ chế này đảm bảo việc giữ lại những cá thể tốt nhất trong quần thể tại thời điểm t để cho vào quần thể t+1. Thực nghiệm đã chứng tỏ phương pháp này hoạt động đồng thời với các phương pháp lựa chọn khác cho hiệu quả khá tốt.

Ngoài ra, còn có các chiến lược lựa chọn khác như: cơ chế lấy mẫu SUS ("Stochastic Universal Sampling"), sigma scaling hay Boltzmann, …Trong đó, hầu hết là sử dụng giá trị kì vọng của một cá thể được tính theo những công thức, những hàm của độ thích nghi.

3.9. Mã hóa

Mã hoá nhiễm sắc thể là công việc đầu tiên phải giải quyết khi bắt đầu giải các bài toán bởi GA. Mã hoá phụ thuộc rất lớn vào bài toán cần giải.

Trong phần này, ta sẽ giới thiệu một số phương pháp mã hoá hay được sử dụng và đã mang lại những thành công nhất định.

3.9.1. Mã hoá nhị phân

Mã hoá nhị phân là phương pháp phổ biến nhất, bởi các nhà nghiên cứu đầu tiên về GA đã sử dụng nó, hơn nữa nó cũng tương đối đơn giản.

Trong mã hoá nhị phân, mỗi nhiễm sắc thể được mã hoá bởi các bit 0 hoặc 1. Nhiễm sắc thể A 101100101100101011100101

Nhiễm sắc thể B 111111100000110000011111

Ví dụ: Xét Bài toán cái túi: Cho trước một số đồ vật với giá trị và kích thước của nó. Cái túi có sức chứa hạn chế. Hỏi rằng phải lựa chọn các đồ vật nào cho vào túi để tổng giá trị là lớn nhất, nhưng vẫn không vượt sức chứa cái túi.

Ta có thể mã hoá lời giải của bài toán này bởi dãy bít, mỗi bit cho biết đồ vật tương ứng có trong túi hay không.

3.9.2. Mã hoá hoán vị

Mã hoá hoán vị được sử dụng trong các bài toán liên quan đến thứ tự, như bài toán người du lịch hoặc bài toán thứ tự nhiệm vụ.

Trong mã hoá hoán vị, mỗi nhiễm sắc thể là một xâu các số tương ứng với vị trí trong dãy.

Nhiễm sắc thể A 1 5 3 2 6 4 7 9 8 Nhiễm sắc thể B 8 5 6 7 2 3 1 4 9

Hình 3.2. Ví dụ về các nhiễm sắc thể được mã hoá hoán vị

Ví dụ: Xét 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. Một người du lịch muốn đi thăm quan tất cả các thành phố, mỗi thành phố đúng một lần. Hãy tìm hành trình với tổng độ dài đường đi là nhỏ nhất.

Đối với bài toán này có thể sử dụng cách mã hoá sau đây: Mỗi nhiễm sắc thể được mô tả theo thứ tự các thành phố mà người du lịch phải đi qua.

3.9.3. Mã hoá theo giá trị

Mã hoá trực tiếp theo giá trị có thể được dùng trong các bài toán sử dụng các giá trị phức tạp, ví dụ như số thực. Sử dụng mã hoá nhị phân cho kiểu bài toán này sẽ rất khó khăn.

Trong mã hoá theo giá trị, mỗi nhiễm sắc thể là một dãy các giá trị. Các giá trị là những gì liên quan đến bài toán, như các số, các kí tự hoặc là các đối tượng.

Nhiễm sắc thể A 1.2324 5.3243 0.4556 2.3293 2.4545 Nhiễm sắc thể B ABDJEIFJDHDIERJFDLDFLFEGT Nhiễm sắc thể C (sau), (phải), (trước), (trái), (phải) Hình 3.3. Ví dụ về các nhiễm sắc thể được mã hoá theo giá trị.

3.9.4. Mã hoá theo cây

Mã hoá theo cây chủ yếu được sử dụng trong các bài toán suy luận hoặc biểu thức. Trong mã hoá theo cây, mỗi nhiễm sắc thể là một cây gồm các đối tượng, như các hàm hoặc các lệnh của ngôn ngữ lập trình.

Nhiễm sắc thể A Nhiễm sắc thể B

( + x ( / 5 y ) ) ( do_until step wall ) Hình 3.4. Ví dụ về các nhiễm sắc thể mã hoá theo cây.

Ví dụ: Phép xấp xỉ hàm: Cho trước một số giá trị vào và ra. Cần tìm một hàm số

cho các đầu ra tốt nhất (gần với giá trị mong muốn nhất) với tất cả các đầu vào. Mã hoá: Nhiễm sắc thể là các hàm được biểu diễn trên một cây.

do until

step wall

+

x /

3.10. 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.

3.10.1. Lai ghép và đột biến đối với mã hoá nhị phân Lai ghép Lai ghép

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ẹ.

Hình 3.5. Lai ghép 1 điểm cắt với mã hóa nhị phân

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.

Hình 3.6. Lai ghép 2 điểm cắt với mã hóa nhị phân

+ = 11001011+11011111=110111 11 Cha Mẹ Con + = 11001011 + 11011111 = 11001111 Cha Mẹ Con

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

Hình 3.7. Lai ghép đồng dạng với mã hóa nhị phân

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

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

Đột biến: Đảo bit - các bit được chọn sẽ được đảo giá trị.

Hình 3.9. Đột biến với mã hóa nhị phân

3.10.2. Lai ghép và đột biến đối với mã hoá hoán vị Lai ghép Lai ghép

11001001 => 11011001 Sau lai ghép Sau đột biến

+ = 11001011+11011101=11001001 (AND) Cha Mẹ Con + = 11001011+11011101=11011111 Cha Mẹ Con

Lai ghép một điểm cắt - một điểm cắt được chọn, từ đầu đến điểm cắt được sao chép từ cha, sau đó mẹ được duyệt qua và nếu số nào chưa có trong con thì sẽ được chép sang con.

Chú ý: Có nhiều cách để tạo ra phần còn lại ở sau điểm cắt.

(1 2 3 4 5 6 7 8 9) + (4 5 3 6 8 9 7 2 1) = (1 2 3 4 5 6 8 9 7)

Đột biến

Thay đổi theo thứ tự - hai số được chọn ra để đổi chỗ. (1 2 3 4 5 6 8 9 7) => (1 8 3 4 5 6 2 9 7)

3.10.3. Mã hoá theo giá trị Lai ghép Lai ghép

Tất cả các loại lai ghép ở phần mã hoá nhị phân đều có thể áp dụng được.

Mã hoá

Cộng một số nhỏ (nếu là mã hoá giá trị thực) - các giá trị được chọn sẽ được cộng hoặc trừ với số nhỏ.

(1.29 5.68 2.86 4.11 5.55) => (1.29 5.68 2.73 4.22 5.55)

3.10.4. Mã hoá theo câyLai ghép Lai ghép

Lai ghép theo cây - cả cha và mẹ đều sử dụng một điểm cắt, trao đổi phần dưới điểm cắt của cha và mẹ cho nhau để tạo ra con.

Hình 3.10. Lai ghép theo cây với mã hóa theo cây

Đột biến

CHƢƠNG 4

GIẢI THUẬT DI TRUYỀN

GIẢI BÀI TOÁN ĐỊNH VỊ CÁC NÚT MẠNG LIÊN KẾT

4.1. Phát biểu bài toán Các chỉ số: Các chỉ số:

i = 1, 2, ..., n : chỉ số các vùng truy cập cần được kết nối;

j = 1, 2, ..., m : chỉ số các vị trí kết nối có thể.

Các hằng số:

ξij : chi phí kết nối vùng i đến vị trí kết nối j, ηj: chi phí đặt j làmvị trí kết nối, nếu j mở.

Kj : số vùng truy cập tối đa có thể xử lý bởi vị trí kết nối j.

Các biến:

uij= 1, nếuvùng i được kết nối ở vị trí j, và bằng 0 nếu ngược lại

rj = 1, nếu nút j được chọn làm vị trí kết nối, và bằng 0 nếu ngược lại.

Hàm mục tiêu: Cực tiểu hóa: F = j j j ij i j ijur     Các ràng buộc : 1  juij , i = 1, 2, ..., n (1) j j i ijuK r  , j = 1, 2, ..., m (2)

Điều kiện (1) khẳng định mỗi một vùng chỉ có thể được kết nối với duy nhất một vị trí kết nối (site).

Điều kiện thứ (2) khẳng định mỗi vị trí kết nối j chỉ có thể xử lý Kj vùng. Ta cần chọn một tập hợp con các vị trí nút liên kết, j =1, 2…, m để đặt vị trí kết nối nhằm tối thiểu hóa tổng chi phí đặt vị trí và chi phí truy cập.

4.2. Mã hóa

Mỗi một NST là một vectơ n chiều (e1, e2, …, en) với các thành phần là các số nguyên từ tập {1, .., m}, trong đó ei là vị trí kết nối mà vùng truy cập i được kết

nối đến.

Ví dụ: n = 8, m = 3, xét NST {2, 1, 3, 3, 1, 1, 2, 1}

Ta có: các vùng truy cập 2, 5, 6 ,8 được kết nối với vị trí kết nối 1; hai vùng truy cập 1 và 7 được kết nối với vị trí kết nối 2; hai vùng truy cập 3 và 4 được kết nối với vị trí kết nối 3.

Tuy nhiên, cách biểu diễn này có thể dẫn đến nghiệm không khả thi cho bài toán, vì nó không đảm bảo ràng buộc số vùng xử lý tối đa được thỏa mãn. Vì thế, ta ký hiệu:

sj = 0 nếu *

|Ij |Kj, trong đó *

j

I là tập các vùng truy cập được kết nối đến vị trí kết nối j. sj = *

j j

IK , nếu ngược lại

Như vậy, một nghiệm khả thi khi và chỉ khi sj = 0, j = 1, 2,..., m. Do đó, cấp độ không khả thi của một nghiệm x là: 

  m j j s x u 1 ) ( .

4.3. Giải mã của thuật toán di truyền

Sơ đồ chung của các thuật toán di truyền trong mục này được mô tả trong thủ tục GENERAL() sau đây:

Procedure GENERAL()

Khởi tạo Pop sử dụng Init_Pop();

For mỗi cá thể zPop

zImp_Sol(z); Đánh giá z sử dụng Eval_Sol(z); endfor Fort =1 to MaxGen Fork = 1 to MaxCross Chọn 2 cá thể z1, z2; New_zCros_Sol(z1, z2);

New_zMut_Sol(New_z);

New_zImp_Sol(New_z);

endfor

z New_z ;

Endfor

Thủ tục này sử dụng 5 thủ tục: Init_Pop(), Cros_sol(), Mut_Sol(), Eval_sol() và Imp_Sol():

 Thủ tục Init_Pop() thực hiện việc khởi tạo quần thể;

 Thủ tục Cros_sol() và Mut_Sol() thực hiện các toán tử di truyền;

 Thủ tục Imp_Sol() thực hiện việc cải thiện chất lượng của một lời giải cho trước.

 Thủ tục Eval_Sol() được dùng để định giá chất lượng của NST, bằng cách xem xét 2 giá trị, chi phí c(x) và cấp độ không khả thi u(x) của nghiệm, trong đó: c(x) là giá trị của hàm mục F = j j j ij i j ijur

Một phần của tài liệu Bài toán định vị và cấu trúc topo trong thiết kế mạng (Trang 53)

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

(93 trang)