Đề tài Thuật toán kiến song song giải quyết bài toán Maxsat

Sự phức tạp của các bài toán tối ưu tổ hợp xuất hiện trong nhiều lĩnh vực khác nhau như: kinh tế, thương mại, khoa học, công nghiệp và y học. Tuy nhiên, có một số bài toán khi giải quyết gặp khó khăn trong ứng dụng. Cái khó vốn có là việc giải quyết các bài toán đã nêu ra trong lý thuyết khoa học máy tính trong thực tế như một số bài toán đã biết là NP-hard, ở đó không có thuật toán đã biết giải quyết chúng trong thời gian đa thức. Metaheuristics hợp nhất các khái niệm từ nhiều lĩnh vực khác nhau như di truyền học, sinh vật học, trí tuệ nhân tạo, toán học và vật lý Ví dụ của metaheuristics bao gồm thuật toán luyện thép, ngăn cản tìm kiếm, tìm kiếm lặp, tìm kiếm biến gần đúng, thủ tục tìm kiếm thích ứng tham lam ngẫu nhiên và thuật toán tiến hoá. Thuật toán metaheuristics gần đây nhất là thuật toán kiến (ACO), được sáng tạo bởi đường tìm kiếm ngắn nhất trong cách kiếm ăn của những con kiến khác nhau. Tuy nhiên từ công việc ban đầu của Dorigo, Maniezzo, và Colorni trong hệ thống kiến (Ant System), ACO nhanh chóng trở thành tìm kiếm hoàn thiện trong lĩnh vực: một số lượng lớn tác giả phát triển mô hình phức tạp hơn để sử dụng thành công giải quyết một lượng lớn kết hợp bài toán tối ưu phức tạp và đi sâu vào lý thuyết thuật toán bây giờ trở thành cái sẵn có.

