Khoảng cách giữa các cá thể trên đường cong pareto

Một phần của tài liệu (LUẬN văn THẠC sĩ) áp dụng thuật toán di truyền giải bài toán tối ưu tuyến xe buýt (Trang 34 - 37)

Thuật toán crowding-distance-assignment(I): [1,2]

 𝑙 = 𝐼

 Với mỗi 𝑖, gán 𝐼[𝑖]𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 = 0

 Với mỗi mục tiêu tối ưu 𝑚

o 𝐼 = 𝑠𝑜𝑟𝑡(𝐼, 𝑚)

o 𝐼[1]𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 = 𝐼[𝑙]𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 = ∞

o For 𝑖 = 2 𝑡𝑜 (𝑙 − 1)

o 𝐼[𝑖]𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 = 𝐼[𝑖]𝑑𝑖𝑠𝑡𝑎𝑛𝑐𝑒 + (𝐼 𝑖 + 1 . 𝑚 − 𝐼 𝑖 − 1 . 𝑚)/(𝑓𝑚𝑚𝑎𝑥 −

𝑓𝑚𝑚𝑖𝑛)

Ý tưởng cơ bản đằng sau thuật toán này là tìm khoảng cách Euclid giữa các cá thể với nhau dựa số lượng mục tiêu cần tối ưu 𝑚. Các giá trị ở biên bao giờ cũng được chọn vì chúng được gán khoảng cách xa nhất.

Sau khi tính xong các giá trị khoảng cách, ta chọn các cá thể có giá trị khoảng cách tính được lớn nhất trong dãy.

Như vậy, các cá thể con trong quần thể được sinh ra từ N cá thể cha ban đầu bằng các phép lai ghép và đột biến được mô phỏng giống như trong tự nhiên. Sau đó, tất cả 2 * N cá thể được đánh giá mức độ tốt-xấu dựa vào 𝑚 hàm mục tiêu tương ứng với 𝑚 mục tiêu tối ưu theo yêu cầu đặt ra của bài toán. Sau

khi đã có sự đánh giá, các cá thể được lựa chọn tồn tại trong thế hệ tiếp theo có giá trị tốt hơn so với các cá thể khác. Thuật toán phân lớp và tính khoảng cách sẽ giúp lựa chọn ra N cá thể tốt nhất cho thế hệ tiếp theo. N cá thể này được phân bố đều trên bề mặt đường cong pareto. Quá trình trên sẽ tiếp diễn đến khi kết quả sinh ra được chấp nhận. Thuật toán di truyền tìm nghiệm tối ưu cho thiết kế tuyến và tần suất xe buýt đã được viết thành chương trình và sẽ trình bày cụ thể hơn trong chương sau.

2.4. Kết luận

Chương 2 trình bày một số kiến thức tổng quan về tối ưu đa mục tiêu và thuật toán di truyền. Sau đó, đưa ra lời giải áp dụng thuật toán di truyền cho bài toán thiết kế tuyến và tần suất xe buýt tối ưu hai mục tiêu.

CHƢƠNG 3 – CHƢƠNG TRÌNH MÔ PHỎNG THUẬT TOÁN DI TRUYỀN GIẢI BÀI TOÁN THIẾT KẾ TUYẾN VÀ TẦN SUẤT XE

BUÝT 3.1. Công cụ phát triển chƣơng trình

Thuật toán di truyền trong đề tài được lập trình bằng ngôn ngữ C++, và được quản lý mã nguồn bằng môi trường phát triển tích hợp (IDE - Integrated Development Environment) Code::Blocks.

3.1.1. Giới thiệu tổng quan về C++

C++ là một dạng ngôn ngữ đa mẫu hình tự do có kiểu tĩnh và hỗ trợ lập trình thủ tục, dữ liệu trừu trượng, lập trình hướng đối tượng, và lập trình đa hình. Từ thập niên 1990, C++ đã trở thành một trong những ngôn ngữ thương mại phổ biến nhất trong khi đó. C++ có hai phần chính: phần ngôn ngữ cốt lõi và phần Thư viện chuẩn C++(STL - Standard Template Library). Chương trình có sử dụng một số cấu trúc dữ liệu và hàm trong thư viện STL của C++.

Thư viện chuẩn C++ dùng lại thư viện chuẩn C với một số điều chỉnh nhỏ để giúp nó hoạt động tốt hơn với ngôn ngữ C++. Một bộ phận lớn khác của thư viện C++ dựa trên Thư viện chuẩn (STL). Thư viện này có nhiều công cụ hữu dụng như: vectors, lists, maps, algorithms, sets, queues, stacks, arrays, etc. Ngoài ra, thư viện có hỗ trợ dùng template để viết các thuật toán tổng quát mà chúng làm việc được với bất kì cấu trúc dữ liệu nào.

Một chức năng quan trọng của C++ được áp dụng trong chương trình là hướng đối tượng. C++ hỗ trợ hướng đối tượng với 4 tính năng chính: tính trừu tượng, tính bao đóng, tính đa hình, và tính kế thừa. Bên cạnh đó, các đặc điểm sau về thiết kế cũng giúp cho C++ trở thành một ngôn ngữ phổ biến thông dụng hiện nay. Đó là:

 C++ được thiết kế để là một ngôn ngữ tổng quát có kiểu tĩnh mà lại hữu hiệu và năng động như C.

 C++ được thiết kế nhằm hỗ trợ trực tiếp và đầy đủ nhiều kiểu lập trình như là lập trình cấu trúc, sự trừu tượng của dữ liệu, lập trình hướng đối tượng, và lập trình tổng quát.

 C++ được thiết kế để người lập trình có cơ hội lựa chọn ngay cả khi điều này có thể dẫn tới sự chọn lựa sai lầm của người lập trình.

 C++ được thiết kế để tương thích với C càng nhiều càng tốt, do đó, có cung ứng một sự chuyển đổi (ngôn ngữ) rất thuận tiện từ C.

 C++ tránh các chức năng mà chúng thuộc về dặc điểm riêng của nền tảng hay của mục đích chung chung.

 C++ không lệ thuộc vào các phần bổ sung cho các tính năng thừa

 C++ được thiết kế để hoạt động mà không cần phải có môi trường lập trình hoàn thiện.

3.1.2. Giới thiệu tổng quan về Code::Blocks

Code::Blocks là IDE mã nguồn mở miễn phí chạy trên nhiều platform có hỗ trợ nhiều trình biên dịch GCC, Clang,… IDE này được phát triển bằng C++ sử dụng framework wxWidget làm bộ công cụ giao diện người dùng (GUI – graphic user interface). Sử dụng một kiến trúc kiểu plugin, các tính năng của Code::Blocks được mở rộng bằng cách plugins tương ứng.

Một phần của tài liệu (LUẬN văn THẠC sĩ) áp dụng thuật toán di truyền giải bài toán tối ưu tuyến xe buýt (Trang 34 - 37)

Tải bản đầy đủ (PDF)

(68 trang)