Công nghệ thông tin đóng vai trò quan trọng trong sự phát triển của xã hội trong thời đại ngày nay. Công nghệ thông tin đã trở thành nhân tố quan trọng, là cầu nối trao đổi giữa các thành phần của xã hội toàn cầu, của mọi vấn đề. Việc nhanh chóng đưa ứng dụng công nghệ thông tin vào quá trình tự động hóa trong sản xuất kinh doanh là vấn đề đang, đã và sẽ luôn được quan tâm bởi lẽ công nghệ thông tin có vai trò rất lớn trong các hoạt động kinh tế, sản xuất kinh doanh, bán hàng, xúc tiến thương mại, quản trị doanh nghiệp. Lý thuyết đồ thị là một trong những lý thuyết quan trọng được sử dụng nhằm ứng dụng công nghệ thông tin trong giải quyết các vấn đề thực tế. Từ các bài toán phát sinh trong công nghiệp, kĩ thuật, chúng ta sử dụng các cách thức mô hình hóa nhằm đưa về một bài toán tương đương và sử dụng các giải thuật đã có để giải quyết. Bài toán băng thông đồ thị (graph bandwidth) được định nghĩa từ vấn đề thiết kế tự động các mạch điện tử và là một bài toán NPđầy đủ, tức là không có một giải thuật hiệu quả với thời gian đa thức để giải quyết. Giải thuật di truyền là một trong những giải thuật xấp xỉ nổi bật để giải quyết những bài toán NPđầy đủ. Vì tính tương thích này mà em đã lựa chọn đề tài “Giải thuật di truyền giải bài toán băng thông đồ thị” làm đề tài khóa luận tốt nghiệp.
Trang 1Lời cảm ơn
Đầu tiên em xin gửi lời cảm ơn chân thành đến các thầy giáo, cô giáo
khoa Toán - Công nghệ Trường Đại học Hùng Vương, những người đã dạy
dỗ, trang bị cho em những kiến thức chuyên môn trong suốt bốn năm học
cũng như trong suốt thời gian thực hiện khóa luận tốt nghiệp
Để hoàn thành khóa luận tốt nghiệp, đặc biệt em xin bày tỏ lòng biết
ơn sâu sắc tới thầy giáo ThS Nguyễn Hùng Cường – giảng viên Trường
Đại học Hùng Vương Thầy đã dành nhiều thời gian quý báu chỉ bảo, nhiệt
tình giúp đỡ em trong suốt quá trình thực hiện khóa luận tốt nghiệp, đồng
thời thầy còn là người giúp em lĩnh hội được thêm nhiều kiến thức
Em xin gửi lời cảm ơn chân thành và sâu sắc tới gia đình, bạn bè là
những người luôn sát cánh bên em, chia sẻ, động viên em trong suốt quá
trình học tập cũng như trong thời gian em thực hiện khóa luận tốt nghiệp
Tuy nhiên với thời gian và kinh nghiệm làm việc của bản thân em chưa
nhiều nên khóa luận khó tránh khỏi những hạn chế Em hi vọng nhận được
sự ủng hộ và tạo điều kiện giúp đỡ của thầy cô và bạn bè để có thể khắc
phục những tồn tại và mở rộng nghiên cứu thêm về đề tài này
Em xin chân thành cảm ơn!
Phú Thọ, tháng 4 năm 2014
Sinh viên
Nguyễn Thị Thương Hiền
Trang 2Mục lục
1.1 Khái niệm về đồ thị 11
1.2 Biểu diễn đồ thị trên máy tính 14
1.2.1 Ma trận kề 14
1.2.2 Danh sách cạnh 15
1.2.3 Danh sách kề 17
1.3 Sự phân lớp các bài toán 19
1.3.1 Lớp bài toán P 20
1.3.2 Lớp bài toán N P 20
1.3.3 Bài toán N P –khó 21
1.3.4 Bài toán N P -đầy đủ 22
Chương 2 Giải thuật di truyền và tiến hóa 24 2.1 Mã hóa các chuỗi nhiễm sắc thể 26
2.1.1 Mã hóa theo giá trị 27
Trang 32.1.2 Mã hóa hoán vị 27
2.1.3 Mã hóa theo cấu trúc cây 28
2.2 Hàm thích nghi 28
2.3 Đấu tranh sinh tồn 28
2.4 Thao tác lai ghép 30
2.4.1 Lai ghép theo điểm cắt 30
2.4.2 Lai ghép đồng bộ 32
2.4.3 Cơ chế lựa chọn cá thể cha-mẹ 33
2.5 Thao tác đột biến 35
2.5.1 Đột biến đảo bit 36
2.5.2 Đột biến đổi giá trị 36
2.5.3 Đột biến đảo đoạn 37
2.6 Khởi tạo quần thể 37
2.7 Cách thức nạp lại quần thể 38
2.7.1 Nạp lại sau khi lai ghép 38
2.7.2 Nạp lại khi kích thước quần thể quá lớn 39
Chương 3 Giải bài toán băng thông đồ thị bằng giải thuật di truyền 41 3.1 Bài toán băng thông đồ thị 41
3.1.1 Bài toán 41
3.1.2 Phân tích bài toán 41
3.1.3 Biểu diễn đồ thị bài toán 42
3.2 Xây dựng các thao tác của giải thuật di truyền trên bài toán băng thông đồ thị 42
3.2.1 Biểu diễn nhiễm sắc thể 42
Trang 43.2.2 Hàm thích nghi 43
3.2.3 Đấu tranh sinh tồn 43
3.2.4 Thao tác lai ghép 44
3.2.5 Thao tác đột biến 45
3.2.6 Khởi tạo quần thể 46
3.2.7 Kết quả chương trình thử nghiệm 46
Chương 4 Các kết quả cài đặt thử nghiệm 53 4.1 Giao diện chính của chương trình 53
4.2 Dữ liệu thử nghiệm 54
4.3 Môi trường thử nghiệm 55
4.4 Tiến hành cài đặt thử nghiệm 55
4.4.1 Thử nghiệm với các bộ dữ liệu 55
4.4.2 Thử nghiệm thay đổi các tham số của giải thuật di truyền 56
Trang 5Danh sách hình vẽ
1.1 Đồ thị vô hướng 12
1.2 Đồ thị có hướng 13
1.3 Biểu diễn đồ thị bằng ma trận kề 15
1.4 Đồ thị biểu diễn danh sách cạnh 16
1.5 Biểu diễn danh sách cạnh trên mảng 16
1.6 Biểu diễn trên danh sách móc nối 16
1.7 Đồ thị biểu diễn danh sách kề 17
1.8 Biểu diễn danh sách kề của đồ thị 18
1.9 Biểu diễn danh sách móc nối của đồ thị 19
2.1 Sơ đồ giải thuật di truyền 26
2.2 Phương pháp lai ghép theo điểm cắt 31
2.3 Phương pháp lai ghép đồng bộ 32
2.4 Phương pháp đột biến đảo bít 36
2.5 Phương pháp đột biến đảo giá trị 36
2.6 Phương pháp đột biến đảo đoạn 37
4.1 Giao diện chính của chương trình 53
4.2 Kết quả bộ dữ liệu test5 khi dùng giải thuật di truyền 57
4.3 Sơ đồ thể hiện giá trị băng thông khi thay đổi xác suất lai 58
4.4 Sơ đồ thể hiện thời gian chạy khi thay đổi xác suất lai 58
Trang 64.5 Sơ đồ giá trị băng thông khi thay đổi xác suất đột biến 59
4.6 Sơ đồ thời gian chạy khi thay đổi xác suất đột biến 60
4.7 Sơ đồ giá trị băng thông khi thay đổi số lượng quần thể 61
4.8 Sơ đồ thời gian chạy khi thay đổi số lượng quần thể 62
4.9 Sơ đồ giá trị băng thông khi thay đổi số thế hệ 63
4.10Sơ đồ thời gian chạy khi thay đổi số thế hệ 64
Trang 7Danh sách bảng
4.1 So sánh giải thuật đệ quy và giải thuật di truyền 56
4.2 Kết quả test5 khi thay đổi xác suất lai 57
4.3 Kết quả thu được khi thay đổi xác suất đột biến 59
4.4 Kết quả thu được khi thay đổi độ lớn quần thể 61
4.5 Kết quả thu được khi thay đổi số thế hệ 63
Trang 8Mở đầu
1 Lý do chọn đề tài khóa luận
Công nghệ thông tin đóng vai trò quan trọng trong sự phát triển của
xã hội trong thời đại ngày nay Công nghệ thông tin đã trở thành nhân tố
quan trọng, là cầu nối trao đổi giữa các thành phần của xã hội toàn cầu,
của mọi vấn đề Việc nhanh chóng đưa ứng dụng công nghệ thông tin vào
quá trình tự động hóa trong sản xuất kinh doanh là vấn đề đang, đã và sẽ
luôn được quan tâm bởi lẽ công nghệ thông tin có vai trò rất lớn trong các
hoạt động kinh tế, sản xuất kinh doanh, bán hàng, xúc tiến thương mại,
quản trị doanh nghiệp
Lý thuyết đồ thị là một trong những lý thuyết quan trọng được sử dụng
nhằm ứng dụng công nghệ thông tin trong giải quyết các vấn đề thực tế
Từ các bài toán phát sinh trong công nghiệp, kĩ thuật, chúng ta sử dụng
các cách thức mô hình hóa nhằm đưa về một bài toán tương đương và sử
dụng các giải thuật đã có để giải quyết Bài toán băng thông đồ thị (graph
bandwidth) được định nghĩa từ vấn đề thiết kế tự động các mạch điện tử
và là một bài toán NP-đầy đủ, tức là không có một giải thuật hiệu quả với
thời gian đa thức để giải quyết
Giải thuật di truyền là một trong những giải thuật xấp xỉ nổi bật để
giải quyết những bài toán NP-đầy đủ Vì tính tương thích này mà em đã
lựa chọn đề tài “Giải thuật di truyền giải bài toán băng thông đồ thị” làm
đề tài khóa luận tốt nghiệp
2 Mục tiêu khóa luận
- Cài đặt giải thuật di truyền giải bài toán băng thông đồ thị Đưa ra
Trang 9kết quả gần tối ưu của bài toán băng thông đồ thị với thời gian chạy
đa thức
- Nghiên cứu ảnh hưởng của các kĩ thuật tác động lên giải thuật di
truyền nhằm cải thiện hiệu quả chạy
3 Nhiệm vụ nghiên cứu
- Tìm hiểu bài toán băng thông đồ thị
- Tìm hiểu giải thuật di truyền
- Cài đặt trực tiếp giải thuật di truyền trong giải quyết bài toán băng
thông đồ thị
4 Phương pháp nghiên cứu
- Phương pháp nghiên cứu tự luận: Đọc và nghiên cứu tài liệu, giáo trình
có liên quan đến bài toán băng thông đồ thị và giải thuật di truyền
- Phương pháp nghiên cứu thực nghiệm: Từ những ý tưởng ban đầu,
triển khai thực hiện ý tưởng đó một cách có hệ thống
- Phương pháp tổng kết kinh nghiệm: Qua việc nghiên tham khảo tài
liệu, giáo trình từ đó rút ra kinh nghiệm để áp dụng vào việc nghiên
cứu
- Phương pháp lấy ý kiến chuyên gia: Lấy ý kiến của giảng viên trực
tiếp hướng dẫn, các giảng viên khác để hoàn thiện về mặt nội dung và
hình thức của khóa luận
5 Đối tượng và phạm vi nghiên cứu
- Đối tượng: bài toán băng thông đồ thị, giải thuật di truyền, ngôn ngữ
Trang 10- Phạm vi: bài toán băng thông đồ thị, giải thuật di truyền.
6 Ý nghĩa khoa học
Đưa ra giải thuật để giải quyết bài toán băng thông đồ thị với thời gian
chạy đa thức được kết quả xấp xỉ đúng hoặc đúng
7 Bố cục của khóa luận
Khóa luận được chia thành bốn chương:
Chương 1: Nhắc lại khái niệm về đồ thị, cách biểu diễn đồ thị trên máy
tính và sự phân lớp các bài toán
Chương 2: Giới thiệu giải thuật di truyền và tiến hóa
Chương 3: Đưa ra phương pháp giải bài toán băng thông đồ thị bằng
giải thuật di truyền
Chương 4: Các kết quả cài đặt thử nghiệm
Trang 11Chương 1
Tổng quan về lý thuyết đồ thị
Trên thực tế nhiều bài toán liên quan tới một tập các đối tượng và những
mối liên hệ giữa chúng, đòi hỏi phải đặt ra một mô hình biểu diễn một
cách chặt chẽ và tổng quát bằng ngôn ngữ kí hiệu, đó là đồ thị Những ý
tưởng cơ bản đó được đưa ra từ thế kỉ thứ XVIII bởi nhà toán học Thụy
Sĩ Leonhard Euler, ông đã dùng mô hình đồ thị để giải quyết bài toán về
những cây cầu Konigsberg nổi tiếng Cùng với sự ra đời của máy tính điện
tử và sự phát triển nhanh chóng của Tin học, lý thuyết đồ thị ngày càng
được quan tâm đến nhiều hơn Đặc biệt là các thuật toán trên đồ thị đã
có nhiều ứng dụng trong nhiều lĩnh vực khác nhau như: Mạng máy tính,
Lý thuyết mã, Tối ưu hóa, Kinh tế học
Trong chương này em trình bày một số khái niệm cơ bản về đồ thị, biểu
diễn đồ thị trên máy tính [1] và sự phân lớp các bài toán [3] Đây là những
khái niệm và kết quả cơ bản em không đi sâu vào nó cũng như chứng minh
các kết quả này
1.1 Khái niệm về đồ thị
1.1.1 Định nghĩa Đồ thị là một cấu trúc rời rạc gồm các đỉnh và các
cạnh nối các đỉnh đó Được mô tả hình thức: G=(V, E) V gọi là tập các
đỉnh và E gọi là tập các cạnh Có thể coi E là tập các cặp (u, v) với u và
v là hai đỉnh của V
Trang 12+ G được gọi là đồ thị vô hướng nếu các cạnh trong E không định
hướng, tức là nối hai đỉnh u, v bất kỳ cũng là cạnh nối hai đỉnh u, v Hay
nói cách khác tập E gồm các cặp (u, v) không tính thứ tự: (u, v) ≡ (v, u)
+ G được gọi là đồ thị có hướng nếu các cạnh trong E có định hướng,
có thể có cạnh nối từ định u tới đỉnh v nhưng chưa chắc đã có cạnh nối từ
đỉnh v tới đỉnh u Hay nói cách khác tập E gồm các cặp (u, v) có thứ tự:
(u, v) 6= (v, u) Trong đồ thị có hướng các cạnh được gọi là các cung Đồ
thị vô hướng cũng có thể coi là đồ thị có hướng nếu như ta coi cạnh nối hai
đỉnh u, v bất kỳ tương đương với hai cung (u, v) và (v, u)
Ví dụ: Đồ thị vô hướng G = (V, E)
Hình 1.1: Đồ thị vô hướng
Trang 13Để tiện cho việc cài đặt thì việc biểu diễn đồ thị trong bộ nhớ máy tính
là rất quan trọng Yêu cầu biểu diễn đồ thị sao cho đơn giản, trực quan,
dễ dàng kiểm tra, có thể biểu diễn đồ thị với số đỉnh lớn mà không gây
lãng phí bộ nhớ và không mất nhiều thời gian Trong phần này em khảo
sát những thuật toán cơ bản nhất có thể dễ dàng cài đặt trên máy tính
Trang 14Từ đó lựa chọn thuật toán thích hợp để biểu diễn trong giải bài toán băng
thông đồ thị
1.2 Biểu diễn đồ thị trên máy tính
1.2.1 Ma trận kề
Giả sử đồ thị G = (V, E) có số đỉnh n, không mất tính tổng quát ta
có thể coi các đỉnh được đánh số 1, 2, 3, , n Khi đó ta có thể biểu diễn
đồ thị bằng một ma trận vuông A = [a[u, v]] cấp n Trong đó:
a[u, v] = 1 hay a[u, v] = T RU E nếu (u, v) ∈ E
a[u, v] = 0 hay a[u, v] = F ALSE nếu (u, v) /∈ E
Với mọi u giá trị của a[u, u] có thể đặt tùy theo mục đích, thông thường
nên đặt bằng 0
Ví dụ biểu diễn đồ thị bằng ma trận kề:
Ưu điểm của ma trận kề:
+ Đơn giản, trực quan, dễ cài đặt trên máy tính
+ Để kiểm tra xem hai đỉnh (u, v) của đồ thị có kề nhau hay không, ta
chỉ việc kiểm tra bằng một số phép so sánh a[u, v] 6= 0
Nhược điểm của ma trận kề:
+ Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận kề luôn luôn đòi hỏi
n2 ô nhớ để lưu các phần tử ma trận, điều đó gây lãng phí bộ nhớ dẫn
đến việc không thể biểu diễn được đồ thị với số đỉnh lớn
+ Với một đỉnh u bất kỳ của đồ thị, nhiều khi ta phải xét tất cả các đỉnh
v khác kề với nó, hoặc xét tất cả các cạnh liên thuộc với nó Trên ma
Trang 15Hình 1.3: Biểu diễn đồ thị bằng ma trận kề
trận kề việc đó được thực hiện bằng cách xét tất cả các đỉnh v và kiểm
tra điều kiện a[u, v] 6= 0 Như vậy, ngay cả khi đỉnh u là đỉnh cô lập
(không kề với đỉnh nào) hoặc đỉnh treo (chỉ kề với một đỉnh) ta cũng
buộc phải xét tất cả các đỉnh và kiểm tra điều kiện trên dẫn tới lãng
phí thời gian
1.2.2 Danh sách cạnh
Giả sử đồ thị G = (V, E) có số đỉnh n, ta có thể biểu diễn đồ thị dưới
dạng danh sách cạnh bằng cách liệt kê tất cả các cạnh của đồ thị trong
một danh sách, mỗi phần tử của danh sách là một cặp (u, v) tương ứng với
một cạnh của đồ thị (Trong trường hợp đồ thị có hướng thì mỗi cặp (u, v)
Trang 16tương ứng với một cung, u là đỉnh đầu và v là đỉnh cuối của cung) Danh
sách được lưu trong bộ nhớ dưới dạng mảng hoặc danh sách móc nối
Ví dụ đồ thị biểu diễn danh sách cạnh:
Hình 1.4: Đồ thị biểu diễn danh sách cạnh
Cài đặt trên mảng:
Hình 1.5: Biểu diễn danh sách cạnh trên mảng
Cài đặt trên danh sách móc nối:
Hình 1.6: Biểu diễn trên danh sách móc nối
Ưu điểm của danh sách cạnh:
+ Trong trường hợp đồ thị thưa (có số cạnh tương đối nhỏ), cách biểu
Trang 17diễn bằng danh sách cạnh sẽ tiết kiệm được không gian lưu trữ.
+ Trong một số trường hợp, ta phải xét tất cả các cạnh của đồ thị thì
cài đặt trên danh sách cạnh làm cho việc duyệt các cạnh dễ dàng hơn
Nhược điểm cơ bản của danh sách cạnh:
Khi ta cần duyệt tất cả các đỉnh kề với đỉnh v nào đó của đồ thị, thì
chẳng có cách nào khác là phải duyệt tất cả các cạnh, lọc ra những cạnh
có chứa đỉnh v và xét đỉnh còn lại Điều đó khá tốn thời gian trong trường
hợp đồ thị nhiều cạnh
1.2.3 Danh sách kề
Để khắc phục nhược điểm của các phương pháp ma trận kề và danh
sách cạnh ta có thể sử dụng phương pháp biểu diễn đồ thị bằng danh sách
kề Trong cách biểu diễn này, với mỗi đỉnh v của đồ thị, ta cho tương ứng
với nó một danh sách các đỉnh kề với v
Ví dụ: Với đồ thị G = (V, E) V gồm n đỉnh và E gồm m cạnh Có hai
cách cài đặt danh sách kề phổ biến:
Hình 1.7: Đồ thị biểu diễn danh sách kề
Cách 1: Dùng một mảng các đỉnh, mảng đó chia làm n đoạn, đoạn
thứ i trong mảng lưu danh sách các đỉnh kề với đỉnh i: Với đồ thị như trên,
Trang 18Hình 1.8: Biểu diễn danh sách kề của đồ thị
Để biết một đoạn nằm từ chỉ số nào đến chỉ số nào, ta có một
mảng Head lưu vị trí riêng Head[i] sẽ bằng chỉ số liền trước đoạn thứ
i Quy ước Head[n + 1] bằng m Với đồ thị trên thì mảng Head[1 6] sẽ
là: (0, 3, 5, 8, 10, 12) Các phần tử Adj[Head[i] + 1 Head[i + 1]] sẽ chứa các
đỉnh kề với đỉnh i Lưu ý rằng với đồ thị có hướng gồm m cung thì cấu
trúc này cần phải đủ chứa m phần tử, với đồ thị vô hướng m cạnh thì cấu
trúc này cần phải đủ chứa 2m phần tử
Cách 2: Dùng các danh sách móc nối: Với mỗi đỉnh i của đồ thị, ta
cho tương ứng với nó một danh sách móc nối các đỉnh kề với i Có nghĩa
là tương ứng với một đỉnh i, ta phải lưu lại List[i] là chốt của danh sách
móc nối Ví dụ đồ thị trên thì các danh sách móc nối:
Trang 19Hình 1.9: Biểu diễn danh sách móc nối của đồ thị
1.3 Sự phân lớp các bài toán
Với một bài toán cho trước có 2 khả năng xảy ra: Không giải được
hoặc giải được bằng thuật toán Trường hợp bài toán giải được bằng thuật
toán cũng chia làm 2 loại:
Trang 20+ Thực tế giải được: Được hiểu là thuật toán xử lý trong thời gian đủ
nhanh, thực tế cho phép, đó là thuật toán có độ phức tạp thời gian là
đa thức
+ Thực tế khó giải: Được hiểu là thuật toán xử lý trong nhiều thời gian,
thực tế khó chấp nhận, đó là thuật toán có độ phức tạp thời gian là
hàm mũ
Do đó, ta có sự phân lớp các bài toán do 2 tác giả Cook và Karp đề
xuất năm 1970-1971 như sau:
1.3.1 Lớp bài toán P
Lớp bài toán P là lớp các bài toán có thể giải được bằng thuật toán
đơn định trong thời gian đa thức
Ví dụ: Bài toán tìm kiếm có thể giải được nhờ thuật toán với thời gian
tính toán là O(n) nên thuộc lớp bài toán P
1.3.2 Lớp bài toán N P
Lớp bài toán N P là lớp các bài toán có thể giải được bằng thuật toán
không đơn định trong thời gian đa thức Hay là lớp các bài toán mà mọi
nghiệm giả định đều có thể được kiểm chứng trong thời gian đa thức
Ví dụ: Bài toán kiểm tra một dãy đỉnh của đồ thị G có là chu trình Hamilton
hay không Bài toán này thực hiện sau thời gian có thể chấp nhận được
nên thuộc lớp bài toán N P
Từ định nghĩa lớp bài toán P và lớp bài toán N P ta thấy P ∈ N P
Nhưng hiện nay chưa chứng minh được P là tập con thực sự của N P Một
trong số các vấn đề mở trong khoa học máy tính là: “Nếu một bài toán
Trang 21có lời giải có thể kiểm chứng được nhanh chóng, thì có thể tìm lời giải đó
nhanh chóng hay không?”
“Dẫn về được” hay “phép quy dẫn”:
Bài toán A được gọi là “dẫn về được” bài toán B sau thời gian đa thức
nếu có một thuật toán đa thức để giải bài toán B thì cũng có một thuật
toán đa thức để giải bài toán A Nghĩa là: Bài toán B “khó hơn” bài toán
A hay A “dễ hơn” B hay A là trường hợp riêng của B Kí hiệu A ∝ B.Phép quy dẫn có tính chất bắc cầu: A ∝ B và B ∝ C ⇒ A ∝ C
Tư tưởng quy dẫn đã giải thích vai trò quan trọng của lớp bài toán P Nếu
ta có bài toán A thuộc lớp P và một bài toán B có thể quy dẫn về A, thì
B cũng thuộc vào P
“Khó tương đương”:
Bài toán A được gọi là “khó tương đương” bài toán B nếu A ∝ B và
B ∝ A Kí hiệu A ∼ B
Bài toán quyết định:
Bài toán quyết định là bài toán mà đầu ra chỉ có thể là “Yes” hoặc “No”
(Đúng/Sai)
Ví dụ: Bài toán về tính nguyên tố: “Hỏi số nguyên n có là số nguyên tố
hay không?” giả sử đầu vào là số tự nhiên n thì đầuu ra trả lời "Yes" nếu
n là số nguyên tố, "No" nếu n không là số nguyên tố Chẳng hạn n = 23
là bộ dữ liệu vào “Yes”, còn n = 24 là bộ dữ liệu vào “No” của bài toán
1.3.3 Bài toán N P –khó
Bài toán A được gọi là N P -khó nếu như tồn tại thuật toán đa thức
để giải bài toán A thì kéo theo sự tồn tại thuật toán đa thức để giải mọi bài
Trang 22toán trong lớp bài toán N P Hay bài toán A là N P –khó nếu như B ∝ A,
với mọi bài toán B ∈ N P
Lớp bài toán N P -khó là bài toán mà không có thuật toán thời gian tính
đa thức để giải đúng nó, mà chỉ có các thuật toán giải trong thời gian hàm
mũ
Ví dụ: Bài toán người du lịch là một bài toán khá nổi tiếng trong lĩnh
vực tối ưu tổ hợp được nghiên cứu trong lý thuyết khoa học máy tính Nó
được phát biểu như sau: Cho một danh sách các thành phố và khoảng cách
giữa chúng, nhiệm vụ là phải tìm đường đi ngắn nhất có thể mà chỉ thăm
mỗi thành phố đúng một lần và trở về thành phố xuất phát Bài toán được
lần đầu tiên đưa ra như một vấn đề toán học vào năm 1930 và là một trong
số những bài toán được nghiên cứu chuyên sâu trong lĩnh vực tổ hợp thời
đó Người ta chứng minh được rằng nó thuộc lớp bài toán N P -khó
Như vậy nếu ta có thể giải được một cách hiệu quả một bài toán N P –khó
cụ thể thì ta cũng có thể giải hiệu quả bất kỳ bài toán nào trong N P bằng
cách sử dụng thuật toán giải bài toán N P -khó như là một chương trình
con
1.3.4 Bài toán N P -đầy đủ
Một bài toán quyết định A được gọi là N P - đầy đủ nếu như:
i) A là bài toán trong N P ;
ii) Mọi bài toán trong N P đều có thể quy dẫn về A
Tổng kết chương 1: Chương 1 em đã nhắc lại khái niệm về đồ thị, chỉ
ra một số cách biểu diễn đồ thị trên máy tính như: biểu diễn đồ thị trên
máy tính bằng ma trận kề, danh sách cạnh và danh sách kề Trong chương
Trang 23này em cũng đề cập đến sự phân lớp các bài toán P , N P , N P khó Từ
đó em dùng cách biểu diễn đồ thị trên máy tính bằng ma trận kề cho bài
toán băng thông đồ thị
Trang 24Chương 2
Giải thuật di truyền và tiến hóa
Theo Học thuyết tiến hóa bởi chọn lọc tự nhiên của Charles Darwin đã
đưa ra năm 1859 trong quyển sách “Nguồn gốc các loài”, cho rằng trong
suốt quá trình tồn tại và phát triển của một quần thể sinh vật thì các cá
thể con được thừa hưởng các tính trạng từ cha mẹ chúng Ngoài ra, trong
quá trình sinh trưởng, các cá thể có thể bị đột biến dẫn đến một tính trạng
mới và tính trạng này sẽ được truyền lại cho con cháu của cá thể ấy
Tuy nhiên, do sự ràng buộc giữa các quần thể với nhau trong tự nhiên,
kích thước một quần thể sẽ luôn chỉ ở một giới hạn nào đó mà không thể
bùng nổ Từ hệ quả của việc con cái thừa hưởng tính trạng từ cha mẹ,
một thế hệ các cá thể con với các tính trạng khác nhau cùng đấu tranh để
sinh tồn, cá thể con nào có tính trạng “tốt” hơn, thích hợp cho việc sinh
tồn hơn sẽ có nhiều cơ may sống sót hơn, đó là sự chọn lọc tự nhiên Dần
dần, các cá thể với các tính trạng tốt sẽ có nhiều cơ may sống sót hơn,
đồng nghĩa với có nhiều cơ may tham gia vào quá trình tái tạo quần thể
thông qua quá trình sinh sản và thông tin di truyền về các tính trạng tốt
sẽ được phổ biến hơn trong quần thể dẫn đến các thế hệ cá thể mới trong
quần thể sẽ có các tính trạng tốt hơn các thế hệ cá thể cũ trong quần thể,
đó là sự tiến hóa
Người ta đã nhận thấy rằng sức mạnh của những cá thể tồn tại trên
thế giới thì được quy định bởi cấu trúc gene của nó và trải qua nhiều thế
Trang 25hệ, chỉ những gene tốt mới tiếp tục được phát triển trong khi các gene xấu
sẽ dần bị đào thải Hơn nữa, người ta cũng mong muốn rằng khi đem kết
hợp những cá thể với gene tốt lại với nhau sẽ cho ra các cá thể mới cũng
có gene tốt và thậm chí là tốt hơn so với thế hệ cha mẹ của chúng
Dựa trên ý tưởng của quá trình chọn lọc trong giới tự nhiên các giải
thuật di truyền (Genetic Algorithm - GA) được phát triển đầu tiên bởi
John Holland, công bố vào năm 1975 Áp dụng nguyên lý trên để tối ưu
hóa vấn đề bằng cách biểu diễn những lời giải khác nhau có thể thông qua
các chuỗi gene thích hợp và áp dụng phép “chọn lọc tự nhiên” trên những
chuỗi này Thuật toán cần một tập các giá trị ban đầu để khởi động, gọi là
“thế hệ 0”, có thể được thu thập bằng nhiều phương pháp khác nhau hay
đơn giản là được phát sinh ngẫu nhiên Sau đó, ba toán tử cơ bản gồm “kế
thừa”, “lai ghép” và “đột biến” sẽ được thực hiện nhiều lần cho đến khi thu
được lời giải đạt một số tiêu chuẩn nhất định Trong suốt mỗi lần lặp (mỗi
thế hệ) những chuỗi hiện hữu sẽ dịch chuyển về lời giải và chất lượng của
nó sẽ được ước tính [4]
Tiến trình sản sinh sẽ tạo ra một thế hệ mới Bắt đầu một thế hệ hiện
hữu, các chuỗi gene (hay còn gọi là các nhiễm sắc thể) sẽ được phát sinh
với một xác suất tương ứng với chất lượng của lời giải hiện tại Các nhiễm
sắc thể đại diện cho những lời giải với thuộc tính tốt, có được cơ hội tồn tại
cao hơn so với các nhiễm sắc thể mô tả giải pháp chỉ với những đặc trưng
xấu (đó là quy luật về “sự kế thừa của những tính chất thích hợp nhất”)
Toán tử lai ghép sẽ chọn những cặp các nhiễm sắc thể, bẻ gãy thứ tự gene
của chúng tại một số vị trí ngẫu nhiên và hoán đổi các thông tin di truyền
Cuối cùng, toán tử đột biến sẽ sản sinh ra một nhiễm sắc thể mới bằng
Trang 26cách lựa chọn ngẫu nhiên và thay đổi từng vị trí riêng lẻ của gene Đột
biến rất quan trọng để từng bước dịch chuyển quá trình tìm kiếm toàn cục
tới một vị trí mới cũng thuộc không gian lời gải Nếu không có đột biến
quá trình tìm kiếm sẽ hội tụ về một vị trí tối ưu địa phương mà không có
cơ hội để xem xét đến những điểm khác tốt hơn nữa Ta có sơ đồ chung
nhất cho các bài toán sử dụng giải thuật di truyền:
Hình 2.1: Sơ đồ giải thuật di truyền
2.1 Mã hóa các chuỗi nhiễm sắc thể
Trong giải thuật di truyền và tiến hóa, mỗi nhiễm sắc thể biểu diễn
cho một lời giải của bài toán và cách mã hóa nhiễm sắc thể được đánh giá
là một trong hai yếu tố quan trọng nhất Cách mã hóa ảnh hưởng tới cách
Trang 27thực hiện các thao tác di truyền thực hiện trên cá thể: lai ghép, đột biến
đồng thời cũng ảnh hưởng tới độ phức tạp khi tính toán độ thích nghi cho
các cá thể
2.1.1 Mã hóa theo giá trị
Mã hóa theo giá trị sử dụng một mảng các số nguyên hoặc thực để
biểu diễn kiểu gene cho một cá thể Cách mã hóa này thường được dùng
cho các bài toán tối ưu mà kiểu hình có thể chia nhỏ ra các thành phần
độc lập với nhau và tập xác định của các thành phần này có thể được rời
rạc hóa và biểu diễn bởi một số thực hoặc nguyên Ví dụ, để biểu diễn một
màu thuộc hệ màu RGB, có thể sử dụng mảng [vR, vG, vB] với vR, vG, vB
lần lượt là các giá trị cường độ màu của màu đỏ, màu xanh lá cây và màu
xanh da trời Màu đen được mã hóa [0, 0, 0], màu trắng [255, 255, 255], màu
đỏ [255, 0, 0],
Một dạng đặc biệt của mã hóa theo giá trị là mã hóa nhị phân: các
gene chỉ có thể nhận một trong hai giá trị 0 hoặc 1 Cách mã hóa này có
ứng dụng lớn trong các bài toán quyết định
Ví dụ:
Nhiễm sắc thể 1: 1101100100110110 biểu diễn cho giá trị 55605
Nhiễm sắc thể 2: 1101111000011111 biểu diễn cho giá trị 56863
2.1.2 Mã hóa hoán vị
Mã hóa hoán vị sử dụng một hoán vị của một tập các giá trị theo một
trình tự nào đó để biểu diễn kiểu gene cho một cá thể Mã hóa hoán vị
có thể được áp dụng trong lớp các bài toán liên quan đến tìm thứ tự cho
Trang 28một tập hợp các công việc nào đó như bài toán người du lịch, bài toán lập
lịch Ví dụ, trong bài toán người du lịch, để mã hóa cho một trình tự tham
quan qua n thành phố có thể sử dụng một hoán vị của tập (1, 2, 3, , n)
và trình tự các số trong hoán vị đó cho biết trình tự tham quan các thành
phố của người đó
2.1.3 Mã hóa theo cấu trúc cây
Trong dạng mã hóa theo cấu trúc cây, mỗi nhiễm sắc thể sẽ được mã
hóa bởi một cây các đối tượng Các đối tượng ở đây có thể là các hằng,
các biến, các câu lệnh, có quan hệ trực tiếp với nhau trong cấu trúc gene
của cá thể
2.2 Hàm thích nghi
Trong giải thuật di truyền hàm tính độ thích nghi là một trong hai yếu
tố quan trọng nhất quyết định đến hiệu năng của chương trình Tùy thuộc
theo yêu cầu của bài toán, hàm tính độ thích nghi phải phản ánh được độ
tốt của nhiễm sắc thể trong quần thể Ví dụ với bài toán người du lịch,
yêu cầu bài toán là tìm trình tự tham quan các thành phố sao cho đường
đi ngắn nhất nên hàm tính độ thích nghi chính là độ dài trình tự đường đi
đó
2.3 Đấu tranh sinh tồn
Đấu tranh sinh tồn hay chọn lọc tự nhiên là quá trình loại bỏ dần các
cá thể xấu, các cá thể có độ thích nghi thấp và giữ lại các cá thể tốt, nhằm
Trang 29duy trì nguồn gene tốt để phân bổ trong quần thể Cần quan tâm đến cách
lựa chọn các cá thể mới cho quần thể vì một số cá thể tuy có độ thích nghi
thấp nhưng lại có một đoạn gene tốt, nếu không quan tâm đến yếu tố này
thì giải thuật sẽ trở nên tham lam
Thao tác chọn lọc tự nhiên có thể được mô tả như sau:
- Sắp xếp quần thể theo thứ tự độ thích nghi giảm dần
- Lựa chọn một số cá thể để cho vào quần thể mới, loại bỏ các cá thể
còn lại
Giải thuật di truyền và tiến hóa thực hiện việc giải quyết các bài toán
tối ưu bằng cách mô phỏng quá trình tiến hóa của các quần thể trong tự
nhiên Vì vậy, giống như cách tự nhiên tác động lên quần thể trong quá
trình tiến hóa, giải thuật tiến hóa cũng sử dụng ba thao tác cơ bản trong
quá trình thực thi: thao tác lai ghép, thao tác đột biến và thao tác chọn
lọc tự nhiên
Cần chú ý đến hai vấn đề:
+ Trong tự nhiên thao tác đột biến có thể xảy ra trong quá trình sống
của cá thể hoặc trong quá trình sinh sản hữu tính tạo ra cá thể đó,
tuy nhiên trong giải thuật di truyền không tồn tại khái niệm “vòng đời
của cá thể” dẫn đến cá thể bị đột biến trong quá trình sinh sản hay
trong quá trình sống đều như nhau Do đó, việc cá thể có bị đột biến
hay không sẽ được xem xét đến trong quá trình sinh sản tạo ra cá thể
đó, tức là thao tác đột biến sẽ được sử dụng như là một thao tác con
của thao tác lai ghép
+ Có những chuỗi giá trị là hợp lệ với các luật để được công nhận là một
Trang 30kiểu gene, tuy nhiên nó lại không hợp lệ để xây dựng một kiểu hình
tương ứng Do đó, cần để ý đến hai thao tác đặc biệt sau dành cho các
chuỗi giá trị như thế: kiểm tra xem chuỗi giá trị đó có thực sự là một
kiểu gene hợp lệ không và nếu không, tìm ra phương thức sửa chữa
chúng để trở thành một kiểu gene thực sự hợp lệ
Sau đây chúng ta nghiên cứu về các quá trình tiến hóa đó
2.4 Thao tác lai ghép
Di truyền là quá trình các cá thể con được thừa hưởng thông tin di
truyền từ cha mẹ, hay nói cách khác quá trình di truyền là tập hợp của
rất nhiều thao tác sinh sản hữu tính giữa các cá thể trong quần thể Các
cá thể con được thừa hưởng một phần thông tin di truyền từ cha và một
phần từ mẹ của chúng, thao tác lai ghép trong các thuật giải di truyền và
tiến hóa mô phỏng thao tác sinh sản hữu tính trong tự nhiên này Phép lai
ghép hình thành nhiễm sắc thể mới trên cơ sở các nhiễm sắc thể cha mẹ
bằng cách ghép các đoạn con của nhiễm sắc thể cha mẹ vào vị trí tương
ứng trên nhiễm sắc thể của con
2.4.1 Lai ghép theo điểm cắt
Lai ghép theo điểm cắt là phương pháp lai ghép đơn giản và thường
gặp nhất, có tính trực quan và có thể áp dụng đối với các phương pháp
mã hóa lời giải dưới dạng xâu Phương pháp này tiến hành như sau:
- Chọn ngẫu nhiên K vị trí cắt khác nhau trên nhiễm sắc thể hai cá thể
ban đầu để xác định những vùng sẽ tiến hành ghép chéo
Trang 31- Gọi Pik là đoạn nằm giữa vị trí cắt thứ k − 1 và vị trí cắt thứ k
trên xâu biểu diễn nhiễm sắc thể lời giải của cá thể ban đầu thứ i
(k = 1, 2, , K + 1; i = 1, 2) PiK+1 sẽ là đoạn nằm sau vị trí cắt thứ k
trên xâu biểu diễn lời giải nhiễm sắc thể của cá thể ban đầu thứ i
- Con thứ nhất được ghép chéo từ các đoạn P1j với j lẻ và các đoạn P2h
với h chẵn Tức là ta sẽ thu được P11P22P13P24P15 P1KP2K+1 (giả sử
K lẻ)
- Con thứ hai được ghép chéo từ các đoạn P2j với j lẻ và các đoạn P1h
với h chẵn Tức là ta sẽ thu được P21P12P23P14P25 P1KP2K+1 (giả sử
K chẵn)
Thông thường phương pháp lai ghép theo điểm cắt có K = 1 hoặc K = 2
Phương pháp lai ghép theo điểm cắt:
Hình 2.2: Phương pháp lai ghép theo điểm cắt
Trang 322.4.2 Lai ghép đồng bộ
Trong lai ghép đồng bộ sử dụng một tham số là xác suất hoán đổi pe
Với pe và hai cá thể ban đầu cho trước, lai ghép đồng bộ được tiến hành
như sau:
Dọc theo độ dài của cá thể cha mẹ, đối với mỗi cặp Alen của cha mẹ thực
hiện thao tác:
- Sinh ra một số ngẫu nhiên r thuộc khoảng (0, 1)
- Nếu r ≤ pe thì trao đổi hai alen của hai cá thể cha mẹ tại vị trí đang
xét Ngược lại thì giữ nguyên giá trị hai alen của hai cá thể cha mẹ tại
vị trí đang xét
Lai ghép đồng bộ cũng giống như lai ghép theo điểm cắt ở chỗ áp dụng
tốt cho những phương pháp biểu diễn lời giải dưới dạng xâu:
Hình 2.3: Phương pháp lai ghép đồng bộ
Hai cá thể cha và mẹ được lựa chọn từ quần thể để thực hiện lai ghép
tạo ra hai cá thể con mới Sau đây là các cách thức lựa chọn cá thể cha,
mẹ cho thao tác lai ghép
Trang 332.4.3 Cơ chế lựa chọn cá thể cha-mẹ
- Lựa chọn ngẫu nhiên:
Hai cá thể cha và mẹ được lựa chọn ngẫu nhiên từ quần thể, không
hề phụ thuộc gì vào độ thích nghi của chúng Cách lựa chọn này có ưu
điểm là sẽ tận dụng tốt tất cả các mẫu gene có thể có của quần thể,
không thiên về một hướng tìm kiếm nào nên không bị sa lầy ở một cực
trị địa phương nào đó Tuy nhiên các cá thể tốt lại không có bất kì lợi
thế nào so với các cá thể không tốt, dẫn đến hiệu quả tiến triển của
bài toán không cao Cách lựa chọn này chỉ nên áp dụng nếu có một
cách nạp lại quần thể thực sự hiệu quả
- Lựa chọn có định hướng:
Từ quần thể chọn ra một tập cá thể theo một qui luật nào đó và cá
thể cha-mẹ được lựa chọn ngẫu nhiên trong tập cá thể này Tuy việc
chọn lựa cá thể vẫn là ngẫu nhiên nhưng khi áp dụng qui luật để chọn
tập cá thể này, thao tác lựa chọn đã định hướng được tính chất của
cá thể theo ý mình Qui luật áp dụng ở đây chính là các heuristic đã
được đưa ra trong quá trình giải quyết bài toán
- Lựa chọn theo độ thích nghi:
Sử dụng đến một hàm để xây dựng xác suất được lựa chọn cho các
cá thể dựa vào độ thích nghi của chúng Khi độ thích nghi của cá thể
càng lớn thì xác suất được lựa chọn là cá thể cha, mẹ của cá thể đó
càng lớn Sau đây là hai cách xây dựng hàm tính xác suất được chọn
cho các cá thể:
+ Tính xác suất theo xếp hạng độ thích nghi: quần thể được sắp
Trang 34xếp theo thứ tự không giảm của độ thích nghi Cá thể có độ thích
nghi cao nhất sẽ có xác suất được chọn là pmax, cá thể có độ thích
nghi nhỏ nhất sẽ có xác suất được chọn là pmin Các cá thể còn lại
được phân bố đều trong khoảng [pmin, pmax] và cách nhau (pmax −
pmin)/(N − 1) với N là số lượng cá thể
+ Tính xác suất theo giá trị độ thích nghi: Với cách tính này, xác
suất được chọn của một cá thể chính là tỉ lệ tương đối của độ thích
nghi của cá thể trong quần thể Tổng độ thích nghi của cả quần
theo giá trị độ thích nghi này có ưu điểm rằng ưu thế của các cá
thể có độ thích nghi trội hơn hẳn so với các cá thể khác sẽ có tác
dụng trực tiếp lên xác suất được chọn của cá thể
Khi đã có xác suất được chọn làm cha-mẹ cho các cá thể, tiến hành
lựa chọn cá thể cha-mẹ cho thao tác lai ghép bằng một trong các cách
sau:
+ Lựa chọn ngẫu nhiên: Ta biểu diễn mỗi cá thể bằng một điểm
trên đoạn [0, 1] với tọa độ xi của điểm biểu diễn cá thể vi sẽ là:
xi = p(vi) Tạo một điểm ngẫu nhiên trên đoạn [0, 1] và cá thể nào
có điểm biểu diễn gần điểm ngẫu nhiên này nhất sẽ được chọn làm
cá thể cha-mẹ
+ Lựa chọn tuần tự: Các cá thể được sắp xếp theo thứ tự không giảm
của xác suất được chọn Bắt đầu từ cá thể có xác suất được chọn
cao nhất, dựa vào giá trị xác suất được chọn này quyết định xem
nó có được chọn là cá thể cha-mẹ hay không bằng cách sinh ra một
Trang 35số ngẫu nhiên và so sánh số này với xác suất được chọn của cá thể.
Nếu cá thể đầu tiên không được chọn, lặp lại thao tác trên với cá
thể thứ hai Cứ thế cho đến khi chọn được một cá thể để làm cá
thể cha-mẹ
- Lựa chọn trận đấu:
Đây là một cách lựa chọn kết hợp từ hai cách lựa chọn có định
hướng và lựa chọn theo độ thích nghi Từ quần thể, tập bao gồm một
số cá thể sẽ được chọn ra và trong tập cá thể này, áp dụng cách thức
lựa chọn giống như cách thức sử dụng trong cách lựa chọn theo độ
thích nghi Ưu điểm của cách lựa chọn này là vừa giúp ứng dụng các
heuristic đã biết vào giải bài toán, đồng thời lại tuân theo đúng nguyên
tắc ban đầu của giải thuật di truyền và tiến hóa: Cá thể có độ thích
nghi càng lớn thì càng có nhiều khả năng được chọn
2.5 Thao tác đột biến
Đột biến là hiện tượng nhiễm sắc thể của cá thể con khi sinh ra mang
một hoặc nhiều đoạn gene không có trong thông tin di truyền được thừa
hưởng từ cha mẹ Tuy nhiên, trong các giải thuật di truyền, thông thường
sẽ chọn một đoạn ngẫu nhiên trong nhiễm sắc thể của cá thể và tiến hành
đột biến bằng cách thay đổi các giá trị của đoạn đó một cách ngẫu nhiên
trong phạm vi cho phép Thông thường, thao tác đột biến để tạo ra nhiễm
sắc thể cho một cá thể mới và sau đó kiểm tra tính thực sự hợp lệ của nó
đồng thời sửa chữa nhiễm sắc thể đó để nó trở nên thực sự hợp lệ, nếu cần
Trong quá trình đột biến, có thể sử dụng một số heuristic để tập trung đột
Trang 36truyền và tiến hóa.
2.5.1 Đột biến đảo bit
Đây là kỹ thuật đột biến đơn giản nhất và thường áp dụng cho mã hóa
nhị phân Tiến hành như sau:
- Chọn một (hoặc một số) vị trí ngẫu nhiên để tiến hành đảo bit
- Đổi lại giá trị của bit tại vị trí đã chọn
Phương pháp đột biến đảo bít:
Hình 2.4: Phương pháp đột biến đảo bít
2.5.2 Đột biến đổi giá trị
Áp dụng chủ yếu cho mã hóa theo giá trị Tiến hành như sau:
- Chọn ngẫu nhiên một số gene để đổi giá trị
- Gán lại các giá trị (nhưng nằm trong miền giá trị cho phép) cho các gene
đó Phương pháp đột biến đổi giá trị:
Hình 2.5: Phương pháp đột biến đảo giá trị
Trang 372.5.3 Đột biến đảo đoạn
Áp dụng được cho nhiều cách mã hóa khác nhau:
- Chọn hai vị trí ngẫu nhiên xác định đầu và cuối của đoạn gene sẽ đảo
- Xếp lại các gene trong đoạn đó theo trật tự ngược với trật tự ban đầu
Đột biến đảo đoạn:
Hình 2.6: Phương pháp đột biến đảo đoạn
2.6 Khởi tạo quần thể
Khởi tạo quần thể ban đầu là bước đầu tiên trong quá trình thực thi
của chương trình sử dụng giải thuật di truyền và tiến hóa Thông thường
để khởi tạo quần thể trong bài toán tối ưu, đầu tiên khởi tạo ngẫu nhiên
một số các lời giải hợp lệ cho bài toán
Cần quan tâm đến hai vấn đề:
- Quá trình khởi tạo quần thể có thể là trực tiếp hoặc gián tiếp
+ Khởi tạo trực tiếp cá thể là khởi tạo cho đồ thị đã cho và mã hóa
nó thành nhiễm sắc thể để đưa vào quần thể
+ Khởi tạo gián tiếp sẽ là khởi tạo ngẫu nhiên một bộ giá trị hợp lệ
với các luật của một nhiễm sắc thể, sau đó kiểm tra xem bộ giá
trị đó có thực sự hợp lệ để là một nhiễm sắc thể hay không bằng