2010-08-13 38 views
12

Điều gì đó khá khó chịu trong tính toán tiến hóa là các khái niệm khác nhau và chồng chéo nhẹ có xu hướng chọn các tên khác nhau đáng kể. Sự nhầm lẫn mới nhất của tôi vì điều này là lập trình biểu hiện gen có vẻ rất giống với lập trình di truyền học theo kiểu Descartes.Sự khác biệt giữa lập trình biểu hiện gen và lập trình di truyền học Descartes

  1. (như thế nào) Các khái niệm cơ bản này có khác nhau không?
  2. Tôi đã đọc mã hóa gián tiếp của hướng dẫn GP là một kỹ thuật hiệu quả (cả GEP và CGP làm điều đó). Đã đạt được một số loại đồng thuận rằng mã hóa gián tiếp đã lỗi thời GP căn cứ cây cổ điển?

Trả lời

7

Vâng, có vẻ như rằng có một số khác biệt giữa chương trình biểu hiện gen (GEP) và lập trình di truyền Descartes (CGP hoặc những gì tôi xem như lập trình cổ điển di truyền), nhưng sự khác biệt có thể được thổi phồng hơn lên so với nó thực sự nên được. Xin lưu ý rằng tôi chưa bao giờ sử dụng GEP, vì vậy tất cả các nhận xét của tôi dựa trên kinh nghiệm của tôi với CGP.

Trong CGP không có sự phân biệt giữa kiểu gen và kiểu hình, nói cách khác - nếu bạn đang xem "gen" của CGP, bạn cũng đang xem biểu thức của chúng. Không có mã hóa ở đây, tức là cây biểu hiện là chính gen.

Trong GEP kiểu gen được thể hiện thành kiểu hình, vì vậy nếu bạn đang xem các gen bạn sẽ không dễ dàng biết biểu thức sẽ trông như thế nào. Các "nhà phát minh" của GP, Cândida Ferreira, đã viết một really good paper và có một số other resources mà cố gắng để cung cấp cho một cái nhìn tổng quan ngắn hơn về toàn bộ khái niệm.

Ferriera nói rằng những lợi ích là "hiển nhiên", nhưng tôi thực sự không thấy bất kỳ điều gì có thể làm cho GEP tốt hơn CGP. Rõ ràng GEP là đa nguyên, có nghĩa là nhiều gen có liên quan đến sự biểu hiện của một đặc tính (tức là một cây biểu hiện). Trong mọi trường hợp, thể lực được tính toán trên cây thể hiện, vì vậy nó không có vẻ như GEP đang làm bất cứ điều gì để tăng cường thể lực. Điều mà tác giả cho rằng GEP tăng tốc độ tập thể dục (tức là ít thế hệ hơn), nhưng nói thẳng ra bạn có thể thấy sự thay đổi đáng kể từ CGP chỉ bằng thuật toán lựa chọn khác, cấu trúc giải đấu khác, tách dân số vào các bộ lạc, di cư mẫu vật giữa các bộ lạc, bao gồm đa dạng vào tập thể dục vv

Selection:

  • ngẫu nhiên
  • bánh xe roulette
  • top-n
  • mất nửa
  • , vv

Tournament Tần số:

  • một lần mỗi thời đại
  • một lần mỗi mỗi trường hợp dữ liệu
  • một lần mỗi thế hệ.

Tournament Cấu trúc:

  • Hãy 3, giết 1 và thay thế bằng các con của hai người kia.
  • Sắp xếp tất cả các cá nhân trong giải đấu bằng cách tập thể dục, tiêu diệt nửa dưới và thay thế bằng con của nửa trên (nơi thấp hơn thể lực kém hơn và phần trên là thể lực tốt hơn).
  • Chọn ngẫu nhiên các cá nhân từ giải đấu để giao phối và tiêu diệt các cá nhân thừa.

Tribes
Một dân số có thể được chia thành các bộ lạc mà phát triển một cách độc lập của mỗi khác:

  • Migration- định kỳ, cá nhân (s) từ một bộ lạc sẽ được chuyển đến một bộ lạc
  • Các bộ lạc được phân tách một cách hợp lý để chúng giống như quần thể riêng biệt của chúng chạy trong môi trường riêng biệt.

Đa dạng Thể
Kết hợp đa dạng vào tập thể dục, nơi bạn đếm có bao nhiêu cá nhân có giá trị tập thể dục cùng (do đó có thể có kiểu hình giống nhau) và bạn trừng phạt tập thể dục của họ bằng một giá trị tương ứng: các nhiều cá nhân có giá trị tập thể dục giống nhau, hình phạt hơn cho những cá nhân đó. Bằng cách này, các mẫu vật với kiểu hình độc đáo sẽ được khuyến khích, do đó sẽ có ít sự trì trệ của dân số.

