Chính xác thì thuật toán di truyền là gì và loại vấn đề nào tốt cho chúng?


16

Tôi đã nhận thấy rằng một vài câu hỏi trên trang web này đề cập đến các thuật toán di truyền và nó khiến tôi nhận ra rằng tôi không thực sự biết nhiều về chúng.

Tôi đã nghe thuật ngữ này trước đây, nhưng nó không phải là thứ tôi từng sử dụng, vì vậy tôi không có nhiều ý tưởng về cách chúng hoạt động và những gì chúng tốt cho. Tất cả những gì tôi biết là chúng liên quan đến một số loại tiến hóa và thay đổi giá trị ngẫu nhiên.

Bạn có thể cho tôi một lời giải thích ngắn, tốt nhất là bao gồm một số ví dụ thực tế minh họa các nguyên tắc cơ bản?

Câu trả lời:


11

Các thuật toán tiến hóa là một họ các thuật toán tối ưu hóa dựa trên nguyên tắc chọn lọc tự nhiên của Darwin . Là một phần của chọn lọc tự nhiên, một môi trường nhất định có một quần thể các cá thể cạnh tranh để sinh tồn và sinh sản. Khả năng của mỗi cá nhân để đạt được những mục tiêu này quyết định cơ hội có con của họ, nói cách khác là truyền gen của họ cho thế hệ cá nhân tiếp theo, vì lý do di truyền sẽ tăng cơ hội làm tốt, thậm chí tốt hơn, trong việc nhận ra những điều này hai mục tiêu.

Nguyên tắc cải tiến liên tục qua các thế hệ này được thực hiện bởi các thuật toán tiến hóa để tối ưu hóa các giải pháp cho một vấn đề. Ở thế hệ ban đầu , một quần thể gồm các cá thể khác nhau được tạo ngẫu nhiên hoặc bằng các phương pháp khác. Một cá nhân là một giải pháp cho vấn đề, ít nhiều tốt: chất lượng của cá nhân liên quan đến vấn đề được gọi là thể dục , phản ánh sự đầy đủ của giải pháp cho vấn đề cần giải quyết. Sức khỏe của một cá nhân càng cao thì khả năng truyền một số hoặc tất cả kiểu gen của nó cho các cá nhân của thế hệ tiếp theo càng cao.

Một cá nhân được mã hóa thành kiểu gen , có thể có bất kỳ hình dạng nào, chẳng hạn như vectơ ** bit ( thuật toán di truyền ) hoặc vectơ thực (chiến lược tiến hóa). Mỗi kiểu gen được chuyển thành kiểu hình khi đánh giá cá thể, tức là khi tính thể lực của nó được tính toán. Trong một số trường hợp, kiểu hình giống hệt với kiểu gen: nó được gọi là trực tiếp mã hóa. Mặt khác, mã hóa được gọi là gián tiếp. Ví dụ: giả sử bạn muốn tối ưu hóa kích thước của hình chữ nhật song song được xác định bởi chiều dài, chiều cao và chiều rộng của nó. Để đơn giản hóa ví dụ, giả sử rằng ba đại lượng này là các số nguyên trong khoảng từ 0 đến 15. Sau đó chúng ta có thể mô tả từng đại lượng bằng số nhị phân 4 bit. Một ví dụ về giải pháp tiềm năng có thể là kiểu gen 0001 0111 01010. Kiểu hình tương ứng là một hình song song có chiều dài 1, chiều cao 7 và chiều rộng 10.

Trong quá trình chuyển đổi từ thế hệ cũ sang thế hệ mới được gọi là toán tử biến thể , với mục đích là thao túng các cá nhân. Có hai loại toán tử biến thể khác nhau:

  • các toán tử đột biến , được sử dụng để giới thiệu các biến thể trong cùng một cá thể, như các đột biến gen;
  • các toán tử chéo , được sử dụng để lai ít nhất hai kiểu gen khác nhau, là gen di truyền từ nhân giống.

Các thuật toán tiến hóa đã chứng minh bản thân trong các lĩnh vực khác nhau như nghiên cứu hoạt động, robot, sinh học, sắc thái hoặc mật mã. Ngoài ra, chúng có thể tối ưu hóa đồng thời nhiều mục tiêu và có thể được sử dụng làm hộp đen vì chúng không giả sử bất kỳ thuộc tính nào trong mô hình toán học để tối ưu hóa. Hạn chế thực sự duy nhất của họ là độ phức tạp tính toán.

