Được phát triển bởi Stutzle và Hooss vào năm 1996, được mở rộng lên từ hệ thống AS. Một số đặc điểm được mở rộng từ hệ thống AS như sau.
Giống như ACS, MMAS thực hiện offline pheromone trail update, tức là sau khi toàn bộ kiến trong đàn hoàn thành lời giải thì việc cập nhật được tiến hành cho lời giải tối ưu. Đầu tiên thực hiện bay hơi bớt thông tin pheromone (pheromone evaporation) trên tất cả các cạnh.
(1 ). .
rs rs
τ ¬ −ρ τ
Sau đó chỉ có các cạnh thuộc lời giải tốt nhất được cập nhật thông tin pheromone τrs ¬ τrs + f C S( ( best)), ∀ ∈ars Sbest.
Thông thường trong MMAS các lời giải được tinh chỉnh bằng cách tối ưu cục bộ (local optimizer) trước khi cập nhật thông tin pheromone.
Một cải tiến quan trọng trong hệ thống MMAS là việc thêm vào giới hạn cận trên và dưới của thông tin Pheromone (τmax
và τmin
), điều đó giúp tránh hội tụ tại điểm tối ưu cục bộ. Khởi tạo tất cả thông số Pheromone giá trị cận trên để ưu tiên việc khai phá không gian tìm kiếm. Cận trên τmax
thường được chọn là giá trị lớn nhất mà Pheromone có thể đạt được ở vòng lặp cuối cùng.
* *
max 1/( . ( )).p C S
τ =
Trong đó S là lời giải tối ưu, bởi vì lời giải tối ưu không biết trước nên thông thường được thay thế bởi Sglobal-best trong tính toán.
Cách chọn cận dưới τmin
, thông thường người ta chọn τmin
để thỏa mãn theo tỷ lệ giữa cận trên và cận dưới τmax
/τmin
= 2n. Do đó tính τmin
= τmax
/ 2n. Tỉ lệ này phải chọn không nên quá cao, bởi vì khi đó xác suất để chọn đường đi có mức độ Pheromone thấp là quá nhỏ. Mặt khác nếu chọn tỉ lệ này quá lớn thì xác suất chọn đường đi co Pheromone cao là gần với xác suất chọn đường đi có mức độ Pheromone thấp.
Khi khởi tạo thông tin pheromone cho các thành phần thì tất cả nhận giá trị lớn nhất có thể của Pheromone là τmax
nhằm tăng cường việc khai phá không gian tìm kiếm. Một chú ý trong hệ thống MMAS là khi xảy ra hội tụ cục bộ thì có cơ chế khởi tạo lại thông tin pheromone cho các nút và giá trị để khởi tạo lại là τmax
. Hàm cập nhật Daemon action của thuật toán MMAS như sau:
1 Procedure daemon_actions
2 for each Sk do local_search (Sk) 3 current best
S − =
best_solution ( k
S
) 4 if (best (Scurrent best− , global best
S − )) )) 5 global best S − =Scurrent best− 6 end if
7 Sbest = decision ( global best
S −
,Scurrent best− ) 8 for each edge ars∈ Sbest
do
9 τrs= +τrs f C S( ( best)) 10 if (τrs<τmin) τrs =τmin
11 end for
12 if (stagnation_condition)
13 for each edge ars do τrs =τmax
14 end if
15 end Procedure