Việc xác định điểm dừng của thuật toán di truyền có làm mất mục đích của thuật toán không?


11

Wikipedia định nghĩa điểm kết thúc của GA với điều này:

Thông thường, thuật toán chấm dứt khi một số lượng thế hệ tối đa đã được tạo ra hoặc mức độ thể lực thỏa đáng đã đạt được cho dân số. Nếu thuật toán đã kết thúc do số lượng thế hệ tối đa, một giải pháp thỏa đáng có thể hoặc không thể đạt được.

Bây giờ, nếu nó chấm dứt khi đã đạt đến mức độ thể lực thỏa đáng và bạn là người xác định mức độ thể lực đó, tại sao bạn không thể tự tạo ra bộ gen "hoàn hảo" ngay từ đầu, vì bạn đã biết các đặc điểm của bộ gen hoàn hảo này?

Tôi đoán tôi chỉ có một chút bối rối ở đây. Tôi nghĩ mục đích của GA là liên tục phát triển và cho chúng tôi thấy một giải pháp thậm chí còn tốt hơn những gì chúng tôi nghĩ, và chức năng tập thể dục của chúng tôi chỉ là thứ giúp nó trên đường đi, chứ không phải thứ chúng tôi đặt lên bệ khi chấm dứt " hoàn hảo "trạng thái. Điều đó không phá hủy điểm?


1
Có lẽ là một phù hợp tốt hơn cho cstheory.
Karl Bielefeldt

Mặc dù không có điều đó :)
slandau

1
@Karl: Câu hỏi hơi mềm đối với cstheory. Nó có thể sẽ bị đóng cửa ở đó.
Robert Harvey

2
Cảm ơn, @Robert. Bây giờ tôi nhớ tại sao tôi không ghé thăm đó. Tôi đoán đây là một trong những câu hỏi "giữa các vết nứt".
Karl Bielefeldt

1
Bạn cũng đã biết những đặc điểm của "người bạn đời hoàn hảo" của mình: họ sẽ khiến bạn hoàn toàn hạnh phúc! Nhưng điều đó là không đủ để tìm thấy chúng (hãy để một mình xây dựng chúng từ đầu ...). Thử nghiệm là cần thiết là tốt.
Kilian Foth

Câu trả lời:


17

Hàm tập thể dục đánh giá đầu ra của thuật toán của bạn. Bạn hoàn toàn có thể nhận ra một đầu ra lý tưởng khi bạn nhìn thấy nó, nhưng không biết các bước để tạo đầu ra đó từ bất kỳ đầu vào nào. Đó là nơi thuật toán di truyền hữu ích nhất.

Ví dụ, một ứng dụng thú vị phổ biến của GA là sản xuất một hình ảnh động có thể di chuyển một sinh vật ảo một cách hiệu quả. Thật dễ dàng để biết liệu sinh vật này đang di chuyển ở một tốc độ nhất định theo một đường tương đối thẳng. Đó là chức năng tập thể dục của bạn. Thật khó khăn hơn nhiều để nói chính xác chuỗi động tác "cơ bắp" để khiến nó thực hiện điều đó.


3
Cũng cần lưu ý rằng bạn thường dừng sau x thế hệ vì GA có thể quay vô thời hạn vì nó bị 'kẹt' trên cực tiểu / cực đại cục bộ không thỏa mãn điểm thể lực tối ưu của bạn. Điều này có thể xảy ra nếu các chức năng lựa chọn / trao đổi / đột biến của bạn không được điều chỉnh đủ tốt cho bộ vấn đề.
Steven Evers

@Karl Tôi nhớ giải pháp thuật toán di truyền của Andrew Cooke để tạo ra Malbolge "Hello World" đầu tiên và sau đó mất một giải pháp tốt hơn được gửi qua email cho anh ấy stackoverflow.com/questions/5338627/
trộm

8

Đó thường là trường hợp bạn có thể xác định mức độ phù hợp của giải pháp nhưng không thể trực tiếp xác định giải pháp đó. Giả sử bạn đang cố gắng tiến hóa những con thỏ nhanh, và có một số gen ảnh hưởng đến tốc độ của thỏ. Bạn có thể kiểm tra tốc độ của thỏ, nhưng việc liệt kê tất cả các tổ hợp gen liên quan đến tốc độ sẽ không thực tế. Trong trường hợp như vậy, bạn có thể có một GA đua thỏ và sinh sản những con nhanh nhất. Bạn có thể làm điều đó mãi mãi, nhưng có lẽ bạn muốn dừng lại khi:

  • bạn đã tìm thấy một con thỏ nhanh hơn X, hoặc
  • sự cải thiện gia tăng qua n thế hệ đã giảm xuống dưới một số ngưỡng, hoặc
  • bạn đã nhân giống thỏ qua các thế hệ m

