Kết quả của phương pháp thực hiện và thuật toán Dijkstra cùng được thực hiện cho cùng một đồ thị G trong Hình 3.3. Phần code của thuật toán Dijkstra bằng Python được tham khảo tại [14]. Phần đồ thị đầu vào tại [14] đã được Luận văn sửa theo đồ thị trong Hình 3.3.
Hình 3.5 Kết quả của phương pháp thực hiện
Hình 3.6 Kết quả của thuật toán Dijkstra
Theo kết quả trong Hình 3.5 và Hình 3.6 thì cả phương pháp đề xuất và giải thuật Dijkstra đều cho ra đường đi ngắn nhất giữa node 1 và node 10. Về vấn đề tìm ra đường đi được cân bằng tải: Trong định tuyến, nếu có nhiều đường đi có cùng giá trị chi phí và cùng nhỏ nhất thì các gói tin sẽ được gửi theo các con đường này. Quan sát lại kết quả trong Hình 3.5 và Hình 3.6 thì thuật toán Dijkstra chỉ tìm ra được 1 đường đi là 1--3--6--9--10 vì thuật toán Dijkstra dừng khi điểm đích đạt được. Trong khi giải thuật di truyền theo phương pháp đề xuất có thể tìm được nhiều đường đi tốt nhất là 1-- 3--6--9--10 và 1--2--5--8--10. Điều này chứng tỏ giải thuật di truyền có thể tìm ra được một tập đường đi tối ưu cho gói tin.
Áp dụng phương pháp thực hiện thêm cho một mô hình gồm 50 node với số lượng cá thể trong quần thể ban đầu là 200. Node nguồn là node 1 và node đích là node 50. Mô hình 50 node này như sau:
Hình 3.7 Mô hình 50 node 1 7 4 3 2 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 24 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 8 9 15 10 20 17 19 10 7 9 17 30 26 25 20 15 9 36 8 10 30 13 41 40 50 19 40 12 40 13 15 17 30 25 29 11 49 39 20 17 35 27 40 16 9 15 17 12 33 4 10 19 31 15 22 20 17 50 19 21 70 10 19 14 17 60 15 50 30 12 18 15 16 24 25 30
Kết quả của mô hình 50 node này như sau:
Hình 3.8 Kết quả của thuật toán Dijkstra cho mô hình 50 node
{(1, 2, 8, 13, 21, 25, 35, 43, 47, 50): 145, (1, 3, 10, 18, 22, 33, 41, 48, 50): 145, (1, 3, 10, 18, 22, 29, 36, 40, 47, 50): 145} {(1, 2, 8, 13, 21, 25, 35, 43, 47, 50): 145, (1, 3, 10, 18, 22, 33, 41, 48, 50): 145, (1, 3, 10, 18, 22, 29, 36, 40, 47, 50): 145} {(1, 2, 8, 13, 21, 25, 35, 43, 47, 50): 145, (1, 3, 10, 18, 22, 33, 41, 48, 50): 145, (1, 3, 10, 18, 22, 29, 36, 40, 47, 50): 145} [(1, 2, 8, 13, 21, 25, 35, 43, 47, 50), (1, 3, 10, 18, 22, 33, 41, 48, 50), (1, 3, 10, 18, 22, 29, 36, 40, 47, 50)]
Hình 3.9 Kết quả của phương pháp thực hiện cho mô hình 50 node
Tương tự như trên, trong Hình 3.8 và Hình 3.9, đối với mô hình 50 node thì thuật toán Dijkstra chỉ tìm ra được 1 đường đi là (1, 3, 10, 18, 22, 33, 41, 48, 50). Còn phương pháp thực hiện tìm được 3 đường đi là [(1, 2, 8, 13, 21, 25, 35, 43, 47, 50), (1, 3, 10, 18, 22, 33, 41, 48, 50), (1, 3, 10, 18, 22, 29, 36, 40, 47, 50)]. Tất cả các đường đi này đều có cùng tổng cost là 145.
Cập nhật lại giá trị cost trong thời gian là 20 giây để phản ánh tính chất của một mô hình mạng. Giải thuật di truyền sẽ dựa trên giá trị cost mới để tìm đường đi mới cho gói tin. Giá trị cost mới được thay đổi bằng cách random từ 1 đến 100. Bảng 3.3 là kết quả đường đi tìm được sau 50 lần cập nhập.
Bảng 3.3 Kết quả tìm đường đi sau 50 lần cập nhật trong mô hình 50 node
Lần cập nhật Đường đi tối ưu Tổng cost
1 [(1, 2, 8, 13, 21, 25, 35, 43, 47, 50), (1, 3, 10, 18, 22, 33, 41, 48, 50), (1, 3, 10, 18, 22, 29, 36, 40, 47, 50)] 145 145 145 2 [(1, 2, 5, 9, 17, 22, 33, 36, 44, 50)] 248 3 [(1, 2, 5, 9, 17, 22, 33, 36, 44, 50)] 351 4 [(1, 3, 10, 18, 22, 33, 36, 44, 50)] 326 5 [(1, 2, 5, 9, 17, 22, 29, 36, 44, 50)] 296 6 [(1, 4, 7, 12, 24, 34, 42, 49, 50)] 376 7 [(1, 3, 10, 18, 22, 33, 36, 40, 47, 50)] 313 8 [(1, 4, 7, 12, 24, 28, 34, 38, 49, 50)] 268 9 [{(1, 2, 8, 13, 21, 25, 32, 40, 47, 50)] 272 10 [(1, 4, 7, 12, 24, 34, 38, 49, 50)] 318 11 [(1, 4, 7, 12, 24, 34, 38, 49, 50)] 300 12 [(1, 2, 5, 9, 17, 21, 25, 35, 40, 47, 50)] 294
13 [(1, 4, 7, 12, 24, 34, 38, 49, 50)] 306 14 [(1, 3, 10, 18, 22, 33, 41, 48, 50)] 306 15 [(1, 4, 6, 11, 15, 27, 30, 37, 41, 48, 50)] 330 16 [(1, 4, 6, 10, 18, 27, 30, 33, 36, 44, 50)] 247 17 [(1, 2, 8, 13, 20, 25, 35, 43, 47, 50)] 376 18 [(1, 2, 5, 9, 17, 21, 25, 35, 43, 46, 50)] 247 19 [(1, 2, 5, 9, 17, 22, 33, 41, 48, 50)] 233 20 [(1, 3, 10, 18, 22, 33, 41, 48, 50)] 374 21 [(1, 3, 10, 18, 27, 30, 33, 36, 44, 50)] 255 22 [(1, 4, 6, 10, 18, 27, 30, 33, 41, 48, 50)] 278 23 [(1, 4, 7, 12, 24, 34, 38, 49, 50)] 237 24 [(1, 2, 5, 9, 17, 22, 33, 36, 44, 50)] 362 25 [(1, 3, 10, 18, 22, 29, 36, 44, 50)] 316 26 [(1, 2, 5, 9, 17, 22, 33, 41, 48, 50)] 300 27 [(1, 3, 10, 18, 22, 33, 36, 44, 50) (1, 2, 5, 9, 17, 22, 33, 36, 44, 50)] 366 366 28 [(1, 4, 7, 12, 24, 34, 42, 49, 50)] 212 29 [(1, 3, 10, 18, 27, 30, 33, 36, 44, 50)] 296 30 [(1, 3, 10, 18, 27, 30, 37, 41, 48, 50)] 269 31 [(1, 3, 10, 18, 22, 29, 36, 40, 47, 50)] 193 32 [(1, 3, 10, 18, 22, 33, 41, 48, 50)] 366
33 [(1, 4, 7, 12, 24, 34, 42, 49, 50)] 250 34 [(1, 2, 8, 13, 21, 25, 35, 40, 47, 50)] 292 35 [(1, 3, 10, 18, 27, 30, 37, 45, 48, 50)] 345 36 [(1, 2, 8, 13, 21, 25, 35, 40, 47, 50)] 308 37 [(1, 2, 5, 9, 17, 22, 33, 41, 48, 50)] 339 38 [(1, 4, 6, 11, 15, 27, 30, 33, 36, 44, 50)] 358 39 [(1, 4, 7, 12, 24, 34, 38, 49, 50)] 435 40 [(1, 2, 5, 9, 14, 18, 22, 33, 41, 48, 50)] 331 41 [(1, 2, 5, 9, 17, 22, 33, 41, 48, 50)] 316 42 [(1, 2, 8, 13, 20, 25, 35, 43, 47, 50)] 299 43 [(1, 4, 7, 12, 24, 34, 38, 49, 50)] 277 44 [(1, 4, 6, 11, 15, 27, 30, 33, 36, 44, 50)] 350 45 [(1, 3, 10, 18, 27, 30, 37, 41, 48, 50)] 280 46 [(1, 4, 6, 10, 18, 27, 30, 33, 36, 44, 50)] 294 47 [(1, 4, 6, 10, 18, 22, 33, 36, 44, 50)] 343 48 [(1, 3, 10, 18, 22, 33, 36, 44, 50)] 241 49 [(1, 3, 10, 18, 22, 29, 36, 44, 50)] 214 50 [(1, 2, 5, 9, 17, 22, 33, 36, 44, 50)] 340
Theo kết quả trong Bảng 3.3, khi giá trị cost thay đổi thì giải thuật di truyền có thể tìm ra được đường đi tối ưu. Giá trị tổng cost của các đường đi trình bày trong Bảng 3.3 là giá trị nhỏ nhất. Quan sát lại Bảng 3.3 tại các lần chạy thứ 1 và thứ 27, giải thuật di truyền luôn có thể tìm ra được tập các đường đi tối ưu (các đường đi có cùng
giá trị tổng cost và cùng nhỏ nhất). Nói cách khác, nếu tất cả các đường đi có cùng tổng cost và cùng nhỏ nhất thì giải thuật di truyền có thể xuất ra được tất cả các đường này. Trong khi thuật toán Dijkstra sẽ dừng khi node đích là đạt được. Từ đây có thể khẳng định được tiềm năng của giải thuật di truyền trong định tuyến mạng IP. Các số liệu này được lấy từ quá trình chạy chương trình được thực hiện bởi Luận văn.
CHƯƠNG 4. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA LUẬN VĂN
Luận văn thực hiện thành công việc sử dụng giải thuật di truyền để tìm ra được tập đường đi ngắn nhất giữa 2 node mạng. Từ đây, có thể khẳng định tiềm năng của giải thuật di truyền khi ứng dụng vào vấn đề tối ưu hóa định tuyến. Tuy nhiên Luận văn chưa thực hiện được mô phỏng trên một mạng có số lượng node lớn (số lượng node từ 200 trở lên). Do đó, các hướng phát triển của Luận văn gồm:
Áp dụng giải thuật di truyền để mô phỏng tìm đường đi ngắn nhất trong một mạng lớn.
Thuật toán Dijkstra chỉ tính toán đường đi giữa 2 node mạng dựa trên băng thông của liên kết giữa 2 node tương ứng. Luận văn cũng trình bày một hàm mục tiêu để tìm ra giá trị fitness là dựa trên băng thông. Do đó, Luận văn cần đưa ra được một công thức toán nhằm xác định được hàm mục tiêu dựa trên băng thông, độ trễ, lưu lượng tải trên các ứng dụng. Để làm được điều này, Luận văn cần tích hợp thêm SNMP để thu thập các thông tin mạng.
Luận văn sử dụng giải thuật di truyền theo quy tắc cổ điển và đưa ra được một tập các hoạt động di truyền tương tốt phù hợp cho bài toán định tuyến. Do đó, nếu muốn cải thiện được hiệu suất tính toán cho một mạng lớn thì Luận văn cần sử dụng thêm các kiến thức về việc thay đổi cấu trúc của giải thuật di truyền cổ điển. Hướng phát triển của Luận văn là sử dụng thuật toán ant colony để khởi tạo quần thể. Các cá thể được tạo bởi thuật toán ant colony như là đầu vào cho giải thuật di truyền. Các đường đi sẽ được mã hóa hoán vị để áp dụng được các phương pháp lại ghép mới như Partially Matched Crossover (PMX) hoặc Cycle Crossover (CX).
TÀI LIỆU THAM KHẢO
[1] Wendell Odom. CCENT/CCNA ICND1-2 640-822 Official Cert Guide. Third Edition Cisco Press, USA.
[2] Rakesh Kuma, Mahesh Kumar (2010). “Exploring Genetic Algorithm for Shortest Path Optimization in Data Networks”. Global Journal of Computer Science and Technology, Vol.10 Issue-11 (Ver.1.0), 8-12.
[3] Bilal Gonen. “Genetic Algorithm Finding the Shortest Path in Networks”.
Department of Computer Science and Engineering, University of Nevada, Reno, Reno, Nevada, U.S.A.
[4] Anton Riedl. “A Hybrid Genetic Algorithm for Routing Optimization in IP Networks Utilizing Bandwidth and Delay Metrics”. Institute of Communication Networks, Munich University of Technology.
[5] Cauvery N K and K V Viswanatha (2013). “Routing in Dynamic Network using Ants and Genetic Algorithm”. Computer & Operation Research, 194-200.
[6] http://www.iana.org/assignments/as-numbers/as-numbers.xhtml, 09/09/2013.
[7] K. F. Man, K. S. Tang, S. Kwong (1996), “Genetic Algorithms: Concepts and Applications”. IEEE Transactions On Industrial Electronics, Vol. 43, No. 5, 519-534. [8] S.N.Sivanandam, S.N.Deepa. Introduction to Genetic Algorithms. ISBN 978-3-540- 73189-4 Springer Berlin Heidelberg New York.
[10] Vũ Quốc Thái (2005). Ứng dụng giải thuật di truyền cho việc tối ưu hóa quá trình định tuyến trên mạng IP. Luận văn thạc sĩ, chuyên ngành Tin học, Đại Học Khoa Học Tự Nhiên, Đại Học Quốc Gia TP.HCM.
[11] Huỳnh Nguyễn Ngọc Thảo (2011). Xây dựng chương trình tối ưu hóa quá trình định tuyến trên mạng IP dựa vào giải thuật di truyền. Luận văn thạc sĩ, chuyên ngành Khoa Học Máy Tính, Đại Học Đà Nẵng.
[12] https://www.python.org/downloads/ [13] https://docs.python.org/2/tutorial/
[14] http://ownagezone.wordpress.com/2013/02/25/dijkstras-shortest-path-algorithm- python-implementation/, 25/02/2013.
PHỤ LỤC
Phụ lục 1. Giao thức định tuyến OSPF
Tài liệu đầy đủ về OSPF có thể được được trình bày trong RFC 2328. Hoạt động cơ bản của giao thức định tuyến OSPF gồm 3 bước như sau:
Startup: Khi một node được kích hoạt chạy định tuyến OSPF, node sẽ gửi gói tin Hello đến tất cả các node lân cận. Node nào nhận được gói tin Hello sẽ trả lời. Từ đây các mối quan hệ neighbor đã được thành lập.
Update: Mỗi node sẽ gửi một thông báo update được gọi là LSU để mô tả cơ sở dữ liệu trạng thái liên kết cho tất cả các thiết bị khác sao cho tất cả các node kết nối với nhau có một cập nhật cấu trúc liên kết mạng hoàn chỉnh.
Shortest Path Tree: Mỗi node sẽ tính toán một cấu trúc dữ liệu toán học gọi là “cây đường đi ngắn nhất” mô tả đường đi ngắn nhất để đến địa chỉ đích.
Theo giao thức OSPF, luồng lưu lượng sẽ được gửi theo đường đi qua lần lượt các node trung gian tạo thành đường đi có tổng giá trị cost ngắn nhất. Mỗi node được cấu hình với một trọng số trên mỗi liên kết. Liên kết có giá trị cost thấp hơn thì lưu lượng truy cập sẽ được ưu tiên chuyển vào liên kết đó.
Các AS trên Internet thường rất lớn, để hoạt động hiệu quả hơn thì OSPF chia nhỏ số lượng các node trong một AS thành các vùng. Mỗi vùng là một tập hợp các node. Một node có thể thuộc nhiều vùng khác nhau. Những thiết bị thuộc từ 2 vùng trở lên được gọi là ABR. Các thiết bị ABR phải có cấu hình cao vì thiết bị này phải chứa cơ sở dữ liệu của nhiều thiết bị thuộc nhiều vùng khác nhau. OSPF định nghĩa ra một vùng trục, gọi là vùng Backbone. Vùng Backbone này luôn được định nghĩa là vùng 0. Theo mặc định ban đầu thì mọi vùng đều phải kết nối trực tiếp với vùng 0. Do đó, trong cùng một AS thì luôn có hai loại đường đi khác nhau là các đường đi trong cùng
một vùng và các đường đi giữa các vùng. Đối với các đường đi giữa các vùng, các gói tin xuất phát từ một node sẽ phải qua node neighbor và đến node ABR rồi mới có thể sang vùng khác.
Trong suốt quá trình hoạt động, các gói tin LSU luôn được gửi định kỳ giữa các thiết bị. Gói tin này được gửi đến tất cả các node với mục đích là cập nhật thông tin mới nhất về liên kết mạng. Điều này là cần thiết để các node cập nhật lại các đường đi mà các gói tin sẽ được gửi dọc theo đó. Các thông tin trong gói tin LSU cần đảm bảo tính tin cậy. Do đó, mỗi gói tin LSU đều chứa một số thứ tự, nhờ đó mà mỗi node có thể biết được thông tin này là cũ hơn hay mới hơn cái hiện có. Bên cạnh đó, một node còn có thể yêu cầu thông tin về tình trạng liên kết từ các node khác bằng cách sử dụng các gói tin LSR.
Phụ lục 2. Mã hóa trong giải thuật di truyền
Không gian tìm kiếm X tương tự như một tập hợp những cá thể cạnh tranh lẫn nhau. Giải thuật di truyền không hoạt động trên những giá trị trực tiếp của không gian X mà nó được thực hiện trên những dạng mã hóa của những giá trị đó.
Mã hóa là quá trình biến đổi giải pháp của bài toán thành một dạng khác để được xử lý trong giải thuật di truyền. Việc mã hóa phụ thuộc trực tiếp từ việc giải bài toán. Trong giải thuật di truyền thường sử dụng các dạng mã hóa như mã hóa nhị phân, mã hóa hệ 8, mã hóa hệ 16, mã hóa số thực, mã hóa dạng cây, mã hóa giá trị.
Mã hóa hệ 8 thì sử dụng các chuỗi được tạo từ các số trong hệ 8 (0 – 7).
Hình phụ lục 2.2 Mã hóa hệ 8
Mã hóa hệ 16 thì sử dụng chuỗi bit của hệ hexa (0 – 9, A – F).
Hình phụ lục 2.3 Mã hóa hệ 16
Mã hóa số thực (mã hóa hoán vị) tạo ra nhiễm sắc thể là chuỗi các số thực.
Hình phụ lục 2.4 Mã hóa số thực
Kiểu mã hóa dạng cây được sử dụng chủ yếu để phát triển lập trình di truyền (Genetic Programing).
Trong mã hóa giá trị, mỗi nhiễm sắc thể là một chuỗi của một vài giá trị. Các giá trị có thể là bất kì những gì liên quan đến bài toán như số thực hay các kí tự…
Hình phụ lục 2.5 Mã hóa giá trị
Phụ lục 3. Các hoạt động di truyền quan trọng Chọn lọc
Chọn lọc sẽ chọn ra các giải pháp để tham gia vào các pha tiếp theo của quá trình tiến hóa, một giải pháp được chọn tùy vào fitness của nó. Quá trình này được thực hiện một cách ngẫu nhiên. Những giải pháp nào có giá trị fitness cao hơn thì sẽ có nhiều khả năng được chọn hơn để lai ghép, đột biến và sẽ trở thành thành viên của thế hệ tiếp theo.
Chọn lọc được thực hiện thông qua áp lực chọn lọc. Áp lực chọn lọc được định nghĩa là mức độ mà các cá nhân tốt hơn được chọn lọc. Áp lực chọn lọc càng cao, càng có nhiều cá nhân tốt hơn được chọn lọc. Áp lực chọn lọc này sẽ khiến giải thuật di truyền để cải thiện độ thích nghi của dân số qua các thế hệ kế tiếp. Tốc độ hội tụ của giải thuật di truyền chủ yếu được xác định bởi độ lớn của áp lực chọn lọc. Giải thuật di truyền phải xác định các giải pháp tối ưu hoặc gần tối ưu theo một áp lực của phương pháp chọn lọc. Tuy nhiên, nếu áp lực chọn lọc là quá thấp, tốc độ hội tụ sẽ chậm và giải thuật di truyền mất nhiều thời gian để tìm giải pháp tối ưu. Nếu áp lực chọn lọc quá cao, có một sự thay đổi quá nhanh khiếm giải thuật di truyền sớm hội tụ đến các giải pháp chưa tối ưu. Ngoài việc cung cấp áp lực chọn lọc, phương pháp chọn lọc cũng nên bảo tồn đa dạng dân số, vì điều này giúp tránh hội tụ sớm.
Các phương pháp chọn lọc bao gồm chọn lọc dựa trên tỉ lệ và chọn lọc theo thứ tự. Trong chọn lọc theo tỉ lệ dựa trên việc chọn ra các cá nhân dựa trên giá trị fitness của chúng và liên quan đến fitness của các cá nhân khác trong dân số. Còn chọn lọc dựa trên thứ tự sẽ chọn lọc cá nhân theo thứ hạng của chúng trong dân số. Điều này đòi hỏi áp lực chọn lọc độc lập với phân phối độ thích nghi dân số. Do đó, trong chọn lọc dựa trên thứ tự có thể sử dụng chức năng mở rộng quy mô để phân phối lại phạm vi độ thích nghi dân số nhằm thích ứng với áp lực chọn lọc.
Một phương pháp thuộc chọn lọc dựa trên tỉ lệ là chọn lọc theo bánh xe số. Đây là một phương pháp chọn lọc truyền thống. Trong chọn lọc theo bánh xe số thì mỗi cá thể trong dân số được ấn định một phần trên bánh xe số sao cho kích thước tương ứng với fitness của chính cá thể đó. Diện tích của mỗi phần không bằng nhau và nó tương ứng với giá trị của fitness. Giải pháp tốt có kích thước phần bánh xe lớn hơn so với các giải pháp xấu. Điều quan trọng trong chọn lọc bánh xe số là các cá thể không được sắp xếp theo fitness vì điều này sẽ thiên vị một cách đáng kể việc chọn lọc.
Hình phụ lục 3.1 Một ví dụ về bánh xe số Các bước trong quá trình chọn lọc theo bánh xe số như sau:
Bước 1. Gọi p(bi,t) là xác suất chọn lọc của mỗi cá thể bi tại thời điểm t. Giá trị
xác suất này được tính theo công thức:
f(bi,t) là giá trị của hàm thích nghi hay giá trị fitness của mỗi cá thể bi tại thời điểm