Cài đặt thuật toán

Một phần của tài liệu Ứng dụng thuật toán đàn kiến trong tìm kiếm đường đi tối ưu (Trang 44 - 51)

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){ (adsbygoogle = window.adsbygoogle || []).push({});

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/

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Ứng dụng thuật toán đàn kiến trong tìm kiếm đường đi tối ưu (Trang 44 - 51)