Dự án này triển khai và so sánh hiệu năng của các biến thể Giải thuật Di truyền (Genetic Algorithms - GA) khác nhau để giải quyết bài toán Người du lịch (Traveling Salesman Problem - TSP).
Mục tiêu là tìm ra lộ trình ngắn nhất đi qua N thành phố và quay trở lại điểm xuất phát, sử dụng các chiến lược tiến hóa tối ưu.
(Hình ảnh minh họa so sánh giữa Nearest Neighbor và 3 chiến lược GA)
Dự án so sánh 4 phương pháp tiếp cận:
- Nearest Neighbor (Heuristic): Thuật toán tham lam đơn giản để tạo mốc so sánh (Baseline) và khởi tạo quần thể (Seeding).
- Standard GA: Giải thuật di truyền tiêu chuẩn (Generational).
- Steady State GA: Duy trì trạng thái ổn định, chỉ thay thế một phần nhỏ quần thể yếu mỗi thế hệ.
- GA + Elitism: Kết hợp bảo tồn tinh hoa (Elitism) để đảm bảo cá thể tốt nhất luôn sống sót.
- Ordered Crossover (OX1): Lai ghép giữ thứ tự gen, tránh trùng lặp thành phố.
- Inversion Mutation: Đột biến đảo ngược chuỗi (hiệu quả cao trong việc gỡ các đường chéo).
- Tournament Selection: Chọn lọc cạnh tranh.
- Caching: Tối ưu hóa tính toán khoảng cách (Fitness function).
- Python 3.x
- Jupyter Notebook
- Các thư viện:
numpy,matplotlib
-
Clone repository này về máy:
git clone [https://github.com/Lightning1507/Genetic-Algorithm.git](https://github.com/Lightning1507/Genetic-Algorithm.git)
-
Cài đặt các thư viện cần thiết:
pip install numpy matplotlib notebook
-
Mở Jupyter Notebook:
jupyter notebook
-
Mở file
GA_Varations.ipynbvà chạy chọn Run All để xem quá trình huấn luyện và biểu đồ so sánh.
Dựa trên thực nghiệm với 100 thành phố và 2000 thế hệ:
- Nearest Neighbor: Cho kết quả cực nhanh nhưng thường bị kẹt ở tối ưu cục bộ.
- Standard GA: Cải thiện đáng kể so với NN nhưng đôi khi hội tụ chậm.
- GA + Elitism: Thường cho kết quả tốt nhất về độ dài quãng đường (Fitness) nhờ việc không đánh mất các gen tốt nhất.
├── GA_Varations.ipynb # Main notebook chứa toàn bộ code và visualization
├── results.png # Ảnh chụp kết quả chạy thực tế
└── README.md # Tài liệu hướng dẫn
Mọi đóng góp (Pull requests) để tối ưu hóa thêm tốc độ hoặc thử nghiệm các toán tử lai ghép/đột biến mới đều được hoan nghênh!
Dự án này được thực hiện bởi nhóm sinh viên/nghiên cứu:
-
[Đặng Hoàng Quân]
- GitHub: @Lightning1507
-
[Nguyễn Minh Quân]
- GitHub: @mingquanjp