1. u← đối tượng ban đầu;
3.3.2. Cài đặt thuật toán
Thuật toán được cài đặt bằng ngôn ngữ JAVA. Mức khung nhìn cao nhất của thuật toán như sau:
Hình 3.2. Khung nhìn mức cao nhất của thuật toán
public static void main(String[] args){ Khởi tạo các tham số; Khởi tạo đồ thị;
while (đồ thị thay đổi) {
while (điều kiện dừng){ Xây dựng các giải pháp; Tìm kiếm địa phương; Cập nhật thống kê; Cập nhật vệt mùi; } Trả kết quả; } }
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
Khởi tạo các tham số
1.Khởi tạo ma trận khoảng cách 2.Khởi tạo ma trận nồng độ mùi 3.Khởi tạo đàn kiến
Khởi tạo đồ thị
Lưu giữ ma trận khoảng cách tại thời điểm t0.
Đồ thị thay đổi
Khi ma trận tại thời điểm t khác ma trận khoảng cách ở thời điểm t0. Trong trường hợp không có gì thay đổi trong ma trận khoảng cách thì bài toán giữ kết quả của giải pháp trước đó.
Điều kiện dừng
Chương trình dừng lại nếu xảy ra ít nhất một trong các điều kiện chấm dứt sau được áp dụng:
1.Các thuật toán đã tìm thấy một giải pháp trong một khoảng cách được xác định trước thấp hơn ràng buộc về chất lượng giải pháp tối ưu. 2.Một số lượng tối đa của tour hoặc một số lượng tối đa của thuật toán
lặp đi lặp lại đã đạt được.
3.Tiêu tốn khoảng thời gian CPU tối đa. 4.Thuật toán cho thấy hành vi không khả thi.
Xây dựng các giải pháp
Đặt tổ kiến vào một đỉnh ngẫu nhiên
Đàn kiến sẽ tự lựa chọn các bước đi tiếp theo dựa trên thủ tục
chonDinhTiepTheo(ConKien kien1, int step, TSP t1). Quy tắc chọn đỉnh dựa vào nồng độ vết mùi được cập nhật trong ma trận nồng độ mùi bằng các thủ tục tangCuongMui(ConKien kien), bayHoiMui(float pho).
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Kết quả là sau khi quyết định con kiến sẽ di chuyển đến đỉnh đã được chọn và đỉnh đó sẽ được đánh dấu là đã được thăm.
Ngoài ra, để tránh trường hợp các nhánh đường khác không có kiến đi qua, vệt mùi hội tụ bằng 0 thì trong thủ tục bayHoiMui(float pho) thêm cận dưới để chắc chắn vẫn có sắc xuất kiến đi vào.
Một số thủ tục chính của thuận toán
1. Chọn đỉnh láng giềng
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 đỉnh j; // Đặt lại giá trị mảng tour[] và mảng tham[];
}
2. Bay hơi mùi
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ố pho mui[i][j] = mui[i][j]*(1+log(mui[i][j]/pho)); mui[j][i] = mui[i][j];
} } }
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/
3. Tăng cường mùi
public void tangCuongMui(){
for (Duyệt các cạnh mà kiến k đi qua) { // 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) }
}
Kết quả đạt đƣợc
o Với bộ dữ liệu ngẫu nhiên 10 đỉnh
Kiểm thử trên mẫu là đồ thị với ngẫu nhiên 10 đỉnh, chương trình sẽ đưa ra đường đi tối ưu tại thời điểm t1, sau đó tắc nghẽn được chèn vào ngẫu nhiên trên con đường đó.
AH H C J I F E D B G Hình 3.3 .Đồ thị bài toán gồm 10 đỉnh
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Kết quả đạt được tại thời điểm t2 là một con đường khác
Hình 3.4 .Kết quả thử nghiệm trên đồ thị có 10 đỉnh
Đồ thị gồm 10 đỉnh được khởi tạo ngẫu nhiên. Bài toán được thử nghiệm với số kiến = 10, số vòng lặp = 500. Sau khi chạy, kết quả trả ra đường đi ngắn nhất là 6-2-0-7-5-9-3-8-4-1-6 với độ dài = 68. Tắc ngẽn được chèn vào đường nối giữa đỉnh 6 và đỉnh 2 với độ dài tăng lên = 19. Đường đi ngắn nhất thay đổi 6-7-0-2-4-8-3-9-5-1-6 với độ dài = 87.Sau khi tắc nghẽn được gỡ bỏ, đường đi ngắn nhất lại trở lại con đường ban đầu.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ o Với bộ dữ liệu 10 đỉnh được nhập vào
Đỉnh 0 1 2 3 4 5 6 7 8 9 0 0 31 20 23 39 38 21 56 45 26 1 31 0 35 25 37 22 44 23 36 1 2 20 35 0 30 29 24 20 33 17 12 3 23 25 30 0 3 12 11 13 25 23 4 39 37 29 3 0 59 10 18 32 22 5 38 22 24 12 59 0 34 48 2 5 6 21 44 20 11 10 34 0 33 36 20 7 56 23 33 13 18 48 33 0 29 23 8 45 36 17 25 32 2 36 29 0 19 9 26 1 12 22 23 5 20 23 19 0 Bảng 3.1. Ma trận khoảng cách 10 đỉnh
Đồ thị được khởi tạo bằng cách nhập vào 10 đỉnh. Bài toán được thử nghiệm với số kiến = 10, số vòng lặp = 500. Kết quả sau 3 lần chạy như sau:
Lần chạy
Chiều dài
đƣờng đi Đỉnh xuất phát
Đƣờng đi của kiến
t1 t2 t1 t2
1 115 116 2 2-8-5-9-1-7-3-4-6-0-2 2-0-6-4-3-7-1-9-5-8-2 2 115 164 5 5-8-2-0-6-4-3-7-9-1-5 5-9-1-7-3-4-6-0-2-8-5 2 115 164 5 5-8-2-0-6-4-3-7-9-1-5 5-9-1-7-3-4-6-0-2-8-5 3 115 138 9 9-1-5-8-2-0-6-4-3-7-9 9-5-8-2-0-6-4-3-7-1-9
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Kết quả thử nghiệm lần 3:
Hình 3.5. Kết quả trên lần chạy thứ 3
Khi có tắc nghẽn xảy ra, con kiến phải vượt qua tắc nghẽn với điểm đầu được cố định trong đồ thị của bài toán TSP trước đó. Việc này giải thích tại sao kết quả tại thởi điểm t2 có sự khác nhau .
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/