nhập mô tả hình ảnh ở đây


Cảm ơn đã trả lời điều này ở đây! Mặc dù cá nhân tôi nghĩ rằng đây là một câu hỏi lý tưởng cho AI SE, bởi vì nó là cơ bản và "cấp độ cao", đừng ngại chỉ đạo OP và độc giả đến Xác thực chéo cho các câu hỏi nâng cao hơn về chủ đề này, phù hợp với ngăn xếp đó .
DukeZhou

8

Thuật toán di truyền là một thuật toán tạo ngẫu nhiên một số giải pháp đã thử cho một vấn đề. Tập hợp các giải pháp đã thử này được gọi là "dân số".

Sau đó, nó cố gắng xem các giải pháp này giải quyết vấn đề tốt như thế nào, bằng cách sử dụng một chức năng thể dục nhất định . Các giải pháp đã cố gắng với giá trị thể lực tốt nhất được sử dụng để tạo ra một dân số mới. Điều này có thể được thực hiện bằng cách thực hiện các thay đổi nhỏ đối với các giải pháp đã thử (đột biến) hoặc bằng cách kết hợp các giải pháp đã thử (giao nhau) hiện có.

Ý tưởng là theo thời gian, một giải pháp đã cố gắng xuất hiện có giá trị thể lực đủ cao để giải quyết vấn đề.

Cảm hứng cho điều này đến từ lý thuyết tiến hóa; các giải pháp tốt nhất tồn tại và sinh sản.

ví dụ 1

Giả sử bạn đang tìm kiếm cách hiệu quả nhất để cắt một số hình dạng ra khỏi một miếng gỗ. Bạn muốn lãng phí càng ít gỗ càng tốt.

Các giải pháp đã cố gắng của bạn sẽ được sắp xếp ngẫu nhiên các hình dạng này trên mảnh gỗ của bạn. Sức khỏe sẽ được xác định bằng cách ít gỗ còn lại sau khi cắt các hình dạng theo sự sắp xếp này.
Càng ít gỗ, giải pháp cố gắng càng tốt.

Ví dụ 2

Giả sử bạn đang cố gắng tìm một đa thức đi qua một số điểm. Các giải pháp đã cố gắng của bạn sẽ là đa thức ngẫu nhiên.
Để xác định mức độ phù hợp của các đa thức này, bạn xác định mức độ phù hợp của chúng với các điểm đã cho. (Trong trường hợp cụ thể này, có lẽ bạn sẽ sử dụng phương pháp bình phương nhỏ nhất để xác định đa thức phù hợp với các điểm như thế nào). Qua một số thử nghiệm, bạn sẽ có được các đa thức phù hợp với các điểm tốt hơn, cho đến khi bạn có một đa thức phù hợp với các điểm đủ chặt chẽ.


Ý nghĩa của giải pháp là gì? Bạn có thể cho tôi một ví dụ thực tế với một vấn đề cụ thể, để tôi có thể hình dung rõ hơn nó trông như thế nào không?
Lurker bất mãn

@InquisitiveLurker Tôi đã thêm ví dụ. Hãy cho tôi biết nếu họ không đủ rõ ràng; Tôi sẽ vui mừng cập nhật câu trả lời của tôi.
SL Barth - Phục hồi Monica

6

Câu trả lời này yêu cầu một ví dụ thực tế về cách người ta có thể được sử dụng, mà tôi sẽ cố gắng cung cấp ngoài các câu trả lời khác. Họ dường như là một công việc rất tốt để giải thích thuật toán di truyền là gì. Vì vậy, điều này sẽ đưa ra một ví dụ.

Giả sử bạn có một mạng lưới thần kinh (mặc dù chúng không phải là ứng dụng duy nhất của nó), từ một số đầu vào nhất định, sẽ mang lại một số đầu ra. Một thuật toán di truyền có thể tạo ra một quần thể trong số này, và bằng cách xem đầu ra nào là tốt nhất, sinh sản và tiêu diệt các thành viên của quần thể. Cuối cùng, điều này sẽ tối ưu hóa mạng lưới thần kinh nếu nó đủ phức tạp.

Đây là một minh chứng mà tôi đã thực hiện, mặc dù được mã hóa kém, có thể giúp bạn hiểu. http://khrabanas.github.io/projects/evo/evo.html Nhấn nút tiến hóa và lộn xộn với các mục tiêu.