doc25 trang | Chia sẻ: tuandn | Lượt xem: 2287 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Đề tài Thuật toán kiến song song giải quyết bài toán Maxsat, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI Khoa Công nghệ thông tin -------- & -------- BÁO CÁO NGHIÊN CỨU KHOA HỌC Đề tài THUẬT TOÁN KIẾN SONG SONG GIẢI QUYẾT BÀI TOÁN MAXSAT Giáo viên hướng dẫn: Thầy Đỗ Trung Kiên Sinh viên thực hiện : Quách Thị Hái Oanh _K54A Nguyễn Thị Hiện_K55B Trần Thị Hằng_K55B Nguyễn Thị Hương _K55B Hà Nội, 04-2008 LỜI MỞ ĐẦU Sự phức tạp của các bài toán tối ưu tổ hợp xuất hiện trong nhiều lĩnh vực khác nhau như: kinh tế, thương mại, khoa học, công nghiệp và y học. Tuy nhiên, có một số bài toán khi giải quyết gặp khó khăn trong ứng dụng. Cái khó vốn có là việc giải quyết các bài toán đã nêu ra trong lý thuyết khoa học máy tính trong thực tế như một số bài toán đã biết là NP-hard, ở đó không có thuật toán đã biết giải quyết chúng trong thời gian đa thức. Metaheuristics hợp nhất các khái niệm từ nhiều lĩnh vực khác nhau như di truyền học, sinh vật học, trí tuệ nhân tạo, toán học và vật lý… Ví dụ của metaheuristics bao gồm thuật toán luyện thép, ngăn cản tìm kiếm, tìm kiếm lặp, tìm kiếm biến gần đúng, thủ tục tìm kiếm thích ứng tham lam ngẫu nhiên và thuật toán tiến hoá. Thuật toán metaheuristics gần đây nhất là thuật toán kiến (ACO), được sáng tạo bởi đường tìm kiếm ngắn nhất trong cách kiếm ăn của những con kiến khác nhau. Tuy nhiên từ công việc ban đầu của Dorigo, Maniezzo, và Colorni trong hệ thống kiến (Ant System), ACO nhanh chóng trở thành tìm kiếm hoàn thiện trong lĩnh vực: một số lượng lớn tác giả phát triển mô hình phức tạp hơn để sử dụng thành công giải quyết một lượng lớn kết hợp bài toán tối ưu phức tạp và đi sâu vào lý thuyết thuật toán bây giờ trở thành cái sẵn có. Ở đây, em đã tìm hiểu thuật toán kiến và sử dụng thuật toán này để giải quyết bài toán Maxsat. Thuật toán này có ứng dụng để giải quyết các bài toán tổ hợp tối ưu, đặc biệt là một số bài toán đang gặp khó khăn trong việc tìm lời giải. MỤC LỤC Chương I: TỔNG QUAN THUẬT TOÁN KIẾN I. Thuật toán kiến 1. Đàn kiến tự nhiên (natural ant colonies) Loài kiến là loài sâu bọ có tính chất xã hội, chúng sống thành từng đàn, bởi vậy có sự tác động lẫn nhau, chúng thạo tìm kiếm thức ăn và hoàn thành những nhiệm vụ từ kiến chỉ huy. Một điều thú vị trong tìm kiếm thức ăn của vài con kiến đặc biệt là khả năng của chúng để tìm kiếm đường đi ngắn nhất giữa tổ kiến và nguồn thức ăn. Trên thực tế, điều dễ nhận thấy có trong suy nghĩ nhưng nhiều con kiến hầu hết không nhận ra vì chúng không dùng thị giác để tìm kiếm những đầu mối thức ăn. Trong quá trình đi giữa tổ và nguồn thức ăn, vài con kiến tích tụ một chất được gọi là mùi lạ (pheromone). Nếu không có mùi lạ sẵn có, những con kiến di chuyển ngẫu nhiên, nhưng khi có mặt của mùi lạ này chúng có xu hướng đi theo mùi lạ. Trên thực tế, cuộc thí nghiệm của nhà nghiên cứu sinh là những con kiến theo thuyết tự nhiên thích những con đường được đánh dấu bởi tập hợp nhiều mùi lạ. Trong qúa trình thực hiện, lựa chọn giữa những con đường tìm thấy khác nhau khi có vài con đường phân cách. Sau đó kiến sẽ lựa chọn xác suất một con đường qua số lượng mùi lạ: mùi lạ càng nhiều thì sự lựa chọn càng cao. Bởi vậy những con kiến đổi hướng theo mùi lạ trên đường đi, chúng được đề cập như sau: kết quả tìm kiếm thức ăn trong quá trình tăng cường ảnh hưởng từ sự hình thành của con đường được đánh dấu bởi tập hợp nhiều mùi lạ. Cách tìm thức ăn này tập trung kiến tìm đường đi ngắn nhất giữa tổ và nguồn thức ăn. Kĩ thuật thế nào tập trung được kiến tới phạm vi con đường ngắn nhất được minh hoạ ở hình 1. Ở đó, không có mùi lạ nào trong môi trường và, khi kiến đến những chỗ giao nhau, chúng ngẫu nhiên lựa chọn một ngả đường. Tuy nhiên, như kiến đi du lịch, con đường triển vọng nhất tiếp nhận số lượng mùi lạ nhiều hơn sau vài lần đi. Nhờ đó, những con đường ngắn hơn, kiến sẽ lựa chọn chúng để tới thức ăn nhanh hơn và để bắt đầu trở lại hành trình kiếm thức ăn sớm hơn. Từ khi ngả đường ngắn hơn được chọn mùi lạ tồn tại nhiều hơn, quyết định của kiến có xu hướng tiến về ngả đường ngắn hơn, vì thế, lựa chọn con đường nhiều mùi hơn khi kiến trở lại nhiều hơn ngả đường dài hơn. Kết quả cuối cùng của quá trình này là sự tăng xu hướng tiến tới ngả đường ngắn và kết thúc, hội tụ lại là con đường ngắn nhất. Thủ tục sau đó được bổ sung trong môi trường tự nhiên bởi thực tế mùi lạ sẽ bị bay hơi sau vài lần. Con đường này triển vọng ít dần vì mất dần mùi lạ bởi vì nó được kiến đi ngày càng ít. Tuy nhiên vài nhà sinh vật học đã nghiên cứu chỉ ra mùi lạ rất bền, vì thế ít ảnh hưởng của sự bay hơi trên đường đi ngăn nhất của quá trình tìm kiếm thức ăn. Hình 1 Vài cuộc thí nghiệm được báo cáo cho thấy số đông lấy thêm trong tự nhiên với một giới hạn, như kết quả tồn tại lâu dài của mùi lạ, nó là điều khó để kiến quên đường đi với nhiều mùi lạ, mặc dù chúng tìm thấy được đường đi ngắn hơn. Chú ý, nếu thức ăn trực tiếp dịch trong máy để thiết kế một thuật toán tìm kiếm, chúng ta có thể có một thuật toán nhanh hơn trở thành tối ưu. 2.Từ những con kiến tự nhiên tới thuật toán ACO Thuật toán ACO lấy ý tưởng từ việc kiếm thức ăn của đàn kiến ngoài thực tế để giải quyết các bài toán tối ưu tổ hợp. Chúng dựa trên cơ sở một đàn kiến nhân tạo, chúng được tính toán tìm kiếm thức ăn nhờ mùi lạ nhân tạo. Cấu trúc cơ bản của thuật toán ACO: trong mỗi thuật toán, tất cả kiến đi xây dựng cách giải quyết bài toán bằng cách xây dựng một đồ thị. Mỗi cạnh của đồ thị miêu tả các bước kiến có thể đi được kết hợp từ hai loại thông tin hướng dẫn kiến di chuyển: Thông tin kinh nghiệm (heuristic information): giới hạn kinh nghiệm ưu tiên di chuyển từ nút r tới s…của cạnh ars. Nó được đánh dấu bởi hrs. Thông tin này không được thay đổi bởi kiến trong suốt quá trình chạy thuật toán. Thông tin mùi lạ nhân tạo (artificial pheromone trail information), nó giới hạn “nghiên cứu sự thèm muốn” của chuyển động là kiến nhân tạo và bắt chước mùi lạ thực tế của đàn kiến tự nhiên. Thông tin này bị thay đổi trong suốt quá trình thuật toán chạy phụ thuộc vào cách giải quyết được tìm thấy bởi những con kiến. Nó được đánh dấu bởi trs. Giới thiệu các bước ảnh hưởng từ những con kiến thật vào ACO. Có hai vấn đề cần chú ý: - Chúng trừu tượng hoá vài mô hình thức ăn của kiến ngoài thực tế để tìm ra đường đi tìm kiếm thức ăn ngắn nhất. - Chúng bao gồm vài đặc điểm không giống với tự nhiên nhưng lại cho phép thuật toán phát triển chứa đựng cách giải quyết tốt tới bài toán bị cản (ví dụ: sử dụng thông tin kinh nghiệm để hướng dẫn chuyển động của kiến). Cách thức hoạt động cơ bản của một thuật toán ACO như sau: m kiến nhân tạo di chuyến, đồng thời và không đồng bộ, qua các trạng thái liền kề của bài toán. Sự di chuyển này theo một tập quy tắc làm cơ sở từ những vùng thông tin có sẵn ở các thành phần (các nút). Vùng thông tin này bao gồm thông tin kinh nghiệm và thông tin mùi lạ để hướng dẫn tìm kiếm. Qua sự di chuyển trên đồ thị kiến xây dựng được cách giải quyết. Những con kiến sẽ giải phóng mùi lạ ở mỗi lần chúng đi qua một cạnh (kết nối) trong khi xây dựng cách giải quyết (cập nhật từng bước mùi lạ trực tuyến). Mỗi lần những con kiến sinh ra cách giải quyết, nó được đánh giá và nó có thể tạo luồng mùi lạ là hoạt động của chất lượng của cách giải quyết của kiến (cập nhật lại mùi lạ trực tuyến). Thông tin này sẽ hướng dẫn tìm kiếm cho những con kiến đi sau. Hơn thế nữa, cách thức sinh hoạt động của thuật toán ACO bao gồm thêm hai thủ tục, sự bay hơi mùi lạ (pheromone trail evaporation) và hoạt động lạ (daemon actions). Sự bay hơi của mùi lạ được khởi sự từ môi trường và nó được sử dụng như là một kĩ thuật để tránh tìm kiếm bị dừng lại và cho phép kiến khảo sát vùng không gian mới. Daemon actions là những hoạt động tối ưu như một bản sao tự nhiên để thực hiện những nhiệm vụ từ một mục tiêu xa tới vùng của kiến. 3. Các loại mô hình ACO - Hệ thông kiến (AS): là thuật toán ACO đầu tiên, có ba loại: AS-density, AS-quantity và AS-cycle, khác nhau ở con đường mùi lạ được cập nhật và đề xuất. - Hệ thống đàn kiến (ACS): mở rộng của AS, cải tiến cách giải quyết của thuật toán kiến trước khi cập nhật mùi lạ. - Hệ thống kiến MAX-MIN: một trong những thuật toán mở rộng tốt nhất của AS. - Rank-based Ant System: kết hợp các loại cập nhật mùi lạ từ các thuật toán trước. - Best-Worst Ant System: khai thác hệ thống của vùng tối ưu để cải tiến cách giải quyết của thuật toán kiến. 4. Ứng dụng của ACO Thuật toán ACO được ứng dụng cho một số lượng lớn bài toán tối ưu tổ hợp. Những ứng dụng hiện nay của ACO chia thành hai lớp ứng dụng: lớp bài toán tối ưu tổ hợp NP-hard cho công nghệ cũ thường ít thức ăn. Đặc tính thành công nhất của ứng dụng ACO tới những bài toán mà ở đó kiến kết hợp với vùng tìm kiếm để có cách giải quyết tốt. Lớp ứng dụng thứ hai là bài toán tìm đường đi ngắn nhất, ở đó khoảng cách bài toán giải quyết thay đổi ở thời gian thực thi bài toán. Những thay đổi này có thể ảnh hưởng không đổi của bài toán như đã có sẵn, Nếu ảnh hưởng bị lẫn lộn, đặc tính được coi như chi phí cạnh, thay đổi theo thời gian. Trong trường hợp này, thuật toán mô phỏng theo bài toán động. Lớp ứng dụng thứ hai của ACO để kết nối đường thông tin. Thay cho việc đưa chi tiết các ứng dụng khác nhau của ACO, chúng ta mô tả ngắn lịch sử phát triển của ứng dụng, tổng quan mở rộng trong ứng dụng của ACO. Bài toán tổ hợp đầu tiên được giải quyết bởi thuật toán ACO là bài toán người du lịch (TSP) bởi vì bài toán này được biết nhiều nhất của NP-hard, tìm đường đi ngắn nhất, để dễ dàng mô phỏng sự sinh hoạt của loài kiến để giải quyết nó. Từ khi ứng dụng đầu tiên của AS trong luận án của Dorigo’sPhD năm 1991, nó trở thành một đánh giá chung của vài đóng góp tốt hơn trong mô hình thực thi ACO hơn AS. Theo trình tự, hai ứng dụng tiếp theo bài toán nhiệm vụ của phương trình bậc hai (QAP) và bài toán lập lịch cho cửa hàng năm 1994. Giữa các ứng dụng tiếp theo là đường thông tin ứng dụng đầu tiên, bắt đầu năm 1996 với công việc của Schoonderwoerd và công việc AntNet bởi Di Caro và Dorigo. Năm 1997, sau một năm công bố của nhà báo đầu tiên cho ACO năm 1996, số ứng dụng ACO bắt đầu tăng nhanh. Ứng dụng sớm nhất từ 1997 bao gồm bao toán đường xe cũ (vehicle routing), trình tự chuỗi, lập lịch trình cho cửa hàng và bài toán đồ hoạ. Sau đó, nhiều tác giả khác nhau đã sử dụng ACO metaheuristics để giải quyết số lượng lớn bài toán tối ưu tổ hợp như chuỗi chung ngắn nhất, tổng quát nhiệm vụ, tập che phủ, nhiều túi và bài toán hợp lý…Thú vị nhất của người đọc là thấy được tổng kết ứng dụng có sẵn năm 2000. Từ phần ứng dụng trước đó, ACO gần như được sử dụng cho mục đích kĩ thuật, cụ thể để thiết kế nghiên cứu thuật toán cho đọc giả biểu diễn cấu trúc như tập quy tắc lôgic classical, quy tắc logic fuzzy và thông tin Bayesian, đưa ra những kết quả hứa hẹn. Ngày nay, ACO gần kết quả trạng thái cho vài bài toán để nó áp dụng cho: QAP, trình tự chuỗi, đường đi, lập lịch và thông tin gói điều khiển…Kết quả tính toán sẵn có cho bài toán khác thường rất tốt và đóng tất cả trạng thái lại là điều đáng chú ý, bởi vì nhiều bài toán sẵn sàng bị tấn công mạnh mẽ bởi nỗ lực tìm kiếm. Bên cạnh đó, ACO metaheuristics được áp dụng để giải quyết bài toán mới của thế giới với kết quả đầy hứa hẹn. 5. Các bước để giải quyết một bài toán bởi ACO 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 lạ trs là một xu hướng quyết định. Đó là một bước chủ yếu trong việc hình thanhg thuật toán ACO và xác định rõ mùi lạ 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 hrs 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. Nó nên xoá 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, chúng ta muốn trên thực tế, đ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 tính không thể tính với một tham số gốc phù hợp tốt. II. Một số ví dụ minh hoạ 1. Bài toán người du lịch 1.1 Phát biểu bài toán Một người du lịch đi thăm n thành phố T1…Tn. Xuất phát từ thành phố nào đó, người du lịch muốn đi thăm tất cả các thnàh phố còn lại, mỗi thành phố đi đúng một lần rồi trở lại thành phố xuất phát. Gọi Cij là chi phí từ Ti đến Tj. Tìm hành trình với tổng chi phí nhỏ nhất. 1.2 Tư tưởng giải quyết bài toán người du lịch bằng thuật toán kiến - Kiến đi sau sử dụng vết mùi lạ (lớp Trail) và kinh nghiệm (lớp Heuristics) của kiến đi trước để tìm kiếm con đường đi cho mình, sau đó con đường tốt hơn sẽ được cập nhật lại. - Cứ như vậy sẽ cho ta kết quả con đường đi ngắn nhất cần tìm. 2. Xác định ma trận trọng số của mạng Neuron 1.1 Phát biểu bài toán − Giả sử có D trọng số cần phải huấn luyện. − Ký hiệu WPi là tập các giá trị có thể của tham số Pi (1 ≤ i ≤ D). − Cho một số lượng M agents lần lượt duyệt qua D tập WPi theo thứ tự mỗi lần chọn một giá trị thuộc WPi theo quy tắc lựa chọn cho trước. 1.2 Tư tưởng giải quyết bài toán người du lịch bằng thuật toán kiến − Khi mọi Agents đã duyệt xong, chúng sẽ trở về vị trí ban đầu theo đường đã đi và cho bay hơi một lượng Pheromone nhất định. Sau đó các trọng số tương ứng với sai số nhỏ nhất tìm được sẽ được tăng một Pheromone theo nguyên tắc của thủ tục PHEROMONE-UPDATE. − Quá trình tìm kiếm sẽ kết thúc khi điều kiện chấm dứt tìm kiếm được thoả mãn (Sai số của mạng nhỏ hơn một giá trị nào đó cho trước hoặc thuật toán đạt số vòng lặp nhất định.) Chương II: XÂY DỰNG KHUNG THUẬT TOÁN KIẾN * Lý do: Chúng ta phải đi xây dựng khung thuật toán vì: Hỗ trợ thiết kế tối đa và khả năng tái sử dụng code: Khung phải cung cấp cho người dùng toàn bộ kiến trúc của phương pháp giải quyết bài toán của họ. Hơn nữa các lập trình viên có thể tái sự dụng các đoạn code đã có. Do đó người dùng chỉ cần phát triển một đoạn code nhất định cho vấn đề đó. Tiện ích và khả năng mở rộng: Khung phải cho phép người dùng đi qua một số lượng lớn các giải thuật đã được giả quyết, các vấn đề, các mô hình song song đã được đưa ra. Nó có khả năng cho phép người dùng dễ dàng thêm hoặc thay đổi các đặc tính/ giải thuật mà ko cần liên quan đến các thành phần khác. Giúp cho người sau thử nghiệm bai toán trên môi trường song song. Tính linh động: Khung hỗ trợ nhiều kiến trúc phần cứng và phần mềm khác nhau nên đáp ứng được một số lượng lớn người dùng. I. Thiết kế khung thuật toán kiến * Sơ đồ chung của thuật toán kiến Chương trình khung thuật toán: 1 t = 0  2 initialize pheromone trail, PT(t)  3 initialize heuristic information, H  4 while not end do  5    t = t + 1  6    generate solutions S(t) using PT(t-1) and H  7    update PT(t) using S(t) and PT(t-1) Khi cài đặt sơ đồ ACO yêu cầu gồm ba lớp chính sau: Problem Solution Heuristic Lớp Problem tương ứng với định nghĩa một bài toán. Người viết khung phải cung cấp một định nghĩa hoàn chỉnh cho lớp này. Lớp Solution tương ứng với lời giải (tốt hoặc không tốt) một bài toán. Người viết khung phải cung cấp một định nghĩa hoàn chỉnh cho lớp này. Lớp Heuristic tương ứng các thông tin yêu cầu của bài toán. Thông tin này được lấy từ việc giải quyết các bước tiếp theo của thuật toán từ những hoạt động của con kiến. Người viết khung phải cung cấp một định nghĩa hoàn chỉnh cho lớp này. Ngoài ra, người sử dụng phải có tham số thuật toán trong file cấu hình gồm: Số phần tử thực hiện độc lập. Số phần tử phát sinh. Số lượng kiến. Thông tin vết mùi lạ (trail) gồm: kích thước(trail dimension), giá trị nhỏ nhất và lớn nhất (minimum and maximum trail values),cập nhật từng phần (local update), kích thước lựa chọn (selection size), mùi lạ ban đầu (initial trial pheromone) và q0. Alpha (mùi lạ quan trọng), beta (thông tin kinh nghiệm quan trọng). Inter operators parameters: số lượng (operator number), tỉ lệ(operator rate), số lượng cá thể và lựa chọn cá thể để gửi và thay thế (number of individuals and selection of individual to send and replace). Parallel Configuracion: khoảng thời gian phát sinh trạng thái mới (interval of generation to refresh global state), phương thức chạy (đồng bộ và không đồng bộ) (running mode(synchronized or asyncronized) và khoảng thời gian phát sinh kiểm tra lời giải từ những phần tử khác) interval of generations to check solutions from other populations. * Xây dựng cài đặt cho sơ đồ thuật toán Hệ thống gồm hai nhóm: một nhóm các lớp cung cấp (Provided) bao hàm các thủ tục chung cho thuật toán kiến (ví dụ như khung của thuật toán kiến tuần tự, khung của thuật toán kiến song song ...) và nhóm các lớp đòi hỏi (Required) bao hàm các thủ tục riêng trong thuật toán kiến của từng bài toán cụ. Dưới đây là mô hình UML tổng quan của hệ thống. 1. Lớp cung cấp (provides) - Lớp Trail (const Problem& pbm,const SetUpParams& setup): cập nhật các thông tin về vết mùi lạ. - Lớp Trail1D (const Problem& pbm,const unsigned long size,const SetUpParams& setup). Các hàm chính: clear_delta (): gán cho _delta=0.0. (Giải phóng mùi lạ sau mỗi lần kiến đi qua một cạnh). get_trail (unsigned long index): trả về giá trị của biến _trail. local_update (Solution* _sol): cập nhật từng bước mùi lạ. global_update (const Rarray *_sols): cập nhật mùi lạ update_delta (Solution* _sol) : cập nhật mùi lạ - Lớp Trail2D (const Problem& pbm,const unsigned long size,const SetUpParams& setup). Gồm 5 hàm như trong Trail1D nhưng các biến được lưu vào mảng 2 chiều vì nó cập nhật mùi lạ của mỗi con kiến ở từng con đường. - Lớp Feasibles (const unsigned long size,const SetUpParams& setup) Select_best (Trail &trail,Heuristic &heuristic,const unsigned long last_selection): với các biến thông tin mùi lạ, thông tin kinh nghiệm, sự lựa chọn sau cùng (lựa chọn tốt nhất). Sau khi tính tổng xác suất kiến đi theo một con đường, hàm trả về số lượng kiến lớn nhất đi theo một đường. Select (Trail &trail, Heuristic &heuristic,const unsigned long last_selection): tính xác suất một cách ngẫu nhiên. Hàm trả ra số lượng kiến đi theo một đường. - Lớp Colony (const Problem& pbm,const SetUpParams& setup): trả ra sự lựa chọn tốt nhất phù hợp với bài toán. - ostream& operator<< (ostream& os, const Colony& colony): đưa ra các giải pháp. - istream& operator>> (istream& is, Colony& colony): hiển thị các thông tin trên. - operator= (const Colony& colony): khởi tạo các biến: _heuristic (thông tin kinh nghiệm), _best_solution (giải pháp tốt nhất), _best_cost (chi phí tốt nhất), _worst_cost (chi phí tồi nhất).Có một vòng lặp duyệt qua tất cả các giải pháp, tìm giá trị phù hợp đối với cách giải quyết đó. - advance(): cập nhật lại thông tin mùi lạ cho hàm global_update (_sols). - generate_solution(Solution* sol): với vết mùi lạ, kinh nghiệm sẽ tìm ra được cách giải cuối cùng. - solution(const unsigned int index) const: trả về giải pháp hiện thời. - trail() const: trả về thông tin vết mùi lạ hiện tại. - fitness(const unsigned int index) const: trả về giá trị phù hợp. - Lớp Statistics