2011-02-06 11 views
6

Lập trình di truyền hiện có khả năng phát triển một loại thuật toán tìm kiếm sang thuật toán tìm kiếm khác không? Ví dụ: có bất kỳ thử nghiệm nào từng được tạo ra/đột biến BubbleSort từ QuickSort (xem http://en.wikipedia.org/wiki/Sorting_algorithm)Thuật toán lập trình và tìm kiếm di truyền

+0

bạn có thể muốn xem câu hỏi này để thảo luận về những gì chương trình di truyền có thể hoặc không thể làm -> http: // stackoverflow.com/questions/5732917/code-generation-by-di-thuật toán – JohnIdol

Trả lời

1

Tôi không biết và hướng cụ thể mà bạn đang đề xuất trong ví dụ của bạn có vẻ khó xảy ra; nó sẽ có một loại chức năng thể dục ngược, vì loại bong bóng là trong hầu hết các biện pháp tồi tệ hơn quicksort. Nó không phải là không thể tưởng tượng rằng điều này có thể xảy ra, nhưng nói chung một khi bạn đã có một thuật toán được hiểu rõ, nó đã khá phù hợp - đi đến một số khác có thể yêu cầu đi qua một số lựa chọn tồi tệ hơn.

Bị kẹt trong minima địa phương không phải là vấn đề không xác định đối với hầu hết các chiến lược tìm kiếm.

+0

Charlie, chỉ tò mò, làm thế nào bạn sẽ tạo ra thế hệ tiếp theo? Tôi dường như không thể hiểu được thực tế về việc chuyển sắp xếp và sắp xếp để tạo thuật toán mới. Các thuật toán sắp xếp phân biệt trong toàn bộ cách tiếp cận của chúng đối với tác vụ, không chỉ các tham số mà bạn có thể chơi. – pnt

+1

Điều đó thực sự là vấn đề chính. Hãy nhớ rằng cốt lõi, một GA làm cho tiến bộ bằng cách thực hiện rất nhiều thay đổi ngẫu nhiên và tìm kiếm một trong đó là "tốt hơn" bởi chức năng thể dục. Cùng một vấn đề xảy ra trong tiến hóa sinh học - bạn có thể phát triển từ một con cá sang một con chim, nhưng bất cứ thứ gì khiến bạn gần gũi hơn với chim sẽ bị chết đuối trước khi nó tái tạo. –

+0

Một ví dụ khác là gấu trúc: nó rất phù hợp với hai điều - ăn tre và dễ thương. Khu rừng tre nứa yên tĩnh đang biến mất, và vì vậy chúng đang bị đe dọa. Mặt khác, nó có thể chỉ là "dễ thương" là đặc tính đảm bảo sự sống còn tiếp tục. –

2

Không có lý do gì khiến GP không thể phát triển, ví dụ: một trong hai loại thuật toán. Tôi không chắc chắn rằng nó thực sự có ý nghĩa để nghĩ về việc phát triển một "thành" khác. GP sẽ đơn giản phát triển một chương trình đến gần hơn với chức năng thể dục mà bạn xác định.

Nếu chức năng thể dục của bạn chỉ xem xét tính chính xác sắp xếp (và giả sử bạn có các khối xây dựng thích hợp để GP của bạn sử dụng) thì nó có thể phát triển cả BubbleSort và QuickSort. Nếu bạn cũng bao gồm hiệu quả như một thước đo về thể lực, thì điều đó có thể ảnh hưởng đến yếu tố nào trong số này sẽ được xác định là giải pháp tốt hơn.

Bạn có thể gộp GP với ví dụ: QuickSort và nếu bạn có một chức năng thể dục thích hợp, nó chắc chắn cuối cùng có thể đến với BubbleSort - nhưng nó có thể đến với bất cứ điều gì khác mà là fitter hơn QuickSort là tốt.

Bây giờ phải mất bao lâu động cơ GP để làm cuộc cách mạng này là một câu hỏi khác ...

3

Bạn có thể muốn nhìn vào công việc của W. Daniel Hillis từ những năm 80. Ông đã dành rất nhiều thời gian để tạo ra các mạng phân loại bằng cách lập trình di truyền. Trong khi ông quan tâm nhiều hơn trong việc giải quyết vấn đề phân loại một số lượng các đối tượng không đổi (mạng phân loại 16 đối tượng đã là một vấn đề lớn trong gần một thập kỷ), bạn nên làm quen với công việc của mình nếu bạn thực sự quan tâm đến thuật toán phân loại di truyền.

Trong quá trình tiến hóa của thuật toán để sắp xếp danh sách độ dài tùy ý, bạn cũng có thể muốn làm quen với khái niệm đồng tiến hóa. Tôi đã xây dựng một hệ thống đồng tiến hóa trước khi điểm là có một thuật toán di truyền phát triển các thuật toán sắp xếp trong khi một GA khác phát triển danh sách các số chưa được sắp xếp. Thể dục của máy phân loại là độ chính xác của nó (cộng thêm tiền thưởng để so sánh ít hơn nếu nó chính xác 100%) và tập thể dục của bộ tạo danh sách là bao nhiêu lỗi sắp xếp các thuật toán thực hiện trong việc sắp xếp danh sách của nó.

Để trả lời câu hỏi cụ thể của bạn về việc liệu bong bóng đã từng được phát triển nhanh chưa, tôi sẽ phải nói rằng tôi sẽ nghiêm túc nghi ngờ điều đó, trừ khi chức năng thể dục của người lập trình đều rất cụ thể và không được thông báo. Có, bong bóng là rất đơn giản, do đó, có thể một GP có chức năng thể dục là chính xác cộng với kích thước chương trình cuối cùng sẽ tìm thấy bong bóng. Tuy nhiên, tại sao một lập trình viên chọn kích thước thay vì số lượng so sánh như một hàm thể dục khi nó là cái sau xác định thời gian chạy?

Bằng cách hỏi xem GP có thể phát triển một thuật toán thành một thuật toán khác hay không, tôi tự hỏi bạn có hoàn toàn rõ ràng về GP nào không. Lý tưởng nhất, mỗi nhiễm sắc thể duy nhất xác định một loại duy nhất. Dân số 200 nhiễm sắc thể đại diện cho 200 thuật toán khác nhau. Có, nhanh và bong bóng có thể ở trong một nơi nào đó, nhưng cũng có 198 phương pháp khác, có khả năng chưa được đặt tên.