Tốt nhất theo nghĩa nào?
Theo kinh nghiệm của tôi, GA là một trong những tối ưu hóa thực dụng nhất. Mặc dù nhiều thuật toán chính xác hơn đòi hỏi thời gian và nỗ lực để chính thức hóa các vấn đề thực trong thế giới toán học, GA có thể xử lý bất kỳ hàm chi phí nào với các quy tắc và ràng buộc phức tạp (GA có liên quan theo cách tiếp cận thực hiện chứ không phải bằng cách tính toán cụ thể). Quá trình này rất đơn giản và bạn có thể thử nhiều cách tiếp cận cho công việc khám phá.
Tôi cũng đánh giá cao khả năng từ chối các giải pháp trong quá khứ cho thuật toán cho các lần chạy trong tương lai, điều này tốt cho nhiệm vụ lặp đi lặp lại.
Về mặt khái niệm, một thuật toán di truyền có thể được biểu diễn bằng hàm băm của các hàm và phù hợp với các ngôn ngữ chức năng giống như Clojure, đây cũng là ngôn ngữ mà bạn có thể đạt được kết quả lớn rất nhanh.
Thuật toán di truyền cũng có thể được lồng nhau: hàm chi phí của một GA có thể là GA! Các thuật toán này tận dụng phần cứng và cơ sở hạ tầng hiện đại cho phép chúng tính toán một dân số rất lớn để - ngay cả với các thao tác chọn / đột biến đơn giản - bạn vẫn có thể đạt được kết quả tốt.
Ngay cả đối với các vấn đề đơn giản như tìm tối thiểu của hàm sóng, GA cũng không tệ và có thể đạt được độ chính xác khá trong thời gian chấp nhận được.
Vì vậy, yeah, các giải pháp phân tích có thể có thời gian thực hiện nhanh hơn và độ chính xác nhanh hơn, nhưng thời gian cần thiết để tạo ra chúng vượt trội thường mang lại lợi ích mong đợi! Vậy khi nào? Hầu như mọi lúc với tôi, ít nhất là để tối ưu hóa meta.