Đó chỉ là một số thứ có thể ảnh hưởng lớn đến hiệu suất của CGP, và khi tôi nói nhiều, ý tôi là nó theo thứ tự hoặc lớn hơn hiệu suất của Ferriera. Vì vậy, nếu Ferriera không tin tưởng với những ý tưởng quá nhiều, thì cô ấy có thể đã thấy hiệu suất chậm hơn nhiều của CGP ... đặc biệt là nếu cô ấy không làm bất cứ điều gì để chống lại sự trì trệ. Vì vậy, tôi sẽ cẩn thận khi đọc thống kê hiệu suất trên GEP, bởi vì đôi khi mọi người không tính đến tất cả các "tối ưu hóa" có sẵn trên mạng.

+0

Rất cám ơn bạn đã trả lời chi tiết! Nhiều đánh giá cao. – Jelle

+0

Câu trả lời này không chính xác. Cartesian GP không giống GP cổ điển. Cartesian GP cũng có một biểu diễn gián tiếp (tương tự như GEP), và không phải là dựa trên cây, mặc dù bạn kết thúc việc xây dựng một biểu đồ tương tự như một cây GP cổ điển. – rll

2

Nói chung, GEP đơn giản hơn từ GP. Giả sử bạn cho phép các nút sau trong chương trình của bạn: hằng số, biến, +, -, *, /, if, ... Đối với mỗi nút như vậy với GP, bạn phải tạo các hoạt động sau: - ngẫu nhiên - biến đổi - chéo - và có lẽ các nhà khai thác di truyền khác cũng là

Trong GEP cho mỗi nút như vậy, chỉ cần thực hiện một thao tác: deserialize, lấy mảng số (như gấp đôi trong C hoặc Java) và trả về nút. Nó tương tự như deserialization đối tượng trong các ngôn ngữ như Java hay Python (sự khác biệt là deserialization trong ngôn ngữ lập trình sử dụng mảng byte, nơi ở đây chúng tôi có mảng số). Thậm chí hoạt động 'deserialize' này không cần phải được thực hiện bởi lập trình viên: nó có thể được thực hiện bởi một thuật toán chung, giống như nó được thực hiện trong Java hoặc Python deserialization. Điều này đơn giản từ một quan điểm có thể làm cho việc tìm kiếm giải pháp tốt nhất ít thành công hơn, nhưng từ phía bên kia: đòi hỏi ít công việc hơn từ lập trình và các thuật toán đơn giản hơn có thể thực thi nhanh hơn (dễ dàng hơn để tối ưu hóa, mã và dữ liệu phù hợp hơn trong CPU cache). và vân vân). Vì vậy, tôi sẽ nói rằng GEP là tốt hơn một chút, nhưng tất nhiên câu trả lời rõ ràng phụ thuộc vào vấn đề, và đối với nhiều vấn đề ngược lại có thể đúng.

+0

cảm ơn iirekm, rất sâu sắc! – Jelle

2

Dường như có một số nhầm lẫn trong các câu trả lời này phải được làm rõ. Cartesian GP khác với GP cổ điển (còn gọi là GP dựa trên cây) và GEP. Mặc dù họ chia sẻ nhiều khái niệm và lấy cảm hứng từ cùng một cơ chế sinh học, nhưng sự đại diện của các cá nhân (các giải pháp) thay đổi.

Trong biểu đồ CGP (ánh xạ giữa kiểu gen và kiểu hình) là gián tiếp, nói cách khác, không phải tất cả các gen trong hệ gen CGP sẽ được thể hiện trong phenome (một khái niệm cũng được tìm thấy trong GEP và nhiều khái niệm khác). Các kiểu gen có thể được mã hóa trong một mạng lưới hoặc một mảng các nút và biểu đồ chương trình kết quả là biểu thức của các nút đang hoạt động mà thôi.

Trong biểu trưng GEP cũng là gián tiếp và tương tự không phải tất cả các gen sẽ được thể hiện trong kiểu hình. Các đại diện trong trường hợp này là rất khác nhau từ treeGP hoặc CGP, nhưng kiểu gen cũng được thể hiện thành một cây chương trình. Theo ý kiến ​​của tôi, GEP là một biểu diễn thanh lịch, dễ thực hiện hơn, nhưng cũng bị một số lỗi như: bạn phải tìm ra đuôi và kích thước đầu thích hợp, vấn đề cụ thể, phiên bản mnltigenic là một chút keo buộc giữa các cây biểu hiện và cuối cùng nó có quá nhiều bloat.

Độc lập đại diện có thể tốt hơn so với khác trong một số miền vấn đề cụ thể, chúng là mục đích chung, có thể được áp dụng cho bất kỳ tên miền nào miễn là bạn có thể mã hóa nó.

Các vấn đề liên quan