Nó sử dụng một thuật toán di truyền đơn giản để sinh sản, gây đột biến và quyết định giữa quần thể nào tồn tại. Tùy thuộc vào cách các biến đầu vào được đặt, mạng sẽ có thể đạt đến một mức độ gần gũi với chúng. Trong thời trang này, dân số cuối cùng sẽ trở thành một nhóm đồng nhất, có đầu ra giống với các mục tiêu.

Thuật toán di truyền đang cố gắng tạo ra một "mạng lưới thần kinh", bằng cách sử dụng RGB, sẽ tạo ra màu sắc đầu ra. Đầu tiên nó tạo ra một dân số ngẫu nhiên. Sau đó, bằng cách lấy 3 thành viên ngẫu nhiên trong dân số, chọn một thành viên có thể lực thấp nhất và loại bỏ nó khỏi dân số. Thể lực bằng với sự khác biệt trong bình phương mục tiêu hàng đầu + sự khác biệt trong bình phương mục tiêu dưới cùng bình phương. Sau đó, nó nhân giống hai con còn lại với nhau và thêm đứa trẻ vào cùng một nơi trong quần thể là thành viên đã chết. Khi giao phối xảy ra, có khả năng xảy ra đột biến. Đột biến này sẽ thay đổi một trong các giá trị ngẫu nhiên.

Như một lưu ý phụ, do cách nó được thiết lập, không thể hoàn toàn chính xác trong nhiều trường hợp, mặc dù nó sẽ đạt được sự gần gũi tương đối.


6

Có một số câu trả lời hay ở đây giải thích thuật toán di truyền là gì và đưa ra các ứng dụng ví dụ. Tôi đang thêm một số lời khuyên mục đích chung về những gì chúng tốt cho, nhưng cũng có trường hợp bạn KHÔNG nên sử dụng chúng. Nếu giọng điệu của tôi có vẻ gay gắt, đó là bởi vì sử dụng GA trong bất kỳ trường hợp nào trong phần Không phù hợp sẽ dẫn đến việc giấy của bạn bị từ chối ngay lập tức từ bất kỳ tạp chí hàng đầu nào.

Đầu tiên, vấn đề của bạn PHẢI là một vấn đề tối ưu hóa. Bạn cần xác định một "chức năng tập thể dục" mà bạn đang cố gắng tối ưu hóa và bạn cần có cách để đo lường nó.

Tốt

  • Các hàm chéo dễ xác định và tự nhiên : Khi xử lý một số loại dữ liệu nhất định, các hàm chéo / đột biến có thể dễ xác định. Ví dụ, chuỗi (ví dụ: chuỗi DNA hoặc gen) có thể được đột biến dễ dàng bằng cách ghép hai chuỗi ứng cử viên để có được chuỗi mới (đây là lý do tại sao tự nhiên sử dụng thuật toán di truyền!). Cây (như cây phát sinh hoặc cây phân tích) cũng có thể được ghép, bằng cách thay thế một nhánh của một cây bằng một nhánh từ một cây khác. Hình dạng (như cánh máy bay hoặc hình thuyền) có thể được biến đổi dễ dàng bằng cách vẽ lưới trên hình và kết hợp các phần lưới khác nhau từ cha mẹ để có được một đứa trẻ. Thông thường điều này có nghĩa là vấn đề của bạn bao gồm các phần khác nhau và tập hợp các phần từ các giải pháp riêng biệt là một giải pháp ứng cử viên hợp lệ.
    • Điều này có nghĩa là nếu vấn đề của bạn được xác định trong không gian vectơ nơi tọa độ không có ý nghĩa đặc biệt nào, GA không phải là một lựa chọn tốt. Nếu khó có thể hình thành vấn đề của bạn dưới dạng GA, thì không đáng.
  • Đánh giá Hộp đen : Nếu đối với một ứng cử viên, chức năng thể dục của bạn được đánh giá bên ngoài máy tính, GAs là một ý tưởng tốt. Ví dụ, nếu bạn đang thử nghiệm hình dạng cánh trong đường hầm không khí, thuật toán di truyền sẽ giúp bạn tạo ra các hình dạng ứng cử viên tốt để thử.
    • Ngoại lệ: Mô phỏng . Nếu chức năng tập thể dục của bạn đang đo lường thiết kế vòi phun hoạt động tốt như thế nào và yêu cầu mô phỏng động lực học chất lỏng cho từng hình dạng vòi phun, GA có thể hoạt động tốt cho bạn. Chúng cũng có thể hoạt động nếu bạn đang mô phỏng một hệ thống vật lý theo thời gian và quan tâm đến việc thiết kế của bạn hoạt động tốt như thế nào trong suốt quá trình hoạt động, vd. mô hình mô hình đầu máy . Tuy nhiên, các phương pháp sử dụng các phương trình vi phân từng phần làm các ràng buộc đang được phát triển trong tài liệu, ví dụ. Tối ưu hóa hạn chế PDE , vì vậy điều này có thể thay đổi trong tương lai.

