Ví dụ, một mạng máy tính môphỏng bằng đồ thị thì trọng số có thể là khoảng cách vật lý hoặc thông lượng truyền dữ liệu giữa hai máy tính được nối trực tiếp trong mạng, một mạng lưới giao
Trang 1Giải thuật di truyền giải bài toán cây Steiner
MỤC LỤC
DANH MỤC HÌNH 4
DANH MỤC BẢNG 6
LỜI MỞ ĐẦU 7
CHƯƠNG 1 8
GIỚI THIỆU BÀI TOÁN 8
1 MỘT SỐ CÁC KHÁI NIỆM CƠ SỞ 8 1.1 Đồ thị 8
1.2 Cấu trúc dữ liệu biểu diễn đồ thị 11
2.3 Danh sách kề 12
1.3 Các thuật toán trên đồ thị 13
1.4 Bài toán tối ưu 19
2 BÀI TOÁN CÂY STEINER 23 2.1 Lịch sử bài toán cây Steiner 23
2.2 Lời giải cho bài toán 3 điểm của Fermat 24
2.3 Hệ số Steiner cho trường hợp ba điểm 27
2.4 Mô tả bài toán cây Steiner trên đồ thị 28
2.5 Một số ứng dụng của bài toán 28
2.6 Các thuật toán giải đúng 31
CHƯƠNG 2 35
GIẢI THUẬT DI TRUYỀN 35
1 GIỚI THIỆU VÀ LỊCH SỬ PHÁT TRIỂN 35 2 CÁC KHÁI NIỆM CƠ BẢN 35 2.1 Nhiễm sắc thể (Chromosome) 35
2.2 Quần thể (Population) 35
2.3 Chọn lọc (Selection) 36
2.4 Lai ghép (CrossOver) 36
2.5 Đột biến (Mutation) 36
2.6 Hàm thích nghi (Fitness Function) 36
3 KHÔNG GIAN TÌM KIẾM (SEARCH SPACE) 36 4 MÔ TẢ GA 36 5 CÁC THAM SỐ CỦA GA 38 5.1 Kích thước quần thể 38
5.2 Xác suất lai ghép 38
5.3 Xác suất đột biến 38
6 KHỞI TẠO QUẦN THỂ BAN ĐẦU VÀ CHỌN LỌC CÁ THỂ 38 6.1 Khởi tạo quần thể 38
6.2 Hàm tính độ thích nghi 39
6.3 Chọn lọc 39
Trang 2Giải thuật di truyền giải bài toán cây Steiner
7.1 Mã hóa nhiễm sắc thể 41
7.2 Lai ghép (CrossOver) 43
7.3 Đột biến (Mutation) 45
8 CHIẾN LƯỢC NẠP LẠI QUẦN THỂ 47 8.1 Nạp lại hoàn toàn 47
8.2 Nạp lại ngẫu nhiên 47
8.3 Nạp lại theo mô hình cá thể ưu tú 47
9 ĐIỀU KIỆN DỪNG CỦA GA 48 10 ĐẶC ĐIỂM VÀ ỨNG DỤNG CỦA GA 48 10.1 Đặc điểm 48
10.2 Ứng dụng 49
CHƯƠNG 3 50
GIẢI THUẬT DI TRUYỀN GIẢI BÀI TOÁN CÂY STEINER 50
1 MÃ HÓA LỜI GIẢI 50 2 PHƯƠNG PHÁP KHỞI TẠO QUẦN THỂ BAN ĐẦU 51 3 CHỌN LỌC 52 3.1 Chọn lọc xếp hạng tuyến tính 52
3.2 Chọn lọc xếp hạng phi tuyến 52
3.3 Chọn lọc cạnh tranh 52
4 LAI GHÉP 52 4.1 Lai ghép hai cha mẹ 52
4.2 Lai ghép nhiều cha mẹ 53
5 ĐỘT BIẾN 53 5.1 Đột biến chuẩn 53
5.2 Đột biến đổi chỗ 54
5.4 Phép đột biến thêm đỉnh 55
5.5 Phép đột biến xóa đỉnh 55
6 TỐI ƯU CÂY 55 CHƯƠNG 4 57
KẾT QUẢ THỰC NGHIỆM 57
1 DỮ LIỆU THỬ NGHIỆM 57 1.2 Đặc điểm dữ liệu 57
1.3 Định dạng file dữ liệu vào 58
2 MÔI TRƯỜNG THỬ NGHIỆM 59 3 CÀI ĐẶT THỬ NGHIỆM 60 3.1 Các tham số 60
3.2.Các hàm chính trong chương trình 63
4 KẾT QUẢ THỬ NGHIỆM 64 4.1.Các bảng kết quả 64
Trang 3Giải thuật di truyền giải bài toán cây Steiner
4.2.So sánh các kết quả 71
CHƯƠNG 5 74 HƯỚNG DẪN SỬ DỤNG CHƯƠNG TRÌNH 74
2 CHẠY CHƯƠNG TRÌNH GIẢI BÀI TOÁN CHO MỘT FILE DỮ LIỆU VÀO 74
3 CHẠY CHƯƠNG TRÌNH GIẢI BÀI TOÁN CHO NHIỀU FILE DỮ LIỆU VÀO 74
KẾT LUẬN 75 TÀI LIỆU THAM KHẢO 76
Trang 4DANH MỤC HÌNH
HÌNH 1.1 ĐỒ THỊ VÔ HƯỚNG (TRÁI) VÀ ĐỒ THỊ CÓ HƯỚNG (PHẢI) 8
HÌNH 1.2 ĐỒ THỊ VÔ HƯỚNG LIÊN THÔNG 9
HÌNH 1.3 CÂY 10
HÌNH 1.4 ĐỒ THỊ VÀ CÂY KHUNG 10
HÌNH 1.5 ĐỒ THỊ VÀ CÂY KHUNG NHỎ NHẤT 10
HÌNH 1.6 BIỂU DIỄN ĐỒ THỊ BẰNG MA TRẬN KỀ 11
HÌNH 1.7 BIỂU DIỄN ĐỒ THỊ BẰNG DANH SÁCH CẠNH CUNG 12
HÌNH 1.8 DANH SÁCH KỀ VÀ MA TRẬN KỀ TƯƠNG ỨNG 13
HÌNH 1.9 ĐƯỜNG ĐI NGẮN NHẤT ĐẾN CÁC ĐỈNH CÒN LẠI 17
HÌNH 1.10 ĐỒ THỊ CÓ HƯỚNG KHÔNG CÓ CHU TRÌNH ÂM 18
HÌNH 1.11 MẠCH LOGIC, ĐẦU VÀO ĐƯỢC NHẬP TỪ BÊN TRÁI VÀ ĐẦU RA Ở BÊN PHẢI 21
HÌNH 1.12 CÁC LỚP BÀI TOÁN P, NP VÀ CO-NP 22
HÌNH 1.13 PHÂN LỚP TẠM THỜI CÁC BÀI TOÁN 23
HÌNH 1.14 BÀI TOÁN CỦA FERMAT VỚI N=3 24
HÌNH 1.15 GIẢI PHÁP CỦA TORRICELLI 24
HÌNH 1.16 GIẢI PHÁP CỦA SIMPSON 25
HÌNH 1.17 ĐIỀU KIỆN VỀ GÓC 25
HÌNH 1.18 CÂY STEINER CHO BA ĐIỂM 27
HÌNH 1.19 MINH HỌA CHO LỜI GIẢI BÀI TOÁN TÌM HỆ SỐ STEINER .27
HÌNH 1.20 CÂY STEINER TRÊN ĐỒ THỊ LƯỚI 31
HÌNH 2.1 XÁC SUẤT CỦA MỖI NST THEO KIỂU LỰA CHỌN ROULET .40
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) 40
HÌNH 2.3 TRẠNG THÁI QUẦN THỂ SAU KHI SẮP XẾP (ĐỒ THỊ THEO THỨ TỰ) 41
HÌNH 2.4 LAI GHÉP MỘT ĐIỂM CẮT MÃ HÓA NHỊ PHÂN 44
HÌNH 2.5 LAI GHÉP HAI ĐIỂM CẮT MÃ HÓA NHỊ PHÂN 44
HÌNH 2.6 LAI GHÉP ĐỒNG NHẤT MÃ HÓA NHỊ PHÂN 44
Trang 5HÌNH 2.7 LAI GHÉP SỐ HỌC MÃ HÓA NHỊ PHÂN 45
HÌNH 2.8 LAI GHÉP VỚI LƯU TRỮ CẤU TRÚC CÂY 45
HÌNH 2.9 PHÉP ĐỘT BIẾN VỚI MÃ HÓA CẤU TRÚC CÂY 46
HÌNH 2.10 CHIẾN LƯỢC NẠP LẠI HOÀN TOÀN 47
HÌNH 2.11 CHIẾN LƯỢC NẠP LẠI NGẪU NHIÊN 47
HÌNH 2.12 NẠP THEO MÔ HÌNH CÁ THỂ ƯU TÚ 47
HÌNH 3.1 ĐỒ THỊ CON VÀ MÃ TƯƠNG ỨNG 50
HÌNH 3.2 HAI TRONG SỐ NHIỀU ĐỒ THỊ CON TƯƠNG ỨNG VỚI CHUỖI MÃ 1110110 51
HÌNH 3.3 MINH HỌA NHIỄM SẮC THỂ HỢP LỆ 51
HÌNH 3.4 LAI GHÉP HAI CHA MẸ 53
HÌNH 3.5 LAI GHÉP NHIỀU CHA MẸ 53
HÌNH 4.1 ĐỒ THỊ MINH HỌA CHO FILE DỮ LIỆU 58
HÌNH 4.2 ĐỒ THỊ SO SÁNH HIỆU QUẢ LÀM VIỆC CỦA CÁC PHÉP LAI GHÉP 71
HÌNH 4.3 ĐỒ THỊ SO SÁNH HIỆU QỦA LÀM VIỆC CỦA CÁC PHÉP ĐỘT BIẾN 72
HÌNH 4.4 ĐỒ THỊ SO SÁNH HIỆU QUẢ CỦA CÁC PHÉP CHỌN LỌC 73
HÌNH 5.1 GIAO DIỆN CHƯƠNG TRÌNH 74
Trang 6DANH MỤC BẢNG
BẢNG 1.1 MỘT SỐ GIẢI THUẬT GẦN ĐÚNG CHO BÀI TOÁN TRÊN ĐỒ
THỊ 30
BẢNG 2.2: MÃ HÓA HOÁN VỊ 2 NST A&B 42
BẢNG 2.3: MÃ HÓA GIÁ TRỊ CÁC NST A,B,C 42
BẢNG 2.4: MÃ HÓA NST A THEO CẤU TRÚC CÂY 43
BẢNG 2.5: MẶT NẠ LAI GHÉP ĐỒNG NHẤT 44
BẢNG 2.6: LAI GHÉP MỘT ĐIỂM CẮT MÃ HÓA HOÁN VỊ 45
BẢNG 2.7: PHÉP ĐẢO BIT MÃ HÓA NHỊ PHÂN 46
BẢNG 2.8 HOÁN VỊ THỨ TỰ MÃ HÓA HOÁN VỊ 46
BẢNG 2.9 THAY ĐỔI GIÁ TRỊ TRONG MÃ HÓA GIÁ TRỊ 46
BẢNG 4.1 KẾT QUẢ SO SÁNH CÁC PHÉP LAI GHÉP TRÊN BỘ DỮ LIỆU I160 64
BẢNG 4.2 KẾT QUẢ SO SÁNH GLMIN VỚI MỘT SỐ GIẢI THUẬT GẦN ĐÚNG KHÁC TRÊN BỘ DỮ LIỆU I160 65
BẢNG 4.3 KẾT QUẢ SO SÁNH CÁC PHÉP LAI GHÉP TRÊN BỘ DỮ LIỆU I320 66
BẢNG 4.4 KẾT QUẢ SO SÁNH GLMIN VỚI MỘT SỐ GIẢI THUẬT GẦN ĐÚNG KHÁC TRÊN BỘ DỮ LIỆU I320 67
BẢNG 4.5 KẾT QUẢ SO SÁNH CÁC PHÉP LAI GHÉP TRÊN BỘ DỮ LIỆU I640 68
BẢNG 4.6 KẾT QUẢ SO SÁNH CÁC PHÉP LAI GHÉP TRÊN BỘ DỮ LIỆU I640(TIẾP) 69
BẢNG 4.7 KẾT QUẢ SO SÁNH CÁC PHÉP LAI GHÉP TRÊN BỘ DỮ LIỆU THỰC TẾ 70
BẢNG 4.8 KẾT QUẢ SO SÁNH GLMIN VỚI MỘT SỐ GIẢI THUẬT GẦN ĐÚNG KHÁC TRÊN BỘ DỮ LIỆU THỰC TẾ 70
Trang 7LỜI MỞ ĐẦU
Bài toán cây Steiner trong đồ thị là một bài toán NP-khó trong nhóm các bàitoán thiết kế mạng (network designed problem) Bài toán tìm cây Steiner nhỏ nhấttrên đồ thị được ứng dụng trong nhiều lĩnh vực thực tế như thiết kế mạng viễnthông, thiết kế vi mạch hay nghiên cứu sự tiến hóa trong sinh học… Do tầm quantrọng của bài toán, rất nhiều hướng tiếp cận để giải xấp xỉ bài toán đã được đề xuấtvới mục đích đưa ra lời giải xấp xỉ tốt nhất với thời gian chấp nhận được
Trong đồ án này trình bày cách giải quyết bài toán theo thuật toán di truyền, đây
là một hướng giải quyết khá thành công Cấu trúc đồ án gồm có năm chương nhưsau:
• Chương 1 Trình bày lý thuyết cơ sở về đồ thị và bài toán Cây Steiner
• Chương 2 Trình bày lý thuyết cơ bản về giải thuật di truyền
• Chương 3 Trình bày thuật toán di truyền giải bài toán Cây Steiner trên đồthị
• Chương 4 Các kết quả thực nghiệm
• Chương 5 Hướng dẫn sử dụng chương trình
Để có được kết quả này, em xin gửi lời cảm ơn chân thành nhất đến cô giáoThs.Huỳnh Thị Thanh Bình bộ môn khoa học máy tính, cô đã tận tình hướng dẫn,chỉ bảo em trong quá trình thực tập và làm đồ án Em xin gửi lời cảm ơn đến thầyNguyễn Việt Huy bộ môn khoa học máy tính, thầy đã nhiệt tình giúp đỡ em trongviệc tìm hiểu bài toán Em xin gửi lời cảm ơn đến tất cả các thầy cô trong bộ mônkhoa học máy tính, các thầy cô đã giúp chúng em có rất nhiều kiến thức rất bổ ích.Cuối cùng, em xin gửi lời cảm ơn đến gia đình và bạn bè, mọi người là nguồn độngviên tinh thần rất lớn cho em!
Hà nội, tháng 5 năm 2008
Sinh viên Nguyễn Thanh Tùng
Trang 8CHƯƠNG 1 GIỚI THIỆU BÀI TOÁN
1 Một số các khái niệm cơ sở
1.1 Đồ thị
1.1.1 Định nghĩa đồ thị
Đồ thị là một cấu trúc rời rạc bao gồm các đỉnh và các cạnh nối các đỉnh này,các loại đồ thị được phân biệt bởi sự khác biệt giữa kiểu cũng như số lượng cạnhnối các đỉnh của đồ thị Trong các tài liệu, khái niệm về đồ thị đôi khi được đề cậpkhông đồng nhất, dưới đây đưa ra một số định nghĩa về đồ thị [32]
Hình 1.1 Đồ thị vô hướng (trái) và đồ thị có hướng (phải).
Định nghĩa 1: Đơn đồ thị vô hướng G=(V, E) bao gồm V là tập các đỉnh, và
E là tập các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là cạnh
Định nghĩa 2: Đa đồ thị vô hướng G=(E, V) bao gồm V là tập các đỉnh và E
là họ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh Haicạnh e1 và e2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh
Đồ thị có trọng số là một khái niệm hết sức quan trọng trong các nghiên cứu
lý thuyết về đồ thị bởi tính ứng dụng rộng dãi của nó Ví dụ, một mạng máy tính môphỏng bằng đồ thị thì trọng số có thể là khoảng cách vật lý hoặc thông lượng truyền
dữ liệu giữa hai máy tính được nối trực tiếp trong mạng, một mạng lưới giao thông
có thể được mô phỏng bằng một đồ thị có trọng số trong đó trọng số của mỗi cạnhnối hai đỉnh có thể được dùng để biểu diễn khoảng cách vật lý của đoạn đường nốihai điểm này… Trên thực tế, có rất nhiều bài toán được mô phỏng rất mềm dẻo trên
đồ thị và đã cho những kết quả lời giải rất tốt
1.1.2 Đường đi và chu trình
Định nghĩa 1 : Cho đồ thị G = (V, E) Đường đi từ đỉnh s đến đỉnh t trên G là dãy
Trang 9Đường đi Pst được biểu diễn theo dãy cạnh (v0,v1), (v1,v2), …, (vk-1,vk
Đinh nghĩa 2 : Chu trình là một đường đi không có cạnh nào bị lặp lại vàcóđỉnhđầutrùng đỉnh cuối
1.1.3 Đồ thị vô hướng và liên thông
Định nghĩa : Đồ thị vô hướng G = (V, E) gọi là liên thông nếu luôn tồn tại đường đi
giữa mọi cặp đỉnh phân biệt trên đồ thị
Hình 1.2 Đồ thị vô hướng liên thông.
1.1.4 Cây
Định nghĩa : Cây là một đơn đồ thị vô hướng, liên thông không chứa chu trình Bậc của đỉnh: là số cạnh xuất phát hoặc kết thúc tại đỉnh đó.
Trang 10Hình 1.3 Cây.
1.1.5 Cây khung của đồ thị
Hình 1.4 Đồ thị và cây khung.
Định nghĩa : Cho G = (V, E) là một đơn đồ thị vô hướng liên thông với |V| = n
đỉnh và |E| = m cạnh Cây T = (V, F) với F ⊂ E được gọi là cây khung của đồ thị G.
( Khi đó |F| = m-1 ).
Cây khung có bậc bị chặn (Degree-constrained Spanning Tree): Cho sốnguyên d ≥ 2, cây khung có bậc bị chặn là cây khung T trên đồ thị G mà bậc củamỗi đỉnh của nó không vượt quá d
Trọng số của cạnh : Mỗi cạnh e trên G được gán một giá trị w e( ) được gọi là trọng
12
4
7
8
56
Trang 111.2 Cấu trúc dữ liệu biểu diễn đồ thị
1.2.1 Ma trận kề, ma trận trọng số
Trong phương pháp biểu diễn đồ thị bằng ma trận, mỗi đồ thị sẽ được biểudiễn bằng một ma trận vuông tương ứng với cấu trúc dữ liệu mảng hai chiều trongmáy tính (cũng có thể dùng mảng 1 chiều)
Xét đơn đồ thị vô hướng G=(V, E), với tập đỉnh V={1, 2, 3……n}, tập cạnh E= {e1,
e2, e3……em} Ma trận kề của đồ thị G là một ma trận nhị phân(các phần tử trong
ma trận chỉ là 0 hoặc 1) có kích thước n x n
A={aij: i,j=1, 2, 3……,n} có các phần tử được xác định theo quy tắc sau:
aij=0 nếu (i, j)∉ E i,j = 1, 2, 3……n
aij = 1 nếu (i, j)∈ E i,j = 1, 2, 3……n
Với lưu ý rằng (u, v) ≡ (v, u) trên đồ thị vô hướng thì dễ dàng nhận ra ma trận kềbiểu diễn đồ thị vô hướng là một ma trận đối xứng tức là a[i, j] = a[j, i] (với mọi i, j
= 1, 2, 3……n) Ngược lại, mỗi một ma trận đối xứng cấp n sẽ tương ứng với một
đồ thị vô hướng Với phương pháp biểu diễn nhị phân này thì tổng của hàng i(côt j)chính là bậc của đỉnh i(cột j)
Đối với đồ thị có định hướng, phương pháp lưu trữ bằng ma trận kề được tiến hành tương tự với đồ thị vô hướng, sự khác biệt nằm ở việc ma trận kềcủa đồ thị có hướng không phải là một ma trận đối xứng bởi trong đồ thị có hướngcung (u, v) ≠ (v, u)
Hình 1.6 Biểu diễn đồ thị bằng ma trận kề.
Với một chút thay đổi trong quy ước, đa đồ thị có thể được biểu diễn bằng
ma trận kề nếu thay vì điền 1 vào a[i, j] ta sẽ điền chính xác số cạnh nối đỉnh i với j.Một điều cần lưu ý là ma trận kề biểu diễn đa đồ thị vô hướng là ma trận đối xứngcòn ma trận kề của đa đồ thị có hướng không phải là ma trận đối xứng, tương tựnhư trong trường hợp của đơn đồ thị
Nếu đồ thị đang nghiên cứu là một đồ thị trọng số thì phương pháp biểu diễn
sẽ được tiến hành tương tự như sau:
Cho một đồ thị trọng số G=(V, E, c(i,j)) trong đó c(i, j) là giá trị trọng số củacạnh (i, j) Khi đó ma trận C biểu diễn đồ thị này vẫn là một ma trận vuông cấp nđược xác định:
c[i, j] = c(i, j) trong trường hợp (i, j) ∈ E
c[i, j] = Θnếu (i, j) ∉E,
trong đó Θtùy trường hợp cụ thể mà có thể chọn những giá trị sau: 0, +∞, -∞
Trang 12Ưu điểm nổi bật nhất của phương pháp biểu diễn bằng ma trận thể hiện khibài toán cần trả lời câu hỏi hai đỉnh i và j có kề với nhau trên đồ thị hay không, thờigian để trả lời câu hỏi này là hằng số không phụ thuộc vào kích thước của ma trận,với những thuật toán có yêu cầu thường xuyên chèn thêm hoặc loại bỏ cáccạnh(cung) của thì cấu trúc dữ liệu này cũng tỏ ra khá thích hợp Tuy vậy, cấu trúc
dữ liệu này có một nhược điểm lớn nhất là dùng quá nhiều bộ nhớ, mỗi ma trậnluôn phải dùng n2 bộ nhớ để biểu diễn không phụ thuộc vào số cạnh của đồ thị, đặcbiệt trong trường hợp biểu diễn cho đồ thị vô hướng thì số ô nhớ lãng phí ít nhất là
2
2 n
n −
, hơn thế nữa nếu muốn tìm danh sách những đỉnh kề với một đỉnh bất kỳ thì
sẽ phải duyệt qua tất cả các đỉnh của đồ thị
1.2.2 Danh sách cạnh, cung
Trong những trường hợp bài toán luôn làm việc với những đồ thị thưa (đồ thị
có số cạnh m và số đỉnh n thỏa mãn bất đẳng thức m<6n) thì cấu trúc dữ liệu matrận kề, ma trận trọng số tỏ ra không thích hợp bởi có quá nhiều ô nhớ bị lãng phí,trong trường hợp này, cấu trúc dữ liệu danh sách cạnh(cung) được sử dụng Theophương pháp lưu trữ này, mỗi cạnh (cung) e của đồ thị sẽ được lưu trữ bằng haibiến Dau[e] và Cuoi[e] Các biến Dau và Cuoi có thể là các phần tử của một vectorhoặc là một node của một danh sách nối đơn, tùy thuộc vào số lượng cạnh (cung)của đồ thị có thay đổi thường xuyên trong quá trình tiến hành thuật toán hay không.Với đồ thị có trọng số, ngoài việc sử dụng 2m đơn vị bộ nhớ để lưu trữ danh sáchcác cạnh thì còn cần tới m đơn vị bộ nhớ để lưu trữ thêm trọng số của cáccạnh(cung) Ưu điểm dễ thấy nhất của phương pháp này là việc tích kiệm được bộnhớ, tuy vậy, không phải với đồ thị thưa nào cách lưu trữ này cũng tốt mà vớinhững đồ thị nhỏ(n<18) thì cách lưu trữ này còn lãng phí bộ nhớ nhiều hơn lưu trữbằng ma trận Hơn thế nữa phương pháp lưu trữ này luôn gây khó khăn trong việcduyệt tìm kiếm các đỉnh kề của một đỉnh bất kỳ, để duyệt được các đỉnh kề này,trong mọi trường hợp luôn phải duyệt qua tất cả các cạnh của đồ thị
Hình 1.7 Biểu diễn đồ thị bằng danh sách cạnh cung.
Danh sách kề có các tính chất sau đáng quan tâm:
Đối với đồ thị có hướng, tổng số phần tử phải lưu trong các danh sách kề là |
E|, với đồ thị vô hướng, giá trị này là 2|E| Cho cả đồ thị có hướng và vô hướng, để
Trang 13lưu trữ danh sách kề của đồ thị, cần bộ nhớ Θ(V + E) Các thao tác trên cạnh đòi hỏiphải duyệt danh sách kề nên tốn thời gian Hạn chế này có thể khắc phục trong một
số trường hợp khi danh sách kề được biểu diễn bằng mảng tĩnh, thay vì danh sáchliên kết
Như vậy, ưu điểm đòi hỏi không gian lưu trữ nhỏ của cách biểu diễn danhsách kề phải trả giá bằng thao tác xử lý tốn thời gian
Hình 1.8 Danh sách kề và ma trận kề tương ứng.
Việc chọn cách biểu diễn nào còn tùy thuộc vào từng trường hợp cụ thể.Trong hầu hết các ứng dụng, cách biểu diễn đồ thị bằng ma trận kề thường dùngtrong trường hợp đồ thị kích thước nhỏ hay là đồ thị dày, tức là đồ thị có số cạnhlớn gần bằng nửa bình phương số đỉnh Trong trường hợp ngược lại nên chọn cáchbiểu diễn bằng danh sách kề
1.3 Các thuật toán trên đồ thị
1.3.1 Thuật toán duyệt đồ thị
a Thuật toán tìm kiếm theo chiều sâu
Tư tưởng chính của thuật toán là: Cho đồ thị G(V,E) Từ một đỉnh u hiệnthời nào đó đỉnh kề v của u sẽ được thăm và quá trình được lặp lại đối với đỉnh v ởbước tổng quát, giả sử hiện tại đang xét đỉnh u0, có hai khả năng sẽ xảy ra:
- Nếu như tồn tại một đỉnh v0 kề với u0 mà chưa được thăm thì đỉnh v0 đó sẽtrở thành đỉnh đã thăm và quá trình tìm kiếm lại bắt đầu từ đỉnh v0 đó
- Ngược lại, nếu mọi đỉnh kề với u0 đều đã thăm thì ta sẽ quay trở lại đỉnh màtrước đó ta đến đỉnh u0 để tiếp tục quá trình tìm kiếm
Như vậy, trong quá trình thăm đỉnh bằng thuật toán tìm kiếm theo chiều sâu,đỉnh được thăm càng muộn càng sớm được duyệt xong (Cơ chế Last In First Out -Vào sau ra trước) Thuật toán DFS có thể được xây dựng bằng một thủ tục đệ quynhư sau:
Trang 14Và thủ tục duyệt hệ thống toàn bộ đỉnh của đồ thị sẽ là:
Sau mỗi lần gọi DFS(u) thì toàn bộ các đỉnh cùng thành phần liên thông với
u sẽ được thăm Thủ tục Visit(u) là thao tác trên đỉnh u trong từng bài toán đặt ra cụthể
b Thuật toán tìm kiếm theo chiều rộng
Thuật toán này thực ra là sự cải biến về thứ tự duyệt đỉnh trên đồ thị của tìmkiếm theo chiều sâu bằng cách thay vì dùng một STACK thì ta lại dùng một hàngđợi QUEUE để kết nạp đỉnh được thăm Như vậy, đỉnh được thăm càng sớm sẽcàng sớm trở thành duyệt xong (cơ chế First In First Out - Vào trước ra trước) Thủtục được mô tả dưới đây:
Trang 155 If not Daxet[u] then BFS(u);
6 End;
Tương tự như thuật toán tìm kiếm theo chiều sâu, ở thuật toán này mỗi lầngọi thủ tục BFS(u) thì mọi đỉnh cùng thành phần liên thông với u sẽ được thăm Thủtục Visit(u) như đã nói ở trên
1.3.2 Bài toán cây khung cực tiểu
Bài toán: Giả sử G=(V, E) là đồ thị vô hướng liên thông với trọng số trên cạnh
w(e), e ∈ E Cây T=(V, ET) với ET ⊂E được gọi là cây khung của đồ thị G Độ dàicây khung T là tổng trọng số trên các cạnh của nó w(T)=∑e∈E w )(e Cây khung nhỏnhất(viết tắt là MST) của đồ thị G là cây khung có độ dài nhỏ nhất trong số các câykhung của đồ thị Bài toán đặt ra là tìm cây khung nhỏ nhất
a.Thuật toán Kruskal
Tư tưởng: Để xây dựng tập n-1 cạnh của cây khung nhỏ nhất? tạm gọi là tập
K, Kruskal đề nghị cách kết nạp lần lượt các cạnh vào tập đó theo nguyên tắc nhưsau: Ưu tiên các cạnh có trọng số nhỏ hơn, kết nạp cạnh khi nó không tạo chu trìnhvới tập cạnh đã kết nạp trước đó Đó là một nguyên tắc chính xác và đúng đắn, đảmbảo tập K nếu thu đủ n-1 cạnh sẽ là cây khung nhỏ nhất
- Khi lập trình để có được sự ưu tiên, cách tốt nhất là sắp xếp trước các cạnh theo trọng số tăng dần Vì vậy, cấu trúc dữ liệu được sử dụng trong giải thuậtKruskal là danh sách cạnh
- Để kiểm tra xem cạnh đang xét có tạo chu trình không với tập cạnh đã kếtnạp, một phương pháp đặc biệt mỗi khi kết nạp được sử dụng đó là: cho mộtđỉnh trở thành 'dad' của đỉnh kia Với 2 đỉnh x, y bất kỳ, nếu 'dad cao nhất'của chúng bằng nhau thì cạnh nối x, y sẽ tạo nên chu trình (chu trình này điqua parent chung đó)
Thuật toán Kruskal được miêu tả như sau:
in Đồ thị vô hướng G = (V,E) n đỉnh với ma trận trọng số c
out Cây khung nhỏ nhất T của đồ thị G
Trang 1612 Ghi nhận đồ thị không liên thông;
13 endif
Thuật toán Kruskal tìm cây khung nhỏ nhất của đồ thị với thời gian O(elogn) với e và n tương ứng là số cạnh và đỉnh của đồ thị.
b Thuật toán Prim
Thuật toán Kruskal làm việc kém hiệu quả với những đồ thị dày (đồ thị với
số cạnh m» n(n-1)/2) Trong trường hợp đó thuật toán Prim tỏ ra hiệu quả hơn.Thuật toán Prim còn được gọi là phương pháp lân cận gần nhất Trong phương phápnày bắt đầu từ một đỉnh tuỳ ý của đồ thị, đầu tiên ta nối s với đỉnh lân cận gần nónhất, chẳng hạn là đỉnh y Nghĩa là trong số các cạnh kề của đỉnh s, cạnh (s,y) có độdài nhỏ nhất Tiếp theo trong số các cạnh kề với hai đỉnh s hoặc y ta tìm cạnh có độdài nhỏ nhất, cạnh này dẫn đến đỉnh thứ ba z, và ta thu được cây bộ phận gồm 3đỉnh và 2 cạnh Quá trình này sẽ tiếp tục cho đến khi ta thu được cây gồm n đỉnh vàn-1 cạnh sẽ chính là cây khung nhỏ nhất cần tìm
Giả sử đồ thị cho bởi ma trận trọng số C = { c[i,j], i, j= 1, 2, , n} trongquá trình thực hiện thuật toán, ở mỗi bước để có thể nhanh chóng chọn đỉnh và cạnhcần bổ sung vào cây khung, các đỉnh của đồ thị sẽ được gán cho các nhãn Nhãn củamột đỉnh v sẽ gồm hai phần và có dạng [d[v], near[v]], trong đó d[v] dùng để ghinhận độ dài của cạnh có độ dài nhỏ nhất trong số các cạnh nối với đỉnh v với cácđỉnh của cây khung đang xây dựng (ta sẽ gọi là khoảng cách từ đỉnh v đến tập đỉnhcủa cây khung), còn near[v] ghi nhận đỉnh của cây khung gần v nhất (near[v]:=z).Thuật toán Prim được xây dựng như sau:
in Đồ thị vô hướng G = (V,E) n đỉnh với ma trận trọng số c
out Cây khung nhỏ nhất (H,T) của đồ thị G
Trang 17đường đi ngắn nhất từ u đến nó Trong mỗi bước lặp, sẽ có một đỉnh được gán nhãn
cố định, khi đó nhãn của đỉnh chính là độ dài đường đi ngắn nhất từ u.
Trong Hình 1.9, số đánh tại mỗi đỉnh là độ dài của đường đi ngắn nhất từ s đến đỉnh đó {(s, t), (t, y), (y, x), (x, z)} là dãy các cạnh trên đường đi ngắn nhất.
Hình 1.9 Đường đi ngắn nhất đến các đỉnh còn lại.
Thuật toán Dijstra
Input: Đồ thị G=(V,E) có n đỉnh, hàm trọng số không âm c trên cạnh,
Trang 18Thuật toán Dijkstra tìm được đường đi ngắn nhất trên đồ thị sau thời gian O(n 2 ).
b Đường đi ngắn nhất giữa tất cả các cặp đỉnh
Bài toán đường đi ngắn nhất giữa tất cả các cặp đỉnh là một mở rộng của bàitoán tìm đường đi ngắn nhất từ một điểm đến các đỉnh còn lại nên rất tự nhiên nếu
sử dụng nhiều lần thuật toán Dijkstra để thu được kết quả mong muốn Với đồ thị
có n đỉnh, cần áp dụng thuật toán Dijkstra n lần, tổng thời gian chạy thuật toán đạt
cỡ O(n3) Cũng có độ phức tạp như vậy, thuật toán quy hoạch động Floyd-Warshallđược áp dụng để giải bài toán đường đi ngắn nhất giữa tất cả các cặp đỉnh khôngyêu cầu trọng số của đồ thị phải không âm nhưng có điều kiện đồ thị không tồn tạichu trình âm
Hình 1.10 Đồ thị có hướng không có chu trình âm.
Thuật toán Floyd-Warshall
in Đồ thị G = (V,E) n đỉnh với ma trận trọng số c
out Ma trận d ghi nhận độ dài đường đi ngắn nhất,
ma trận p ghi nhận đường đi
1 BEGIN
2 Với mọi (i,j), gán d(i,j) = c(i,j) và p(i,j) = i;
Trang 193 Với mọi i, gán d(i,i) = 0 và p(i,i) = -1;
Trong thuật toán Floyd-Warshall, d(i, j) lưu giá trị độ dài đường đi ngắn nhất
từ đỉnh i đến đỉnh j trong đồ thị, p(i, j) lưu đỉnh nằm trước đỉnh j trên đường đi ngắn nhất từ i đến j Dựng lại đường đi ngắn nhất giữa cặp đỉnh (i, j) như sau:
Xây dựng lại đường đi ngắn nhất từ đỉnh i đến đỉnh j của đồ thị
Thuật toán Floyd-Warshall tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh của
đồ thị sau thời gian cỡ O(n 3 ).
1.4 Bài toán tối ưu
1.4.1 Một số khái niệm
a Độ phức tạp của thuật toán
Là đánh giá lượng tài nguyên các loại mà các thuật toán đòi hỏi sử dụng Cóhai loại tài nguyên quan trọng là thời gian và bộ nhớ Đánh giá độ phức tạp tínhtoán của bài toán là đưa ra thời gian tính của thuật toán tốt nhất tổng số các thuậttoán giải bài toán đã và chưa biết
b Thuật toán có thời gian tính đa thức
Là thuật toán mà độ phức tạp thời gian của nó trong trường hợp xấu nhấtđược giới hạn trên bởi một hàm đa thức của kích thước dữ liệu đầu vào (kích thước
dữ liệu đầu vào được tính bằng số bit cần thiết để biểu diễn nó) Tức là nếu n làkích thước dữ liệu đầu vào, thì luôn tồn tại một đa thức p( )n sao cho
Trang 20O(p(n)) = 2n, O(p(n)) = 3n3, O(p(n)) = 5n+n10, O(p(n)) = nlgn …
Các thuật toán có độ phức tạp thời gian trong trường hợp xấu nhất sau không cóthời gian tính đa thức
O(f(n)) = 2 n , O(p(n)) = 20.01n, O(p(n)) = n! …
Có hai cách tiếp cận chính để đánh giá độ phức tạp tính toán:
- Đánh giá cận dưới độ phức tạp bài toán
- Chỉ ra mức độ khó của nó có thể so sánh với bất ký bài toán khó hiện đã biết
c Bài toán quyết định
Là bài toán mà đầu ra của nó chỉ có thể là yes hoặc no(0 hoặc 1, đúng hoặcsai, …)
Một số bài toán quyết định:
• Bài toán về tính nguyên tố sau là bài toán quyết định “Hỏi số nguyên n có là
số nguyên tố hay không?”
Với dữ liệu vào n= 23 thì câu trả lời là yes, còn với dữ liệu vào n= 24 thì câu trả lời
là no
• Bài toán tổng con (Subset sum): “Cho tập I số nguyên dương a1, a2…an và
một số nguyên dương T Hỏi có thể tìm được một tập con S của I mà tổng các số trong S = T?”
• Bài toán Hamilton dạng quyết định: Cho đồ thị vô hướng G = (V,E) có chứa chu trình Hamilton hay không?
1.4.2 Các bài toán tối ưu
Trước những năm 1970, phương pháp chủ yếu để giải các bài toán tối ưu làxây dựng phương pháp giải đúng Nhưng kinh nghiệm tính toán cũng như phân tíchtính hiệu quả của phương pháp này cho thấy rất nhiều hạn chế của nó, nhất là vềmặt thời gian tính toán Phương pháp giải đúng chỉ được áp dụng khi giải bài toánvới kích thước nhỏ và trung bình Từ rất sớm, các nhà khoa học về lý thuyết máytính như Steve Cook và Dick Karp đã quyết định rằng yêu cầu tối thiểu của bất cứmột bài toán tối ưu nào là thời gian chạy đa thức: O( )n c , với clà hằng số Tuynhiên, không phải mọi bài toán đều có thể được giải quyết một cách nhanh chóng.Rất khó xác định bài toán nào có thể giải quyết một cách nhanh chóng, bài toán nàokhông thể Bởi vậy Cook, Karp, và một số nhà khoa học khác định nghĩa ra lớp bài
toán NP-khó, đó là những bài toán không thể giải quyết được trong thời gian đa
thức
Trang 21Hình 1.11 Mạch logic, đầu vào được nhập từ bên trái và đầu ra ở bên phải.
Bài toán về tính thực hiện của được của mạch CIR-SAT (Circuit
satisfiability) là một ví dụ điển hình của bài toán mà chúng ta chưa biết cách để giải
nó trong thời gian đa thức Trong bài toán này, cho một mạch logic bao gồm một
tập các cổng AND, OR, và NOT được kết nối với nhau bởi dây dẫn Đầu vào cho
mạch này là tập m giá trị logic (true/false) x1,x2, ,x m (xem hình 1.12) Đầu ra là
một giá trị logic đơn TRUE/FALSE Cho một bộ giá trị đầu vào, có thể tính được
đầu ra trong thời gian đa thức (thực tế là tuyến tính) sử dụng tìm kiếm theo chiềusâu và đánh giá đầu ra của mỗi cổng trong thời gian tuyến tính Bài toán về tínhthực hiện của mạch đặt ra rằng, cho một mạch bất kỳ, liệu rằng có một bộ đầu vào
làm cho đầu ra của mạch luôn là TRUE, hoặc ngược lại, luôn là FALSE hay không.
Chưa ai biết được cách giải quyết bài toán này nhanh hơn cách thử tất cả 2mđầu vào
có thể của mạch, nhưng nó đòi hỏi thời gian là hàm mũ Mặt khác, không ai có thểchứng minh được đây là phương pháp tốt nhất để giải bài toán
1.4.3 Các lớp bài toán P, NP và co-NP
Dưới đây là phân loại các lớp của bài toán
• P là lớp bài toán quyết định có thể được giải quyết trong thời gian đa thức.
Hay nói cách khác, P là lớp các bài toán có thể được giải một cách nhanhchóng
• NP là lớp bài toán quyết định mà để xác nhận câu trả lời là yes của nó, cóthể đưa ra bằng chứng ngắn ngọn dễ kiểm tra Hay có thể nói NP là lớp cácbài toán mà có thể kiểm tra câu trả lời yes một cách nhanh chóng trong thờigian đa thức nếu đã có được lời giải Ví dụ, trong bài toán về tính thực hiệncủa mạch là NP, nếu câu trả lời là yes, thì bất cứ bộ giá trị đầu vào nào chogiá trị đầu ra là yes đều sẽ chứng minh cho câu trả lời Ta có thể kiểm tra lạibằng cách đánh giá mạch logic trong thời gian đa thức
• co-NP hoàn toàn ngược với NP Đó là lớp bài toán mà để xác nhận câu trả
lời no thì có thể đưa ra bằng chứng ngắn gọn dế kiểm tra
Nếu một bài toán thuộc lớp P, thì nó cũng thuộc lớp NP-để kiểm tra một câu trảlời yes trong thời gian đa thức, ta có thể tính toán lại câu trả lời từ đầu trong thờigian đa thức Tương tự như vậy, bất cứ bài toán nào thuộc lớp P thì cũng thuộc lớpco-NP
NP
Trang 22Một câu hỏi lớn đặt ra trong lý thuyết khoa học máy tính là liệu có đẳng thức
NP
P= hay không Không ai biết được chính xác câu trả lời Một cách trực quan cóthể thấy rõ ràng rằng P≠NP, như minh họa trong hình 1.13 Các nghiên cứu đãchứng minh rằng các bài toán có thể vô cùng khó để giải quyết, mặc dù lời giải lạirất rõ ràng khi đã biết được nó Nhưng không ai có thể chứng minh được điều này
Hình 1.12 Các lớp bài toán P, NP và co-NP.
4.4 NP-khó và NP-đầy đủ.
Một bài toán là NP-đầy đủ nếu nó có 2 tính chất:
• Tồn tại một thuật toán đa thức không đơn định để giải nó (tức là chỉ ra nóthuộc lớp NP)
• Có một bài toán NP-đấy đủ có thể quy dẫn về nó.
Thông thường việc chứng minh tính chất 1 đối với nhiều bài toán là rất khókhăn, thế nhưng việc chứng minh nó có tính chất 2 lại đơn giản hơn Những bàitoán thỏa mãn tính chất 2 vể mặt độ phức tạp là khó tương đương Những bài toánnhư vậy được gọi là NP-khó
Vậy, bài toán ∏ là NP-khó nếu sự tồn tại một thuật toán có thời gian đa thức
để giải nó kéo theo sự tồn tại thuật toán đa thức để giải mọi bài toán trong lớp NP.Nói cách khác, nếu có thể giải một bài toán NP-khó nào đó một cách nhanh chóng,thì cũng có thể nhanh chóng giải quyết bất kỳ một bài toán nào khác Bài toán NP-
khó ít nhất là khó bằng bất cứ một bài toán nào trong NP NP-đầy đủ là những bài
toán khó nhất trong NP Hình 1.14 biểu diễn cách phân lớp tạm thời các bài toán
khó
NP-NP đầ y đ ủ
Trang 23Hình 1.13 Phân lớp tạm thời các bài toán.
Một trong những phương pháp hay được sử dụng để tìm lời giải xấp xỉ chobài toán NP-khó là sử dụng giải thuật di truyền Phần tiếp theo của đồ án sẽ giớithiệu chi tiết về giải thuật di truyền
2 Bài toán cây Steiner
2.1 Lịch sử bài toán cây Steiner
Lịch sử bài toán Steiner tree(ST) đã có từ rất lâu(thế kỷ 17), xuất phát từ mộtbài toán được đưa ra bởi nhà toán học nổi tiếng Pierre Fermat của Pháp Bài toánban đầu của Fermat được phát biểu như sau:
Bài toán: Cho ba điểm trên mặt phẳng, tìm một điểm thứ tư sao cho tổng khoảng
cách từ điểm này tới ba điểm đã cho có giá trị nhỏ nhất
Bài toán này của Fermat sau đó đã được Heinen giải vào năm 1834 Tuynhiên phải mất hơn một thế kỷ, chỉ sau khi Courant và Robbins cho xuất bản cuốn
sách mang tên “What is Mathematics” thì bài toán của Fermat và các biến thể của
nó mới được biết đến dưới tên bài toán Steiner như một sự ghi nhớ những đóng góp
to lớn của nhà bác học Jacob Steiner đối với nền toán học, từ đó đến nay, rất nhiềuphiên bản khác nhau của bài toán cây Steiner đã ra đời để đáp ứng những nhu cầuứng dụng trên thực tế Một cách tổng quát, bài toán cây Steiner được phát biểu nhưsau: Cho một tập điểm P, tìm phương án nối các điểm này lại với nhau sao cho chiphí để nối các điểm này là nhỏ nhất, trong quá trình nối có thể bổ xung thêm những điểm điểm cần thiết với số lượng không hạn chế để đạt được yêu cầu của bài toán
Mọi bài toán cây Steiner đều thuộc lớp các bài toán NP-khó và trên thực tếchưa có tác giả nào tìm được một thuật toán hiệu quả để giải nó một cách chính xác.Vào những năm 1960 Melzak[15] là người đầu tiên đưa ra một giải thuật có độphức tạp hàm mũ để giải bài toán trên mặt phẳng Tuy giải thuật của Melzak khôngmang giá trị thực tế cao nhưng sự xuất hiện của một giải thuật hữu hạn cho bài toánSteiner cùng với một công trình nghiên cứu rất giá trị của hai tác giả Gilbert vàPollack vào cùng thời gian đó đã là một “cú hích” tác động mạnh tới cộng đồngnhững người nghiên cứu toán học nói chung và những người đi sâu về lĩnh vực tối
ưu hóa nói riêng Trong công trình của mình, Gilbert và Pollack đã giới thiệu một
số tính chất hình học quan trọng của cây Steiner, đồng thời nghiên cứu cũng mở ramột số vấn đề mới rất đáng quan tâm trong đó phải kể đến một khái niệm lần đầu
tiên xuất hiện: hệ số Steiner( Steiner ratio) Hệ số Steiner là tỉ số giữa độ dài của
cây Steiner “gần tối ưu” dựng bằng một giải thuật có độ phức tạp đa thức và độ dàicủa cây khung cực tiểu của cùng một tập điểm P, ý nghĩa của hệ số này cho ta biếtcây Steiner tích kiệm được bao nhiêu chi phí so với cây khung cực tiểu tương ứngcho cùng một tập điểm đầu vào Trong công trình của mình, Gilbert và Pollack đã
dự đoán một cận dưới của hệ số này cho một số không gian khác nhau và nó đãhình thành nên một vấn đề mới trong các nghiên cứu lý thuyết về cây Steiner lúcbấy giờ, đó vấn đề chứng minh hoặc bác bỏ giả định về giá trị cận dưới này Saunày vào năm 1990 D.Z Du và F.D Hwang đã chứng minh được dự đoán của hai tácgiả trên trong không gian Euclid là chính xác Trong phần sau, lời giải cho bài toáncủa Fermat được trình bày, một số tính chất của cây Steiner trên mặt phẳng sẽ được
Trang 24nghiên cứu, đồng thời luận văn cũng sẽ chứng minh rằng hệ số Steiner trong trườnghợp này không thể nhỏ hơn
2
3
2.2 Lời giải cho bài toán 3 điểm của Fermat
Như đã đề cập ở trên, bài toán của Fermat được đưa ra từ thế kỷ 17 nhưngphải hơn 100 năm sau, một lời giải hoàn thiện cho bài toán mới được đưa ra Để xâydựng phương pháp giải bài toán một cách đầy đủ phải kể đến những đóng góp của
ba nhà bác học Torricelli, Simpson và đặc biệt là Heinen - người đã giải bài toáncủa Fermat một cách hoàn chỉnh vào năm 1834
Vào năm 1640, Torricelli đưa ra một phương pháp với n=3 như sau:
Với 3 điểm đã cho A, B, C trên mặt phẳng, dựng tam giác ABC
Hình 1.14 Bài toán của Fermat với n=3.
Bước tiếp theo trong phương pháp của Torricelli là xây dựng 3 tam giác đều
từ ba cạnh AB, AC, BC và vẽ 3 đường tròn ngoại tiếp ba tam giác này Ba đườngtròn ngoại tiếp này sẽ giao nhau tại một điểm, điểm này chính là điểm cần tìm vàcòn được gọi là điểm Torricelli
Gần giống so với ý tưởng của Torricelli, năm 1750 Simpson đưa ra mộtphương pháp khác đơn giản hơn để tìm ra điểm Torricelli Cũng giống nhưTorricelli, Simpson cũng dựng ba tam giác đều từ tam giác ABC ban đầu, Sự khácbiệt trong phương pháp của Simpson chỉ thể hiện ở bước thứ 2, theo đó Simpson vẽcác đường nối từ mỗi đỉnh của tam giác đều mà không thuộc vào tam giác ABC vớiđỉnh đối diện trên tam giác ABC Mỗi đoạn nối như vậy được gọi là một đoạn thẳngSimpson Các đoạn thẳng Simpson này giao nhau tại 1 điểm, điểm này là điểmTorricelli và chính là lời giải của bài toán
Hình 1.15 Giải pháp của Torricelli.
Phương pháp của Torricelli và Simpson là khá đơn giản trong trường hợpn=3 Tuy nhiên, đây không phải là một phương pháp toàn diện bởi nó chỉ áp dụngđược trong trường hợp tam giác ABC không có góc nào >120o Nếu tam giác ABC
A
B
C
Trang 25tồn tại một góc lớn hơn 120o thì không phương pháp nào trong hai phương pháp củaTorricelli và Simpson cho lời giải đúng Phương pháp của Torricelli cho ra một giaođiểm của các đường tròn nằm ngoài tam giác ABC trong khi các đoạn thẳngSimpson trong phương pháp thứ 2 lại không giao nhau.
Hình 1.16 Giải pháp của Simpson.
Phải mất thêm 84 năm để Heinen đưa ra một lời giải hoàn toàn cho bài toáncủa Fermat Theo đó, lời giải của bài toán gồm 2 trường hợp
• Trong trường hợp thứ nhất: Nếu tam giác có một góc trong >120o thì điểmcần tìm chính là đỉnh của góc >120o này
• Trong trường hợp thứ hai không có một góc nào của tam giác ABC lớn hơn
120o thì có thể dựng điểm cần tìm bằng phương pháp của Simpson hoặcTorricelli
sau khi bài toán của Fermat được đổi tên lại là bài toán Steiner thì điểmTorricelli cũng được đổi tên lại là điểm Steiner Trong trường hợp n=3 và không cógóc nào của tam giác lớn hơn 120o thì điểm Steiner cùng 3 đỉnh của tam giác tạothành 3 cạnh mới và các cạnh này tạo thành các góc 120o(Hình14) Đây là một tínhchất rất quan trọng của điểm Steiner Với các bài toán có n lớn hơn 3, đây còn được
coi như điều kiện về góc để thu được một cây tối ưu Hay nói cách khác một cây
Steiner luôn có các điểm Steiner thỏa mãn điều kiện về góc
Hình 1.17 Điều kiện về góc.
Ngoài các tính chất về góc của điểm Steiner, các nghiên cứu lý thuyết cònchỉ ra một cây Steiner còn có nhiều các tính chất đặc biệt khác Dưới đây là một sốtính chất cơ bản quan sát được trong trường hợp số điểm Steiner bằng 3, tuy nhiêncác tính chất này cũng đúng trong trường hợp tổng quát với n bất kỳ
Tính chất 1 Tất cả các điểm Steiner của cây Steiner dựng trên mặt phẳng đều có
cấp không nhỏ hơn 3.
Trang 26Chứng minh: Giả sử tồn tại một cây Steiner tối ưu có chứa các điểm
Steiner có cấp nhỏ hơn 3 Với những điểm Steiner có cấp một(điểm Steiner này làmột nút lá của cây) ta chỉ cần loại bỏ điểm này mà không ảnh hưởng gì đến tính tối
ưu của cây(thậm chí còn thu được một cây tốt hơn cây ban đầu) Với những điểmSteiner cấp hai, ta dùng một chiến lược thay thế như sau
Giả sử u là một điểm Steiner cấp hai, vậy sẽ tồn tại hai điểm kề với u(hai điểm này
có thể là điểm cuối hoặc điểm Steiner), gọi hai điểm này là v và w Trong mặtphẳng Euclid ta có bất đẳng thức sau đây: |vw| ≤ |uv| + |uw| Nghĩa là nếu ta loại bỏ
u, cạnh uv, uw và nối v với w thì ta sẽ thu được một cây Steiner tối ưu hơn cây banđầu Quá trình thay thế được tiến hành cho tới khi trên cây không còn điểm Steinercấp hai nào Cây thu được cuối cùng chính là cây chỉ có các điểm Steiner cấp ba
Tính chất 2 Để dựng một cây Steiner cho n điểm thì cần nhiều nhất n-2 điểm
Steiner.
Chứng minh: Cho một cây Steiner T với s điểm Steiner và mỗi điểm
Steiner có cấp không nhỏ hơn ba(tính chất 1) thì cây Steiner này có tổng cấp củacác điểm(bao gồm cả các điểm terminal) không nhỏ hơn n +3s(n là số điểm cuối).Mặt khác, tổng cấp thực tế của các điểm trên cây là 2*E(T) trong đó E(T) là số cạnhcủa T Vì mọi cặp điểm trên cây Steiner này đều liên thông và trên cây không cóchu trình nên tổng số cạnh của T ít hơn tổng số đỉnh của T là 1 nên
2*(E(t) = 2((V(T) – 1) = 2(n + s -1) Vì vậy
n + 3s≤2(n + s - 1) hay s ≤ n - 2
Tính chất 3 Khái niệm topology được định nghĩa là một cách kết nối các điểm
Steiner với các điểm cuối mà không cần quan tâm xem có thu được một cây Steinertốt hay không Như vậy, các điểm Steiner có thể nằm ở bất kỳ vị trí nào thậm trí cóthể nằm chồng nên nhau hoặc chồng lên các điểm cuối Một Steiner topology là mộttopology chỉ chứa các điểm Steiner cấp ba Một Steiner topology đầy đủ(full SteinerTopology) là một Steiner topology có n-2 điểm Steiner Với n điểm cuối và n-2điểm Steiner, số lượng Steiner Topology đầy đủ được tính bằng công thức sau
f(n) =
)!
2 (
2
)!
4 2
Ngoài ba tính chất trên, cây Steiner còn có rất nhiều các tính chất khác ví dụnhư thuộc tính “lune” có thể được khai thác nhằm làm thu hẹp không gian tìm kiếmcủa bài toán Việc nghiên cứu các thuộc tính của cây Steiner là rất quan trọng và nóvẫn đang là một trong những vấn đề trung tâm trong các nghiên cứu lý thuyết vềcây Steiner
Trang 272.3 Hệ số Steiner cho trường hợp ba điểm
Như trên đã nói, hệ số Steiner là con số cho biết cho ta biết cây Steiner tíchkiệm được bao nhiêu chi phí so với cây khung cực tiểu tương ứng cho cùng một tậpđiểm đầu vào Một cách toán học, hệ số Steiner được định nghĩa như sau
Ký hiệu: Ls(P) là độ dài của cây Steiner cho tập điểm đầu vào P
Lm(P): là độ dài cây khung cực tiểu của tập điểm P
Khi đó hệ số Steiner được định nghĩa ρ = inf ( )
P
L Lm s
Gilbert và Pollack trong nghiên cứu của mình vào năm 1968 đã dự đoán rằng ρkhông thể nhỏ hơn
2
2
3 )
L s ≥ m ) đối với bất kỳ tập điểm P nào trênmặt phẳng và dự đoán này đã được Du và Hwang chứng minh tính đúng đắn vàonăm 1990 Trong chứng minh của mình, Du và Hwang đã đề xuất một nguyên lýminimax mới được giới toán học lúc bấy giờ đánh giá rất cao, thậm chí vào thờiđiểm đó Du và Hwang còn nhận được phần thưởng của cá nhân chủ tịch hiệp hộitoán học Hoa Kỳ lúc đó là giáo sư Ronald L Graham[25] cho công trình của mình
Do nguyên lý minimax không phải là trọng tâm nghiên cứu của luận văn này nên sẽkhông được đề cập, Phần sau đây chỉ trình bày phần chứng minh cho dự đoán củahai tác giả Gilbert và Polllack áp dụng với trường hợp bài toán của Fermat
Chứng minh:
Hình 1.18 Cây Steiner cho ba điểm.
Theo cách giải của Heinen, cho ba điểm sẽ dựng được một điểm Steiner như tronghình 1.19
Không mất tính tổng quát, cho rằng AS là cạnh nhỏ nhất trong ba cạnh nối
các đỉnh của tam giác ABC với điểm Steiner S, nghĩa là |AS| = min{|AS|,|BS|,|CS|}
Trên các cạnh BS và CS lần lượt dựng các điểm B’ và C’ sao cho |SA|=|SB’|=|SC’|
AB’C’ là một tam giác đều có S là trọng tâm đồng thời cũng là điểm Steinercủa bộ ba điểm A, B’, C’(hình 1.20)
Hình 1.19 Minh họa cho lời giải bài toán tìm hệ số Steiner.
Khi đó
L s(A,B,C) = AS + BS + CS
A
Trang 282.4 Mô tả bài toán cây Steiner trên đồ thị
Cho G = (V, E) là một đồ thị vô hướng, mỗi cạnh e ∈ E được gán với một trọng số thực không âm N là một tập con các đỉnh của đồ thị gọi là tập các đỉnh kết thúc Một cây T của đồ thị G được gọi là cây Steiner nếu nó chứa tất cả các đỉnh kết thúc, nghĩa là N ⊆ V(T) Các đỉnh thuộc V \ N (được gọi là các đỉnh không kết thúc) cũng có thể xuất hiện trong T, nếu thuộc T chúng được gọi là các nút Steiner Bài
toán cây Steiner trên đồ thị, sẽ ký hiệu là SPG, được phát biểu như sau: Tìm cây
Steiner T có trọng số c T( )=∑e E T∈ ( )c e( )nhỏ nhất trong tất cả các cây Steiner của đồ
thị Cây T như vậy được gọi là cây Steiner nhỏ nhất (Steiner minimal tree – viết tắt
là SMT)
Bài toán cây Steiner trên đồ thị thuộc lớp NP-khó [13], do vậy một thuật toán
đa thức giải bài toán là không tồn tại, ngoại trừ P = NP Điều này cũng đã đượcchứng minh cho các dạng khác của bài toán cây Steiner Độ phức tạp của bài toánSPG được thể hiện trong định lý dưới đây
(Karp 1972) Bài toán cây Steiner trên đồ thị là NP-khó ngay cả khi các cạnh có
trọng số đơn vị.
Hai trường hợp riêng cho bài toán cây Steiner giải được với thuật toán hiệuquả là: (1) tất cả các đỉnh của đồ thị đều là đỉnh kết thúc, (2) chỉ có 2 đỉnh kết thúc.Với bài toán (1), lời giải chính là cây khung nhỏ nhất của đồ thị có thể thu đươc nhờthuật toán Kruskal Trong khi đó, bài toán (2) có lời giải tối ưu là đường đi ngắnnhất giữa hai đỉnh kết thúc trong đồ thị có thể đưa ra nhờ thuật toán Dijsktra
2.5 Một số ứng dụng của bài toán
2.5.1 Bài toán truyền thông đa hướng(Multicast routing)
Trên thế giới, việc đưa vào ứng dụng các hệ thống mạng quang học tốc độcao đã mở ra một cánh cửa vào thế giới các dịch vụ băng thông rộng ví dụ như xemphim trực tuyến, hội nghị video trực tuyến, giao tiếp đa phương tiện Các loạitruyền thông này ngòai các yêu cầu như tốc độ cao, dung lượng đường truyền rất
Trang 29lớn còn có một yêu cầu quan trọng nữa là tính thời gian thực Chính vì vậy, cácthuật toán chọn đường trong mạng có một ý nghĩa sống còn đối với các dịch vụ này,trong bài toán truyền thông điệp đa hướng cũng vậy Bài toán yêu cầu như sau.
Phát biểu: Cho một mạng máy tính được biểu diễn bởi một đồ thị trọng số vô
hướng G=(V, E, f) một tập con T các đỉnh của V được gọi là một nhóm truyềnthông và một điểm s được gọi là một máy nguồn Bài toán yêu cầu tìm mộttopology nối tất cả các máy trong nhóm truyền thông T∪s sao cho tổng số cáckênh nối(trong một số trường hợp có thể là tổng độ dài các kênh nối) cần sử dụng lànhỏ nhất mà vẫn thỏa mãn các rằng buộc của mạng như tốc độ đường truyền, dunglượng băng thông
2.5.2 Bài toán kết nối nhóm(Group Steiner tree)
Phát biểu: Cho một đồ thị vô hướng G=(V, E) và tập các đỉnh T1,T2 Tn⊂V Bàitoán yêu cầu tìm một đồ thị con G’ của G thỏa mãn hai điều kiện sau
- Mỗi tập con Ti, i=1÷n phải có ít nhất một điểm trong G
- Độ dài của đồ thị G’ phải đạt cực tiểu
2.5.3 Bài toán Steiner nhiều pha(Multiphase spanning network)
Hơi khác so với bài toán kết nối nhóm, bài toán Steiner nhiều pha yêu cầucây Steiner phải chứa được tất cả các tập đỉnh T1, T2 Tn
Phát biểu: Cho một đồ thị G=(V, E) và tập các đỉnh T1, T2 Tn ⊂V Gọi
S1,S2 Sn là các đồ thị con liên thông của T1, T2 Tn Bài toán Steiner nhiều pha đặt
ra yêu cầu tìm một đồ thị có giá cực tiểu và chứa tất cả các đồ thị liên thông Si,i=1÷n
2.5.4 Bài toán mạng Steiner nhiều pha(Multiphase Steiner network)
Phát biểu: Cho một đồ thị G=(V, E) và các tập con của V:X1, Y1, X2,
Y2 Xn,Yn với Xi ∩ Yi = Ø Bài toán yêu cầu tìm một đồ thị con G’ của G thỏa mãnhai điểu kiện:
- Với mỗi i=1÷n, G’ chứa một cây Steiner Si của Xi
- Các điểm Steiner của Si chỉ được lấy từ Yi
2.5.5 Bài toán giật giải(Prize collecting Steiner problem)
Đối với bài toán Steiner trên đồ thị(có hướng hoặc vô hướng), yêu cầu củabài toán là tìm được một cây Steiner có giá nhỏ nhất có chứa một tập điểm Terminal
T biết trước Tuy vậy trong một số bài toán thực tế, tập điểm terminal này chưađược biết trước trong quá trình tiến hành giải mới lần lượt tìm ra các điểm này Bàitoán có thể phát biểu một cách hình thức như sau
Phát biểu: Cho một đồ thị G=(V, E), xuất phát từ một phương án nào đó,
bài toán sẽ kết nạp một số đỉnh của G vào phương án này, với mỗi một điểm mớiđược kết nạp vào, một giá trị k=(v-độ dài của các cạnh vừa kết nạp vào phương án)
sẽ được cộng vào hàm mục tiêu của phương án Mục tiêu tối ưu của bài toán này làlàm cực đại giá trị giá trị hàm mục tiêu của phương án cuối cùng Trong công thứctính k ở trên, v là một hằng số được gắn với mỗi đỉnh trên đồ thị G
Trong các tài liệu, bài toán này được ứng dụng trong lĩnh vực viễn thông.Tuy nhiên, trong thực tiễn bài toán ít khi được sử dụng và có rất ít tác giả nghiêncứu về dạng bài toán này
Trang 302.5.6 Bài toán cây Steiner có ràng buộc (Steiner tree packing problem)
Tác giả Năm Hệ số dư thừa Độ phức tạp
Takahashi, Matsuyama 1980 2.000 O(n2)
Karpinski, Zelikovsky 1997 1.644 O(n k ), k→∞
Hougardy, Promel 1998 1.598 O(n k ), k→∞
Robbin, Zelikovsky 2000 1.550 O(n k ), k→∞
Bảng 1.1 Một số giải thuật gần đúng cho bài toán trên đồ thị.
Phát biểu: Cho một đồ thị trọng số có giới hạn G=(V, E, f, c) trong đó c là
một hàm rằng buộc áp dụng cho mỗi cạnh của đồ thị c: E→R+, và một bộ tập con
các đỉnh của G: T1, T2 Tn ⊂ E Bài toán đặt ra là phải tìm n tập con các cạnh của E:
S1, S2 S3 sao cho mỗi Ti∪Si là một cây Steiner và các cây Steiner này thỏa mãn hàm ràng buộc của G (ví dụ số cây Steiner sử dụng cạnh e không vượt quá giá trị
ce)
Trên đây là một số dạng bài toán cây Steiner trên đồ thị, mỗi bài toán có ứng dụngriêng của nó Trong thực tế, bài toán dạng tổng quát được sử dụng nhiều hơn cả vàcác nghiên cứu về nó có số lượng vượt trội so với các dạng bài toán khác Các giảithuật giải bài toán dạng tổng quát hầu hết là các giải thuật xấp xỉ, một số khác là các
giải thuật heuristic Đối với các giải thuật xấp xỉ, một khái niệm hệ số dư thừa được
định nghĩa Hệ số dư thừa của một giải thuật xấp xỉ giải bài toán cây Steiner trênmạng là tỉ số giữa độ dài của cây Steiner tồi nhất tìm được bằng giải thuật này và độdài của cây Steiner tối ưu
Gọi độ dài của cây Steiner tìm được bằng giải thuật xấp xỉ là Lx và độ dàicủa cây Steiner tối ưu là Lo thì hệ số dư thừa được định nghĩa như sau
2.5.7 Thiết kế vi mạch VLSI
Trong bước thiết kế vật lý của các vi mạch VLSI, pha đi dây bao gồm việc xácđịnh sơ đồ nối dây cho các điểm nối của từng khối hay từng cổng trên chip Một
Trang 31mạng trên chip là tập hợp các điểm cần phải nối với nhau, thường bao gồm mộtđiểm nguồn và nhiều điểm đích Trong việc đi dây, sơ đồ kết nối được đặc tả chomột số lượng lớn các mạng Kết nối thường được thực hiện trên một mạng một lúc.Mỗi phương án kết nối cho một mạng đơn là một cây Steiner phủ các điểm nối.Nhiều yêu cầu tối ưu đặt ra cho việc nối mạng phụ thuộc vào chức năng của từngmạng.
Hình 1.20 Cây Steiner trên đồ thị lưới
Việc thiết kế VLSI, các đường nối chỉ là các đường ngang dọc trên bảngmạch Bài toán tối ưu chiều dài dây nối được đưa về một biến thể của bài toán câySteiner, đó là bài toán cây Steiner thẳng góc trên đồ thị lưới
2.5.8 Thiết kế mạng viễn thông
Quy trình thiết kế mạng viễn thông đặc biệt phức tạp bởi cùng lúc phải xét cácbài toán về thông lượng, truyền tải, tài nguyên, hiệu năng cho mạng Nhấn mạnh vềkhả năng của một mạng viễn thông là khả năng duy trì kết nối liên tục của mạng,thực hiện các chức năng của nó đối mặt với các phá hủy và tắc nghẽn
Thiết kế mạng viễn thông thường được chia thành các bài toán tối ưu nhỏ hơnnhư thiết kế cấu hình mạng, mô hình hóa và dự đoán lượng thông tin truyền tải…Xây dựng cấu hình mạng nhằm đảm bảo độ tin cậy Ngoài việc phụ thuộc vào độ tincậy của các thiết bị hoạt động trong mạng, tính tin cậy của mạng còn phụ thuộc vàocách mà các thiết bị đó nối với nhau Việc đảm bảo tính liên thông và đồng thời tìmcách nối để tối ưu các hàm mục tiêu đề ra liên quan đến giải bài toán cây Steinernhỏ nhất
2.5.9 Bài toán phát sinh loài
Sự phát sinh loài được biểu diễn bởi một cây tiến hóa Nghiên cứu xây dựng câyphát sinh loài là một trong những bài toán tính toán cơ bản trong sinh học Chúng taquan tâm ở đây tới sự phân loài được mô tả bởi các tính trạng mà chúng thể hiện ra
từ tập các đặc tính Dữ liệu trên được mô tả dưới dạng bảng nhị phân, phần tử (i, j) nhận giá trị 1 (hoặc 0) tương ứng với loài i có tính trạng j (hoặc không) Sự khác
biệt giữa hai loài đo bằng khoảng cách Hamming giữa hai vector tính trạng
Trong khi nghiên cứu sự tiến hóa trong sinh học, xây dựng cây tiến hóa sao cho
sự khác biệt giữa các loài đạt giá trị nhỏ nhất là bài toán cây Steiner nhỏ nhất Cácđiểm kết thúc là các vector tính trạng của loài, các nút trung gian bản thân cũng làcác vector nhị phân, chúng nằm trên cạnh nối từ gốc (tổ tiên) đến lá (các loài).Trọng số của các cạnh đo bằng khoảng cách Hamming
2.6 Các thuật toán giải đúng
Như trình bày trong các mục ở trên, bài toán cây Steiner trên đồ thị thuộc lớpNP-khó Các thuật toán giải chính xác hiện biết đều chưa thể đạt tới thời gian đa
Trang 32thức Mục này trình bày hai thuật toán giải đúng bài toán cây Steiner Đầu tiên làthuật toán quy hoạch động của Dreyfus và Wagner [4].
2.6.1 Thuật toán Dreyfus-Wagner
Cho đồ thị vô hướng liên thông G = (V, E), T là tập đỉnh kết thúc của đồ thị.(G, c, T) là một thể hiện của bài toán, với mọi tập U ⊆ T và x ∈ V(G)\U, ta địnhnghĩa:
1( ) : min{ ( ( ))}
p U = c E S
với S1 là cây Steiner phủ tập U trong G,
2( { }, ) : min{ ( ( ))}
q U∪ x x = c E S
với S2 là cây Steiner phủ tập U ∪ {x} trong G có lá là các phần tử của U.
Khi đó với mọi U ⊆ V(G), |U| ≥ 2 và x ∈ V(G) \ U ta có:
(b) Xét cây Steiner nhỏ nhất S phủ tập U ∪ {x} Ký hiệu degs(x) là bậc trong S của nút x Nếu degs(x) ≥ 2 thì S có thể tách theo x thành hai cây Steiner nhỏ nhất
Như vậy, giá trị nhỏ nhất của ba trường hợp trên sẽ được tính trong (b).
Từ công thức đệ quy trên, chúng ta thu được thuật toán quy hoạch động sau:
in Đồ thị vô hướng liên thông G, trọng số c và tập đỉnh kết thúc T
out Trọng số p(T) của cây Steiner nhỏ nhất phủ tập T của đồ thị G
1 BEGIN
2 Nếu |T| ≤ 1 thì p(T) = 0, kết thúc thuật toán;
3 Tính distG(x,y) và đặt p(x,y) = distG(x,y) cho mọi x, y;
4 for k=2 to |T|-1
5 for (U ⊆ T, |U|=k) và (x∈V(G)\U)
6 Tính q(U∪{x}, x) theo công thức (a);
Trang 337 endfor;
8 for (U ⊆ T, |U|=k) và (x∈V(G)\U)
9 Tính p(U∪{x}) theo công thức (b);
Bước 2 của thuật toán tính trong thời gian O(n3) bằng cách áp dụng thuật toán
đường đi ngắn nhất giữa các cặp đỉnh Công thức đệ quy ở bước 4 tính mất O(3 t) vì
có 3t khả năng chia T thành U’, U \ U’ và T \ U Công thức 5 cần thời gian là
O(n 22t ) Các công thức 4 và 5 lặp O(n) lần, ta rút ra được đpcm ■
2.6.2 Mô hình quy hoạch nguyên cho SPG
Bản thân bài toán cây Steiner trên đồ thị là bài toán tối ưu tổ hợp, do vậy nó
có thể xây dựng mô hình quy hoạch tuyến tính nguyên cho bài toán và áp dụng các phương pháp giải quy hoạch tuyến tính nguyên để tìm phương án tối ưu
Cây Steiner có thể được biểu diễn bởi một biến vector nhị phân x = (xe) |E|
Vector x có | E | thành phần, mỗi thành phần tương ứng với một cạnh của G, giá trị của thành phần xe là 1 hoặc 0 phụ thuộc cạnh e có mặt trong cây Steiner hay không Trọng số của cạnh e ký hiệu là ce.
Bài toán cây Steiner trên đồ thị có mô hình toán học như sau:
tế, các kỹ thuật metaheuristic thường được sử dụng để giải các bài toán tối ưu tổhợp Chúng không được đảm bảo về mặt lý thuyết là có thể đưa ra lời giải tối ưu,nhưng qua những thử nghiệm thực tế, kết quả mà các phép tìm kiếm metaheuristicmang lại rất khả quan Một số kỹ thuật tìm kiếm metaheuristic :
Trang 34• Thuật toán di truyền [7, 8, 9, 12]
• Tìm kiếm Tabu [27]
• GRASP (Greedy Random Adaptive Search Procedures) [16, 17]
Hiện nay cả ba kỹ thuật này đều đã được áp dụng để giải bài toán cây Steiner.Đây là các kỹ thuật tìm kiếm tối ưu cục bộ nhưng thực hiện lặp nhiều lần trong toàn
bộ không gian Trong phần tiếp theo của đồ án sẽ trình bày thuật toán di truyền ápdụng vào giải bài toán cây Steiner trên đồ thị
Trang 35CHƯƠNG 2 GIẢI THUẬT DI TRUYỀN
Giải thuật di truyền (Genentic Algorithm-GA) là một phần của tính toán tiến hóa (Evolutionary Computing), một lĩnh vực đang phát triển rất nhanh của Trí tuệ
nhân tạo
Như đã biết, GA được lấy cảm hứng từ học thuyết của Darwin về sự tiến hóa.
Nói một cách đơn giản thì bài toán được giải quyết bằng quá trình tiến hóa đưa rakết quả tốt nhất hay cá thể khỏe nhất Hiểu theo cách khác, lời giải được tiến hóa
GA mô phỏng quá trình tiến hóa tự nhiên: Kế thừa và đấu tranh sinh tồn để
cải tiến các thế hệ và khảo sát không gian lời giải GA thường được dùng trong các
bài toán tối ưu, hay lớp các bài toán NP_khó, đó là lớp bài toán rất hay nhưngthường rất khó tìm ra lời giải tối ưu với các giải thuật cổ điển vét cạn trong khônggian tìm kiếm
1 Giới thiệu và lịch sử phát triển
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ĩnhvự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 trongthự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
Trang 36củ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íchnghi đượ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 laighé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ọcmang 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 đềunhằ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ínhchấ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ếutrong 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 độtbiế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ẫunhiê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ộttiê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.
Trang 37Giả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);
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
Trang 38toà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ọnlọ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ựachọn, nhưng ý tưởng chủ đạo luôn là chọn những bố mẹ tốt hơn với hi vọngsinh 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ếnkhô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ể (trongmộ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ệusuấ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ấykí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ỉ rakhô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ơivà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ỏamã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