Từ những ứng dụng đã biết hiện nay, chúng ta có thể có vài hƣớng dẫn để giải quyết bài toán bằng ACO. Các hƣớng dẫn đƣợc tổng kết lại thành sáu nhiệm vụ sau:
1. Thể hiện bài toán trong khung của tập các thành phần và sự chuyển đổi hoặc bởi một đồ thị đƣợc đánh dấu bởi kiến để xây dựng cách giải quyết.
2. Định nghĩa thích hợp cho mùi pheromone ij là một xu hƣớng quyết định. Đó là một bƣớc chủ yếu trong việc hình thành thuật toán ACO và xác định rõ mùi pheromone không là một nhiệm vụ tầm thƣờng và nó tính toán yêu cầu bên trong của bài toán sau đáp án.
3. Định nghĩa thích hợp kinh nghiệm cho mỗi quyết định để một con kiến có thể xây dựng cách giải quyết, ví dụ: định nghĩa thông tin kinh nghiệm
ij kết hợp mỗi thành phần hoặc trạng thái chuyển đổi. Thông tin kinh nghiệm chủ yếu cho việc tìm kiếm tốt nếu thuật toán tìm kiếm vùng không có sẵn hoặc không thể ứng dụng.
4. Nếu thực hiện đƣợc, tạo ra một vùng thuật toán tìm kiếm hiệu quả cho bài toán sau đáp án bởi vì kết quả của nhiều ứng dụng ACO cho bài toán tổ hợp tối ƣu NP-hard thể hiện qua sự tìm kiếm tốt nhất đạt đƣợc khi ACO có vùng lạc quan.
5. Lựa chọn một thuật toán ACO và ứng dụng nó vào những bài toán cần giải quyết.
6. Các tham số phù hợp của thuật toán ACO. Một điểm bắt đầu tốt cho tham số phù hợp là sử dụng cài đặt tham số để tìm kiếm tốt khi ứng dụng thuật toán ACO vào bài toán đơn giản hoặc các bài toán khác nhau. Một vấn đề khác chi phối thời gian trong nhiệm phù hợp là để sử dụng thủ tục động cho tham số phù hợp.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Xóa các bƣớc tiếp có thể chỉ đƣa ra một hƣớng dẫn sử dụng thuật toán ACO. Thêm nữa, việc sử dụng là sự kết hợp các quá trình ở đó với vài bài toán sâu hơn và hoạt động của thuật toán, vài lựa chọn ban đầu cần phải sửa lại. Cuối cùng, thực tế chúng ta muốn, điều quan trọng nhất của các bƣớc là đầu tiên phải khớp bởi vì lựa chọn tồi ở trạng thái này không thể tính với một tham số gốc phù hợp tốt.
3.2.2 Thuật toán ACO giải bài toán TSP
Việc xây dựng một đồ thị GC = (C, L) tƣơng ứng với việc xây dựng đồ thị G = (N, A) ở trên với C = N và L = A.
Với L là tập hợp các cạnh kết nối tất cả các đỉnh C nhƣ trong bài toán
đồ thị thông thƣờng. Trong đó tập hợp các đƣờng đi của đồ thị tƣơng ứng với tập hợp các tour từng phần có thể có và giá trị Ω nhằm ràng buộc rằng con
kiến chỉ tìm những đƣờng đi tƣơng ứng với các hoán vị của các chỉ số của thành phố. Ở đây bài toán tìm đƣờng đi ngắn nhất qua tất cả các đỉnh của đồ thị mỗi đỉnh một lần có mối liên hệ mật thiết với bài toán tìm đƣờng đi ngắn nhất của con kiến.
Trong tất cả các thuật toán có thể ứng dụng giải bài toán TSP thì vết mùi pheromone thể hiện mối liên quan giữa các cạnh. Chính vì thế nên giá trị
ij đại diện cho khả năng mong muốn đến thành phố j sau khi thăm thành phố
i. Thông tin heuristic đƣợc chọn là ij = 1 / dij , thể hiện khả năng mong muốn đi thẳng từ thành phố i đến thành phố j , thông tin này tỉ lệ nghịch với độ dài khoảng cách giữa hai thành phố. Trong trƣờng hợp dij = 0 với một số cạnh
(i,j) thì tƣơng ứng giá trị ij cũng nhỏ nhất.
Tour đƣợc xây dựng bằng cách áp dụng các thủ tục đơn giản sau đây bởi mỗi con kiến:
+ Lựa chọn theo một số tiêu chí; đỉnh xuất phát cũng chính là vị trí xuất phát của con kiến.
+ Sử dụng mùi pheromone và thồng tin heuristic để tính xác suất xây dựng một tour bằng cách lặp đi lặp lại việc thêm vào các đỉnh mà con kiến
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ chƣa ghé thăm (Hình 3.2) cho đến khi tất cả các đỉnh đều đƣợc ghé thăm.
+ Quay trởi về đỉnh khởi hành.
Hình 3.2. Một con kiến lựa chọn đỉnh tiếp theo để di chuyển đến.
Con kiến đến đỉnh i, sau đó nó lựa chọn đỉnh kế tiếp để di chuyển đến bằng một hàm của giá trị mùi pheromone ij,giá trị thông tin heuristic trên cạnh kết nối đỉnh i và đỉnh j mà con kiến chưa ghé thăm.
+ Sau khi các con kiến hoàn thành tour của chúng thì chúng sẽ gửi lại vết mùi pheromone trên đƣờng đi mà chúng đã đi qua. Chúng ta biết rằng, trƣớc khi thêm vào chất pheromone thì các tour đƣợc xây dựng bởi các con kiến sẽ đƣợc cải thiện bằng cách sử dụng một thủ tục tìm kiếm cục bộ (LocalSearch). Thủ tục này đƣợc áp dụng với mức độ cao ở hầu hết các thuật toán ACO cho bài toán TSP. Có một vấn đề không mong đợi đó là sự bay hơi pheromone diễn ra xem kẽ với quá trình xây dựng các tour. Trong thực thế, khi áp dụng ACO cho TSP, cũng nhƣ hầu hết các bài toán tối ƣu tổ hợp tĩnh khác thì thuật toán ACO đƣợc áp dụng cụ thể hơn so với thuật toán ACO- Mataheuristic tổng quát, thuật toán ACO-Mataheuristic tổng quát có dạng nhƣ sau:
Input: Mô tả bài toán heuristic với bộ 3 (S, f , Ω );
Output: Giải pháp tối ƣu s*;
Procedure ACO-Metaheuristic g k j i ij, ij ?
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ lichTrinhHoatDongs; // Lịch trình các hoạt động
giaiPhapXayDungDanKien(); // Giải pháp xây dựng đàn kiến capNhatMui(); // Cập nhật mùi
cacHanhDong(); //Các hành động (Tùy chọn)
End- ACO-Metaheuristic.
Thuật toán cụ thể sẽ đƣợc thể hiện nhƣ trong hình 3.3: sau khi khởi tạo các tham số và vết mùi pheromone thì thuật toán sẽ thực hiện vòng lặp chính. Trong vòng lặp này, đầu tiên tour của con kiến sẽ đƣợc xây dựng, sau đó việc lựa chọn tùy ý sẽ đƣợc diễn ra bằng cách áp dụng thuật toán tìm kiếm cục bộ và cuối cùng sẽ là quá trình cập nhật vết mùi pheromone. Bƣớc cuối cùng nó liên quan đến việc bay hơi pheromone và việc cập nhật vét mùi pheromone sẽ phản ánh kinh nghiệm tìm kiếm của chúng.
Trong thuật toán đƣợc mô tả trong hình 3.3 thì thủ tục cacHanhDong()
trong thuật toán ACO tổng quát sẽ đƣợc thay thế bằng thủ tục
timKiemCucBo() và một thói quen (không đƣợc thể hiện trong hình và nhất là thƣờng đƣợc tích hợp trong thủ tục capNhatMui() để tạo điều kiện thực hiện) giúp cho việc lựa chọn có nên gửi mùi (pheromone) hay không.
Hình 3.3. Thuật toán ACOMetaheuristic áp dụng giải bài toàn TSP
Input: Đồ thị G = <C, L>, ràng buộc Ω;
Output: Giải pháp tối ƣu S* (Đƣờng đi ngắn nhất);
Procedure ACOMetaheuristic
khoiTao(); //Khởi tạo giá trị các tham số và vết mùi While (!Điều kiện dừng) do
giaiPhapXayDungDanKien(); //Giải pháp xây dựng đàn kiến timKiemCucBo(); //Tìm kiếm cục bộ (Tuỳ chọn)
capNhatMui(); //Cập nhật mùi End;
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
- Điều kiện dừng: là điều kiện đạt đƣợc khi thuật toán ở trạng thái kết thúc. Với bài toán TSP thì Điều kiện dừng là điều kiện đạt đƣợc khi số vòng lặp của thuật toán = số vòng lặp lớn nhất do ngƣời dùng tự định nghĩa hoặc là tất cả đàn kiến đều đi theo một đƣờng (tức là đƣờng đi ngắn nhất).
- giaiPhapXayDungDanKien() là hàm xây dựng một giải pháp có thể theo phƣơng pháp siêu tìm kiếm (meta-heuristic), với bài toán TSP thì đó là hàm xây dựng chu trình cho mỗi kiến.
- capNhatMui() là hàm cập nhật mùi cho hành trình mà kiến đã đi qua.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Sơ đồ thuật toán ACO giải bài toán TSP đƣợc xây dựng nhƣ sau:
Hình 3.4 Sơ đồ thuật toán ACO giải bài toán TSP Định vị kiến một cách ngẫu nhiên
trong những đỉnh trên đồ thị và lƣu giữ đỉnh hiện thời trong ds tham[]
Xác định xác suất đến đỉnh nào tiếp theo
Di chuyển đến đỉnh kế tiếp và đƣa đỉnh vừa đi qua vào ds tham[]
Tất cả các đỉnh đã
thăm
Ghi lại độ dài của tour và xóa ds tham[] Xác định tour ngắn nhất từ trƣớc đến nay và cập nhật mùi Số vòng lặp tối đã đƣợc thực hiện Sai Đúng Sai Đúng Bắt đầu Kết thúc
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
3.3 Xây dựng ứng dụng demo áp dụng thuật toán ACO giải bài toán TSP 3.3.1 Xây dựng cấu trúc dữ liệu
Cấu trúc dữ liệu chính của bài toán dùng để thể hiện trong thuật toán ACO (Hình 3.5). Bao gồm các dữ liệu đại diện cho các thể hiện của bài toán và các dữ liệu liên quan đến kiến.
Hình 3.5. Cấu trúc dữ liệu chính thể hiện thuật toán ACO giải bài toán TSP
- Khoảng cách giữa các đỉnh của đồ thị (các thành phố)
Trong chƣơng trình này, đồ thị thể hiện bài toán TSP có n đỉnh, khoảng cách giữa các đỉnh của đồ thị đƣợc đƣợc lƣu trong ma trận 2 chiều kiểu số nguyên (khoangCach[][]). Giả định rằng khoảng cách từ đỉnh i tới đỉnh j bằng khoảng cách từ đỉnh j tới đỉnh i (khoangCach[i][j]= khoangCach[j][i]). Giá trị có thể đƣợc gán ngẫu nhiên khi chạy chƣơng trình,
// Dữ liệu thể hiện bài toán TSP:
int n; //số đỉnh của đồ thị
int khoangCach[][]; // ma trận 2 chiều kiểu nguyên lƣu khoảng cách
double mui[][]; // ma trận 2 chiều lƣu nồng độ mùi trên các cạnh
double thongTin[][]; // ma trận 2 chiều lƣu thông tin xác suất
// Dữ liệu mô tả đàn kiến
ConKien{ //Cấu trúc dữ liệu cho 1 con kiến
int chieuDaiTour; //lƣu chiều dài tour của kiến
int tour[]; // mảng 1 chiều lƣu chiều lài các tour
boolean tham[]; // lƣu các đỉnh kiến đã thăm
}
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
mặc định khi lập trình hoặc do ngƣời sử dụng nhập vào từ bàn phím theo lựa chọn khi gọi thủ tục nhập dữ liệu trong chƣơng trình.
- Nồng độ mùi (pheromone)
Nồng độ mùi trên cạnh (i,j) là ij tƣơng ứng đƣợc lƣu bằng ma trận 2 chiều kiểu số thực (mui[][]). Giả định rằng nồng độ mùi trên cạnh (i,j) = nồng độ mùi trên cạnh (j,i) - ( ij = ji / mui[i][j] = mui[j][i]). Khi khởi tạo chƣơng trình, nồng độ mùi ji đƣợc gán bằng hằng số C (ví dụ = 0.5). Nồng độ mùi trên các cạnh mà kiến đi qua sẽ đƣợc cập nhật sau mỗi vòng lặp. Trƣớc khi cập nhật, nồng độ mùi bị giảm một lƣợng do quá trình bay hơi trên tất cả các cạnh (công thức 2.2).
- Tổng hợp mùi (pheromone) và Thông tin kinh nghiệm (heuristic)
Khi xây dựng đƣờng đi của kiến (một tour), một con kiến tại thành phố
i lựa chọn thành phố kế tiếp j với một xác suất dựa trên giá trị [ ij ] [ ij] . Ta sử dụng mảng 2 chiều thongTin[i][j] để lƣu xác suất chọn đỉnh j của kiến khi đang ở đỉnh i dựa trên giá trị [ ij ] [ ij] đã đƣợc tính toán. Do có quá trình cập nhật nồng độ mùi ( ij) nên sau mỗi vòng lặp của thuật toán, mảng
thongTin[][] phải đƣợc tính toán và cập nhật.
- Thể hiện đàn kiến
Đàn kiến là tập hợp các con kiến, đƣợc định nghĩa: ConKien Kien[].
Một con kiến là một tác tử (agent) tính toán đơn giản, nó xây dựng giải pháp để giải quyết bài toán bằng cách gửi lại một lƣợng mùi (pheromone) trên cạnh mà nó đi qua. Để làm đƣợc điều đó, nó phải thực hiện các thao tác sau:
(1) Lƣu lại một phần giải pháp (đƣờng đi và độ dài đƣờng đi) mà nó đã xây dựng cho đến thời điểm xem xét bằng cách sử dụng một mảng tour[] kiểu nguyên có chiều dài n (n là số đỉnh của đồ thị) và một biến chieuDaiTour kiểu nguyên.
(2) Xác định vùng lận cận khả thi tại mỗi đỉnh. Sự hiểu biết về một phần tour tại mỗi bƣớc là đủ để con kiến xác định một đỉnh j có khả thi là lân
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
cận của nó hay không (Nếu j chƣa đƣợc duyệt qua thì j sẽ là thành viên của tập lân cận khả thi). Trƣờng hợp đơn giản là kết hợp mỗi con kiến một mảng
tham[] để lƣu lại những thành phố đã đƣợc thăm; nếu đỉnh j đã ghé thăm
tham[j] = true và tham[j] = false trong trƣờng hợp chƣa thăm.
(3) Tính toán và lƣu lại giá trị hàm mục tiêu của giải pháp mà nó đã tạo ra. Tính toán chiều dài đƣờng đi của con kiến và lƣu trong biến chieuDaiTour, giá trị này sẽ sử dụng trong việc cập nhật nồng độ mùi trên các cạnh mà kiến đi qua.
3.3.2 Một số thủ tục chính của thuật toán
a, Thủ tục chính của thuật toán
public static void main(String[] args) { Khởi tạo giá trị của các tham số; while (Vòng lặp chƣa kết thúc) {
for (Duyệt qua toàn bộ đàn kiến) {
Đặt các con kiến ngẫu nhiên vào các đỉnh của đồ thị; Đặt lại giá trị mảng tour[] và tham[] của kiến;
}
While (Duyệt tất cả đỉnh của đồ thị) { for (Duyệt qua toàn bộ đàn kiến) {
Kiến k lựa chọn đỉnh kế tiếp;//chonDinhTiepTheo()
} }
For (Duyệt qua toàn bộ đàn kiến) {
For (Duyệt tất cả đỉnh của đồ thị) {
Tính chiều dài đƣờng đi của kiến (chiều dài tour); }
}
For (Duyệt qua toàn bộ đàn kiến) {
For (Duyệt tất cả đỉnh của đồ thị) {
Xóa danh sách lƣu các đỉnh đã thăm của kiến; }
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ }
For (Duyệt qua toàn bộ đàn kiến) {
Xác định đƣờng đi ngắn nhất tại mỗi vòng lặp; }
Tiến hành cập nhật nồng độ mùi trên các cạnh, gồm 2 quá trình: + Bay hơi nồng độ mùi trên tất cả các cạnh;
//bayHoiMui()
+ Tăng cƣờng nồng độ mùi trên cạnh kiến đi qua;
//tangCuongMui()
}
Xác định đƣờng đi ngắn nhất và danh sách đỉnh tƣơng ứng; }
b, Chọn đỉnh kế tiếp:
public void chonDinhTiepTheo(){
for ( Duyệt các đỉnh láng giềng của đỉnh i) { if ( Đỉnh j đã đƣợc thăm) Xác suất tới j = 0.0; else { Tính xác suất tới đỉnh j; } }
Chọn ngẫu nhiên đỉnh j dựa trên xác suất từ i tới đỉnh j; Đặt lại giá trị mảng tour[] và mảng tham[];
}
c, Bay hơi nồng độ mùi trên các cạnh public void bayHoiMui(tham số: pho){
for (Duyệt tất cả các cạnh của đồ thị) {
Nồng độ mùi giảm một lƣợng theo hệ số (1-pho); }
}
d, Tăng cƣờng nồng độ mùi trên các cạnh public void tangCuongMui(){
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ Cộng thêm một lƣợng mùi là delta;
(Delta = 1 / chiều dài đƣờng đi của kiến k) }
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
3.3.3 Chƣơng trình Demo
Chƣơng trình Demo đƣợc viết bằng ngôn ngữ lập trình hƣớng đối tƣợng Java, bộ cung cụ phát triển JDK (Java Development Kit), soạn thảo trên phiên bản JCreator 4.50. Chƣơng trình đƣợc cài đặt và chạy trên môi trƣờng Windows 7 Ultimate - 32 bit.
Thuật toán ACO cài đặt trong chƣơng trình Demo là: AS (Ant System).
Kết quả khi chạy chƣơng trình:
a, Với dữ liệu là:
+ Số đỉnh đồ thị: 5
+ Số con kiến: 5
+ Số vòng lặp: 100
+ Biểu diễn dữ liệu đồ thị:
0 1 2 3 4 30 19 23 39 10 10 2 21 16 7
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ + Biểu diễn dữ liệu đồ thị dạng bảng (chiều dài cạnh (i,j) = cạnh (j,i)):
Đỉnh (0) (1) (2) (3) (4) (0) 0 30 19 23 39 (1) 30 0 10 10 2 (2) 19 10 0 21 7 (3) 23 10 21 0 16 (4) 39 2 7 16 0 - Kết quả:
Lần chạy Chiều dài đƣờng đi ngắn nhất
Đỉnh xuất phát Đƣờng đi của kiến
1 61 2 2--4--1--3--0--2 2 61 2 2--4--1--3--0--2 3 61 3 3--1--4--2--0--3 b, Với dữ liệu là: + Số đỉnh đồ thị: 10 + Số con kiến: 10 + Số vòng lặp: 500 0 1 2 3 4 30 19 23 39 10 10 2 21 16 7
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
+ Biểu diễn khoảng cách giữa các đỉnh của đồ thị dạng bảng (cạnh (i,j) = cạnh (j,i)): Đỉnh (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (0) 0 41 20 23 39 38 23 26 40 26 (1) 41 0 35 25 37 22 44 23 36 1 (2) 20 35 0 30 29 23 20 33 17 12 (3) 23 25 30 0 3 41 11 13 25 22 (4) 39 37 29 3 0 29 10 18 32 22 (5) 38 22 23 41 29 0 34 48 2 9 (6) 23 44 20 11 10 34 0 33 36 40 (7) 26 23 33 13 18 48 33 0 29 13