5

Toàn bộ quan điểm của GA là cung cấp cho bạn giải pháp cho vấn đề mức độ thể lực đó. Giải pháp này sẽ rất khó tìm thấy bằng cách sử dụng các thuật toán tìm kiếm thông thường khác, thường là lý do tại sao bạn sử dụng GA ở nơi đầu tiên.

Hoặc thay vì giới hạn giá trị thể lực, bạn có thể quyết định số lượng thế hệ bạn muốn chạy (bạn càng chạy nhiều thế hệ, bạn càng có cơ hội tìm thấy giá trị thể lực cao hơn bao giờ hết). Ví dụ, trong bài toán nhân viên bán hàng du lịch, có được một con đường có chi phí thấp nhất giữa các thành phố bạn cần đi qua.

Cho dù điều kiện dừng của bạn là mức thể lực nhất định có thể chấp nhận được hoặc hạn chế về thời gian nhất định (chạy GA trong khoảng thời gian tối đa hoặc số lượng thế hệ giới hạn cho các ứng dụng quan trọng về thời gian như tìm đường hoặc ứng dụng AI) thường được xác định bởi vấn đề của bạn miền.


3

Theo trực giác, mục đích của thuật toán di truyền là xây dựng một giải pháp thuật toán cho một vấn đề không cho vay để phân tích logic đơn giản. Khi mục tiêu đó đã đạt được, GA không cần phải theo đuổi thêm nữa.

Tất nhiên, nếu muốn có "thể lực" tốt hơn, thuật toán di truyền có thể được chạy để xem liệu nó có thể tìm ra giải pháp tối ưu hóa cao hơn không, hoặc chính thuật toán di truyền có thể được điều chỉnh để xem liệu nó có hội tụ một giải pháp tốt hơn không.


2

Một thuật toán di truyền đòi hỏi một số cách để thưởng cho các gen tốt với sự lan truyền lớn hơn. Nếu bạn không có cách nào để nói gen tốt từ gen xấu, bạn hoàn toàn không thể sử dụng thuật toán di truyền.

Để một thuật toán di truyền hoạt động, bạn phải cho phép các giải pháp phù hợp hơn để tái tạo theo sở thích đối với các giải pháp ít phù hợp hơn. Nếu không, bạn sẽ thử các giải pháp ngẫu nhiên.

Đây là một ví dụ điển hình từ kinh nghiệm của riêng tôi: Phát triển một trong những hệ thống quay số bằng giọng nói đầu tiên, chúng tôi đã gặp khó khăn khi tìm một thuật toán để khớp tên được nói với một bản sao được lưu trữ cùng tên đó. Chúng tôi đã nói rằng độ chính xác 95% chọn một tên trong số 25 là đủ. Chúng tôi đã có một kho lưu trữ của những người nói 25 cái tên 10 lần mỗi cái.

Đầu tiên, chúng tôi đã phát triển một hệ thống đầu vào đo chiều dài của từ được nói và năng lượng tần số trong một số đoạn được chuẩn hóa của nó. Sau đó, chúng tôi đã phát triển một thuật toán gán trọng số cho các kết quả khớp trên các tham số đó và so sánh hai bộ tham số thông qua các trọng số đó.

Bây giờ, chúng ta đã có một bước cuối cùng - giá trị của những trọng lượng đó phải là gì?

Chúng tôi đã tạo ra 1.000 bộ trọng lượng ngẫu nhiên và thử nghiệm chúng chống lại tử thi. Chúng tôi đã ném đi 500 người thực hiện điều tồi tệ nhất. Đối với 500 còn lại, chúng tôi nhân đôi từng cái và trong một trong số chúng, ngẫu nhiên tăng hoặc giảm một trong các trọng số.

Chúng tôi lặp lại quá trình này trên máy tính trong khoảng hai tuần cho đến khi cuối cùng nó có một bộ trọng lượng đáp ứng tiêu chí chính xác 95%. Sau đó, chúng tôi đã thử nghiệm nó trên dữ liệu không có trong kho. Nó chính xác khoảng 92%. Vì vậy, chúng tôi đã chạy lâu hơn để có độ chính xác tới 98% trên kho dữ liệu và tập hợp trọng số đó tạo ra độ chính xác 95% trên dữ liệu không có trong kho.

Vì vậy, vấn đề là, bạn phải có chức năng tập thể dục để chạy thuật toán di truyền. Nếu bạn không có cách nào để nói gen tốt từ gen xấu, làm thế nào bạn có thể chắc chắn rằng gen tốt sinh sản và gen xấu không?