Không phù hợp:

  • Bạn có thể tính toán độ dốc cho chức năng của mình: Nếu bạn có quyền truy cập vào độ dốc của chức năng, bạn có thể thực hiện giảm độ dốc, nói chung hiệu quả hơn nhiều so với GA. Giảm dần độ dốc có thể có vấn đề với cực tiểu cục bộ (cũng như GA) nhưng nhiều phương pháp đã được nghiên cứu để giảm thiểu điều này.
  • Bạn biết chức năng tập thể dục ở dạng đóng : Sau đó, bạn có thể tính toán độ dốc. Nhiều ngôn ngữ có thư viện hỗ trợ phân biệt tự động , do đó bạn thậm chí không cần phải làm thủ công. Nếu chức năng của bạn không khác biệt, thì bạn có thể sử dụng gốc hạ cấp .
  • Vấn đề tối ưu hóa của bạn thuộc dạng đã biết, như chương trình tuyến tính hoặc chương trình bậc hai : GA (và phương pháp tối ưu hóa hộp đen nói chung) rất kém hiệu quả về số lượng ứng cử viên cần đánh giá và tốt nhất nên tránh nếu có thể.
  • Không gian giải pháp của bạn nhỏ : Nếu bạn có thể tạo lưới cho không gian tìm kiếm của mình một cách hiệu quả, bạn có thể đảm bảo rằng bạn đã tìm thấy giải pháp tốt nhất và có thể tạo ra các đường viền của không gian giải pháp để xem liệu có khu vực nào bạn cần khám phá thêm không.

Cuối cùng, nếu bạn đang xem xét GA, hãy xem xét công việc gần đây hơn trong Chiến lược tiến hóa. Tôi thiên về CMA-ES , mà tôi nghĩ là một thuật toán đơn giản tốt để nắm bắt khái niệm về độ dốc trong bối cảnh thể dục theo cách mà GA truyền thống không làm được.


CMA-ES tốt cho các vấn đề trong đó các giải pháp có thể được biểu diễn dưới dạng các vectơ có giá trị thực.
NietzscheanAI

5

Theo quan sát trong một câu trả lời khác, tất cả những gì bạn cần để áp dụng Thuật toán di truyền (GAs) là thể hiện một giải pháp tiềm năng cho vấn đề của bạn dưới dạng có thể bị chéo và đột biến. Lý tưởng nhất là chức năng tập thể dục sẽ cung cấp một số loại phản hồi mượt mà về chất lượng của giải pháp, thay vì chỉ đơn giản là một 'Cây kim trong Haystack'.

Dưới đây là một số đặc điểm của các vấn đề mà Thuật toán di truyền (và thực sự là Metaheuristic nói chung) tốt cho:

  • NP-Complete - Số lượng các giải pháp có thể cho vấn đề là theo cấp số nhân, nhưng kiểm tra mức độ phù hợp của giải pháp là tương đối rẻ (về mặt kỹ thuật, với đa thức thời gian trong kích thước đầu vào).
  • Hộp đen - GA hoạt động tốt một cách hợp lý ngay cả khi bạn không có mô hình được thông báo đặc biệt về vấn đề cần giải quyết. Điều này có nghĩa là những cách tiếp cận này cũng hữu ích như một cách tiếp cận 'tạo mẫu nhanh' để giải quyết vấn đề.

Tuy nhiên, mặc dù mục đích sử dụng rộng rãi của chúng cho mục đích, lưu ý rằng GA thực sự không phải là tối ưu hóa chức năng - cơ chế GA có xu hướng không khám phá các vùng 'xa xôi' của không gian tìm kiếm với hy vọng tìm thấy một giải pháp chất lượng cao ở xa, mà là phân cụm xung quanh nhiều hơn dễ dàng đạt được đỉnh cao trong 'cảnh quan thể dục'.

Chi tiết hơn về khả năng ứng dụng của GA được đưa ra trong một bài báo sớm nổi tiếng "Điều gì gây khó khăn cho thuật toán di truyền?"

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.