0

Lặp đi lặp lại cho đến khi một giải pháp không khác với lặp đi lặp lại rất nhiều. Đối với rất nhiều, xin vui lòng hiểu một dung sai cố định.

Solution in iteration n-6: 600
Solution in iteration n-5: 800
Solution in iteration n-4: 768
Solution in iteration n-3: 780 
Solution in iteration n-2: 778
Solution in iteration n-1: 778.23
Solution in iteration n: 780.18
Solution in iteration n+1: 780.1815

Trong ví dụ này, nếu dung sai cố định của bạn là 0,01 thì (n + 1) sẽ bảo bạn dừng lại vì abs (giải pháp (n + 1) -solution (n)) <0,01.

Tiếp tục, đó là khi thuật toán của bạn có thể nói: điều này sẽ không tốt hơn!


0

Để trả lời nhanh cho bạn câu hỏi chính: Có một sự khác biệt lớn giữa việc biết những gì bạn muốn đạt được, và biết làm thế nào để đạt được điều đó.

Ví dụ, chi tiết hơn, với một trong những vấn đề phổ biến nhất được giải quyết bằng cách sử dụng thuật toán di truyền / tiến hóa, thường là nghiên cứu trường hợp trong lớp, tìm ra lộ trình tối ưu trong biểu đồ. Điều này thường được sử dụng trong mạng để tìm tuyến đường rẻ nhất từ ​​đầu này sang đầu kia. Khi bạn xác định chi phí (số bước nhảy, chi phí từ mỗi bước nhảy, v.v ...), bạn cũng xác định chi phí mục tiêu (mức độ phù hợp) mà bạn hài lòng với kết quả. Thuật toán của bạn có thể không tìm thấy tốt nhất, nhưng nó sẽ tìm thấy một tối ưu chấp nhận được về mặt thuật toán. Điều này có nghĩa là mối quan hệ chi phí / lợi ích của việc tìm kiếm một câu trả lời tốt hơn là bị cấm.

Với GA / EA, bạn sẽ thấy rằng đó là hành vi bình thường mà bạn rất nhanh chóng tìm thấy câu trả lời tối ưu 95% +, nhưng thu hẹp lại 5% cuối cùng sẽ tốn kém hơn theo cấp số nhân. Vì vậy, lý thuyết là bạn xác định một mức tối ưu chấp nhận được để đạt được kết quả tốt nhất trong khoảng thời gian ít nhất. Vì chi phí tìm kiếm, giả sử 1% hàng đầu, có thể vượt xa lợi ích của nó so với 5% hàng đầu, bạn xác định mức tối ưu chấp nhận được của mình.

Tóm lại, bây giờ bạn không có câu trả lời cho bất kỳ vấn đề cụ thể nào, bạn chỉ cần xác định, theo từng vấn đề, mức tối ưu chấp nhận được của bạn, điểm mà việc tìm câu trả lời tốt hơn là không thực tế.


0

Có một số nghiên cứu về sửa lỗi trong C bằng thuật toán di truyền bằng cách cung cấp các trường hợp thử nghiệm âm tính và dương tính như các chức năng thể dục, cùng với mã bị hỏng làm đầu vào. Đây là một ví dụ về một vấn đề có thể được giải quyết bởi con người, nhưng thuật toán di truyền dễ thực hiện hơn. Điều quan trọng cần lưu ý:

Mặc dù các phương pháp được mô tả trong bài viết này không phát triển các chương trình mới từ đầu, nhưng chúng cho thấy cách phát triển phần mềm cũ để sửa chữa các lỗi hiện có.

Tuy nhiên, các chương trình mới đã được phát triển từ đầu không chỉ bằng C. Một số chương trình không cần thiết được viết bằng ngôn ngữ lập trình bí truyền Malbolge có tất cả (theo hiểu biết của tôi) đã được phát triển, không được viết. Ngôn ngữ này quá phức tạp đối với một lập trình viên sử dụng và quá phức tạp để suy luận một cách hiệu quả các chương trình chỉ bằng logic, do đó, phần lớn các chương trình được viết trong đó đã được tạo ra bởi các thuật toán di truyền. Các chức năng thể dục nói chung là khoảng cách chỉnh sửa đến đầu ra dự kiến.

Đây là một vòng tròn độc đáo, theo một cách nào đó. Bằng cách quan sát rằng mã di truyền phức tạp được viết bởi các quá trình tiến hóa, chúng ta có thể mô phỏng các quá trình tiến hóa để tạo ra mã theo một ngôn ngữ phức tạp khác mà không cần biết mã hoạt động như thế nào!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.