Các ví dụ tốt về các thuật toán di truyền / giải pháp lập trình di truyền là gì? [đóng cửa]


227

Các thuật toán di truyền (GA) và lập trình di truyền (GP) là các lĩnh vực nghiên cứu thú vị.

Tôi muốn biết về các vấn đề cụ thể mà bạn đã giải quyết bằng GA / GP và thư viện / khung công tác nào bạn đã sử dụng nếu bạn không tự khắc phục.

Câu hỏi:

  • Những vấn đề bạn đã sử dụng GA / GP để giải quyết?
  • Những thư viện / khung nào bạn đã sử dụng?

Tôi đang tìm kiếm trải nghiệm trực tiếp, vì vậy xin vui lòng không trả lời trừ khi bạn có điều đó.


28
@Jason: Cảm ơn bạn đã gợi ý điều đó của Google. Mặc dù nó có vẻ hơi hữu ích nhưng tôi không biết làm thế nào nó có thể trả lời câu hỏi này vì nó đặc biệt giải quyết những người dùng SO có kinh nghiệm GA / GP.
knorv


13
"Chúng tôi hy vọng câu trả lời sẽ được hỗ trợ bởi ... chuyên môn cụ thể ...." Kiểm tra! "[T] câu hỏi của anh ấy có thể sẽ thu hút tranh luận, tranh luận, bỏ phiếu hoặc thảo luận mở rộng." Sai. Có nhiều câu trả lời, nhưng đó không phải là một cuộc thăm dò ý kiến ​​và không có nhiều bình luận hay tranh luận trong các bình luận. Tại sao điều này đã bị đóng cửa?
Adrian McCarthy

Chương trình Eureqa rất tốt cho lập trình di truyền: nutonia.com/products/eureqa
Simon

Câu trả lời:


146

Không phải bài tập về nhà.

Công việc đầu tiên của tôi là một lập trình viên chuyên nghiệp (1995) là viết một hệ thống giao dịch tự động dựa trên thuật toán di truyền cho tương lai S & P500. Ứng dụng này được viết trong Visual Basic 3 [!] Và tôi không biết làm thế nào tôi đã làm bất cứ điều gì trước đó, vì VB3 thậm chí không có lớp.

Ứng dụng bắt đầu với một chuỗi các chuỗi có độ dài cố định được tạo ngẫu nhiên (phần "gen"), mỗi chuỗi tương ứng với một hình dạng cụ thể trong dữ liệu giá từng phút của tương lai S & P500, cũng như một thứ tự cụ thể (mua hoặc bán) và số tiền dừng lỗ và dừng lãi. Mỗi chuỗi (hoặc "gen") có hiệu suất lợi nhuận được đánh giá qua 3 năm dữ liệu lịch sử; Bất cứ khi nào "hình dạng" được chỉ định khớp với dữ liệu lịch sử, tôi giả định lệnh mua hoặc bán tương ứng và đánh giá kết quả giao dịch. Tôi đã thêm lời cảnh báo rằng mỗi gen bắt đầu với một lượng tiền cố định và do đó có thể bị phá vỡ và bị loại bỏ hoàn toàn khỏi nhóm gen.

Sau mỗi lần đánh giá quần thể, những người sống sót được lai tạo ngẫu nhiên (chỉ bằng cách trộn các bit từ hai bố mẹ), với khả năng gen được chọn là bố mẹ tỷ lệ thuận với lợi nhuận mà nó tạo ra. Tôi cũng đã thêm khả năng đột biến điểm để gia vị mọi thứ lên một chút. Sau vài trăm thế hệ này, tôi đã kết thúc với một quần thể gen có thể biến 5000 đô la thành trung bình khoảng 10000 đô la mà không có cơ hội tử vong / thất bại (tất nhiên là trên dữ liệu lịch sử).

Thật không may, tôi không bao giờ có cơ hội sử dụng hệ thống này trực tiếp, vì ông chủ của tôi đã mất gần 100.000 đô la trong chưa đầy 3 tháng giao dịch theo cách truyền thống, và ông đã mất sẵn sàng tiếp tục với dự án. Nhìn lại, tôi nghĩ hệ thống sẽ thu được lợi nhuận khổng lồ - không phải vì tôi nhất thiết phải làm bất cứ điều gì đúng, mà bởi vì dân số gen mà tôi tạo ra đã thiên về đơn đặt hàng (trái ngược với đơn đặt hàng bán) khoảng 5: 1 tỷ lệ. Và như chúng ta đã biết với nhận thức 20/20 của mình, thị trường đã tăng lên một chút sau năm 1995.


9
"Tôi nghĩ hệ thống sẽ thu được lợi nhuận khổng lồ" - vâng tôi cá là nó hoạt động hoàn hảo trong môi trường kiểm tra ngược ;-)
Joel

30
@Joel: tất nhiên là có, nhưng đó không phải là lý do tại sao tôi nghĩ rằng nó sẽ có lãi. Nó sẽ kiếm được tiền vì sự thiên vị nặng nề đối với việc mua thay vì bán. Một hệ thống chỉ mua S & P500 tương lai vào các thời điểm ngẫu nhiên giữa năm 1995 và 1999 (không có bất kỳ loại GA vô nghĩa nào đang diễn ra) sẽ kiếm được rất nhiều tiền, nhưng chúng ta chỉ biết điều này khi nhìn lại.
MusiGenesis

10
Joel có lẽ đã đề cập đến "quá mức".
Eric Normand

10
Bạn cần phải dành một chút dữ liệu lịch sử của mình để thử nghiệm. Tốt nhất để làm xác nhận chéo.
Eric Normand

Bạn có ý nghĩa gì bởi "hình dạng" trong each of which corresponded to a specific shape in the minute-by-minute price data?
CodyBugstein

89

Tôi đã tạo ra một sinh vật nhỏ sống trong thế giới nhỏ bé này. Họ có một bộ não mạng thần kinh nhận được một số đầu vào từ thế giới và đầu ra là một véc tơ cho sự di chuyển giữa các hành động khác. Bộ não của họ là "gen".

Chương trình bắt đầu với một quần thể sinh vật ngẫu nhiên có bộ não ngẫu nhiên. Các nơ ron đầu vào và đầu ra là tĩnh nhưng những gì ở giữa thì không.

Môi trường chứa thức ăn và nguy hiểm. Thực phẩm tăng năng lượng và khi bạn có đủ năng lượng, bạn có thể giao phối. Những nguy hiểm sẽ làm giảm năng lượng và nếu năng lượng bằng 0, họ đã chết.

Cuối cùng, các sinh vật tiến hóa để di chuyển khắp thế giới và tìm thức ăn và tránh những nguy hiểm.

Sau đó tôi quyết định làm một thí nghiệm nhỏ. Tôi đã cho bộ não sinh vật một tế bào thần kinh đầu ra gọi là "miệng" và một tế bào thần kinh đầu vào gọi là "tai". Bắt đầu lại và rất ngạc nhiên khi thấy rằng chúng tiến hóa để tối đa hóa không gian và mỗi sinh vật tương ứng sẽ ở trong phần tương ứng của nó (thức ăn được đặt ngẫu nhiên). Họ học cách hợp tác với nhau và không hòa hợp với nhau. Luôn có những ngoại lệ.

Sau đó, tôi đã thử một cái gì đó thú vị. Tôi sinh vật chết sẽ trở thành thực phẩm. Hãy thử đoán xem chuyện gì đã xảy ra! Hai loại sinh vật tiến hóa, một loại tấn công như trong bầy đàn, và loại có khả năng tránh cao.

Vậy bài học ở đây là gì? Truyền thông có nghĩa là hợp tác. Ngay khi bạn giới thiệu một yếu tố làm tổn thương người khác có nghĩa là bạn có được thứ gì đó, thì sự hợp tác bị phá hủy.

Tôi tự hỏi làm thế nào điều này phản ánh trên hệ thống thị trường tự do và chủ nghĩa tư bản. Ý tôi là, nếu các doanh nghiệp có thể làm tổn thương đối thủ cạnh tranh và thoát khỏi nó , thì rõ ràng họ sẽ làm mọi thứ trong khả năng của mình để làm tổn thương đối thủ.

Biên tập:

Tôi đã viết nó trong C ++ bằng cách sử dụng không có khung. Đã viết mạng lưới thần kinh và mã GA của riêng tôi. Eric, cảm ơn bạn đã nói rằng nó là hợp lý. Mọi người thường không tin vào sức mạnh của GA (mặc dù những hạn chế là rõ ràng) cho đến khi họ chơi với nó. GA là đơn giản nhưng không đơn giản.

Đối với những người nghi ngờ, mạng lưới thần kinh đã được chứng minh là có thể mô phỏng bất kỳ chức năng nào nếu chúng có nhiều hơn một lớp. GA là một cách khá đơn giản để điều hướng một không gian giải pháp tìm tối thiểu cục bộ và tiềm năng toàn cầu. Kết hợp GA với mạng lưới thần kinh và bạn có một cách khá tốt để tìm các hàm tìm giải pháp gần đúng cho các vấn đề chung. Bởi vì chúng tôi đang sử dụng mạng lưới thần kinh, sau đó chúng tôi đang tối ưu hóa chức năng cho một số đầu vào chứ không phải một số đầu vào cho một chức năng như những người khác đang sử dụng GA

Dưới đây là mã trình diễn cho ví dụ sinh tồn: http://www.mempko.com/darcs/neural/demos/oons/ Hướng dẫn xây dựng:

  • Cài đặt darcs, libboost, liballegro, gcc, cmake, thực hiện
  • darcs clone --lazy http://www.mempko.com/darcs/neural/
  • cd neural
  • cmake .
  • make
  • cd demos/eaters
  • ./eaters

Ảnh chụp màn hình của người ăn


10
Và giải thưởng Turing của bạn đi đâu với câu chuyện này? Bạn phải có một số tiến bộ điên rồ trong khoa học để có một thử nghiệm như vậy thậm chí chạy trên bất cứ thứ gì trừ RoadRunner.
San Jacinto

1
Đồng ý với Eric. Bạn có thể viết một NN đơn giản trong vòng một giờ (và trên thực tế, tôi đã thực hiện, trong một bài kiểm tra) và GA cơ bản không nhất thiết phải quá một hoặc hai ngày làm việc. Đây là một thuật toán A-Life hơn là một thuật toán di truyền nhưng chúng ta vẫn đang nói những thứ rất đơn giản và khả thi ở đây.
Kylotan

2
Đây không phải là giả trong một chút ... Mùa hè sau năm thứ nhất, tôi đã thực hiện một dự án cho những trò vui rất giống với điều này bằng XNA trong C #, trừ mạng lưới thần kinh, sử dụng GA và một quần thể sinh vật với vô số đặc điểm khác nhau . Chẳng hạn, một gen kiểm soát tầm nhìn của họ - cao hơn có nghĩa là tầm nhìn xa hơn, thấp hơn có nghĩa là bán kính tầm nhìn rộng hơn. Chướng ngại vật và thức ăn sẽ được đặt ngẫu nhiên, và các sinh vật sẽ bổ sung năng lượng bằng cách ăn thức ăn. Các đặc điểm sẽ biến đổi bằng cách thêm các số Gaussian được tạo ngẫu nhiên vào chúng, dẫn đến các gen được phân phối bình thường như trong quá trình tiến hóa thực tế.
Philip Guin

2
Tôi làm việc trong một nhóm nghiên cứu trong đó loại điều này (ALife) là những gì mọi người đã làm hàng ngày. Câu chuyện của bạn là hoàn toàn đáng tin, và thành thật mà nói tôi đã hơi sốc khi thấy rằng bất cứ ai sẽ nghĩ đó là một giả mạo. Sau đó, một lần nữa, thông thường, quan điểm của việc thực hiện chúng là chỉ ra rằng hành vi phức tạp có thể phát sinh từ các hệ thống rất đơn giản - tôi đoán rằng điểm này đã không được thực hiện đủ tốt.
Lucas

1
Tôi tìm thấy một số bằng chứng trong trang web của anh ấy: www.mempko.com/darcs/neural Anh ấy nói rằng "Tôi đã cung cấp một ví dụ gọn gàng về những người đàn ông nhỏ bé trong một thế giới nhỏ bé, tiến hóa để sinh tồn." Dưới đây là mã ví dụ: mempko.com/darcs/neural/demos/oons
guerda 22/07/14

51

Vào tháng 1 năm 2004, tôi đã liên lạc với Philips New Display Technologies, người đang tạo ra thiết bị điện tử cho loại mực điện tử thương mại đầu tiên, Sony Librie, người mới chỉ được phát hành tại Nhật Bản, nhiều năm trước khi Amazon Kindle và các hãng khác tung ra thị trường ở Mỹ một châu Âu.

Các kỹ sư của Philips đã có một vấn đề lớn. Một vài tháng trước khi sản phẩm được cho là tung ra thị trường, họ vẫn bị bóng mờ trên màn hình khi thay đổi trang. Vấn đề là 200 trình điều khiển đã tạo ra trường tĩnh điện. Mỗi trình điều khiển này có một điện áp nhất định phải được đặt đúng giữa 0 và 1000 mV hoặc đại loại như thế này. Nhưng nếu bạn thay đổi một trong số họ, nó sẽ thay đổi mọi thứ.

Vì vậy, tối ưu hóa điện áp của từng trình điều khiển riêng lẻ là không cần thiết. Số lượng kết hợp các giá trị có thể là hàng tỷ và mất khoảng 1 phút để một camera đặc biệt đánh giá một kết hợp duy nhất. Các kỹ sư đã thử nhiều kỹ thuật tối ưu hóa tiêu chuẩn, nhưng không có gì có thể đến gần.

Kỹ sư trưởng đã liên lạc với tôi vì trước đây tôi đã phát hành thư viện Lập trình di truyền cho cộng đồng nguồn mở. Anh ấy hỏi liệu GP / GA có giúp được gì không và liệu tôi có thể tham gia không. Tôi đã làm, và trong khoảng một tháng chúng tôi làm việc cùng nhau, tôi viết và điều chỉnh thư viện GA, trên dữ liệu tổng hợp và anh ấy tích hợp nó vào hệ thống của họ. Sau đó, một ngày cuối tuần họ để nó chạy trực tiếp với đồ thật.

Thứ hai sau tôi nhận được những email phát sáng này từ anh ấy và nhà thiết kế phần cứng của họ, về việc làm thế nào không ai có thể tin vào kết quả tuyệt vời mà GA tìm thấy. Đây chính là nó. Cuối năm đó sản phẩm tung ra thị trường.

Tôi đã không được trả một xu cho nó, nhưng tôi có quyền 'khoe khoang'. Họ nói ngay từ đầu họ đã vượt quá ngân sách, vì vậy tôi biết thỏa thuận là gì trước khi tôi bắt đầu làm việc với nó. Và đó là một câu chuyện tuyệt vời cho các ứng dụng của GA. :)


23
Điều "vượt quá ngân sách" là điện thoại. Tất nhiên họ có tiền để trả cho bạn nhưng họ đã chọn không. Điều đó thực sự hấp dẫn và cho thấy làm thế nào doanh nghiệp lớn có thể tận dụng các lập trình viên tốt đẹp.
Martin Capodici

50

Tôi đã sử dụng GA để tối ưu hóa bài tập chỗ ngồi trong tiệc cưới của mình. 80 khách trên 10 bàn. Chức năng đánh giá được dựa trên việc giữ mọi người với các cuộc hẹn hò của họ, đặt mọi người với một điểm chung và giữ mọi người có quan điểm trái ngược nhau ở các bảng riêng biệt.

Tôi đã chạy nó nhiều lần. Mỗi lần, tôi có chín bàn tốt, và một bàn có tất cả các quả bóng lẻ. Cuối cùng, vợ tôi đã làm bài tập chỗ ngồi.

Trình tối ưu hóa nhân viên bán hàng du lịch của tôi đã sử dụng một bản đồ mới về nhiễm sắc thể cho hành trình, điều này khiến cho việc nhân giống và biến đổi nhiễm sắc thể mà không có bất kỳ rủi ro nào tạo ra các chuyến tham quan không hợp lệ.

Cập nhật : Bởi vì một vài người đã hỏi làm thế nào ...

Bắt đầu với một loạt khách (hoặc thành phố) theo một số thứ tự tùy ý nhưng nhất quán, ví dụ, được sắp xếp theo thứ tự chữ cái. Gọi đây là giải pháp tham khảo. Hãy nghĩ về một chỉ số khách là số ghế của anh ấy / cô ấy.

Thay vì cố gắng mã hóa thứ tự này trực tiếp trong nhiễm sắc thể, chúng tôi mã hóa các hướng dẫn để chuyển đổi giải pháp tham chiếu thành một giải pháp mới. Cụ thể, chúng tôi coi các nhiễm sắc thể là danh sách các chỉ mục trong mảng để trao đổi. Để có được giải mã một nhiễm sắc thể, chúng tôi bắt đầu với giải pháp tham chiếu và áp dụng tất cả các hoán đổi được chỉ định bởi nhiễm sắc thể. Hoán đổi hai mục trong mảng luôn dẫn đến một giải pháp hợp lệ: mỗi khách (hoặc thành phố) vẫn xuất hiện chính xác một lần.

Do đó, nhiễm sắc thể có thể được tạo ngẫu nhiên, đột biến và lai với những người khác và sẽ luôn tạo ra một giải pháp hợp lệ.


và bản đồ tiểu thuyết đó là gì?
Manuel Aráoz

4
@Manuel: Thay vì mã hóa chuyến tham quan trực tiếp trong "nhiễm sắc thể", tôi đã mã hóa một biến đổi để biến một chuyến tham quan thành một giải pháp. Các biến đổi chỉ là hoán đổi giữa các thành phố trong chỉ mục. Vì vậy, chúng có thể được kết hợp lại theo bất kỳ cách cũ nào và vẫn luôn tạo ra một chuyến tham quan đến mọi thành phố chính xác một lần.
Adrian McCarthy

Cảm ơn! Tôi chỉ hơi bối rối với khía cạnh hoán đổi. Mỗi nhiễm sắc thể mã hóa một danh sách các chỉ số để hoán đổi - không có nghĩa là một chỉ mục có thể xuất hiện nhiều lần trong nhiễm sắc thể?
dùng4959612

1
Chomosome có các chỉ số c1, c2, c3, ..., cn. "Giải pháp" là mảng a. Khởi tạo một với danh sách tham khảo của bạn. Sau đó, đối với mỗi cặp chỉ số trong nhiễm sắc thể, hoán đổi hai yếu tố trong dung dịch ( temp = a[c1]; a[c1] = a[c2]; a[c2] = temp). Sẽ không có vấn đề gì nếu hai chỉ mục giống hệt nhau, bởi vì một vẫn sẽ chứa mỗi khách (hoặc thành phố) chính xác một lần.
Adrian McCarthy

33

Tôi đã sử dụng các thuật toán di truyền (cũng như một số kỹ thuật liên quan) để xác định các cài đặt tốt nhất cho hệ thống quản lý rủi ro cố gắng ngăn nông dân vàng sử dụng thẻ tín dụng bị đánh cắp để thanh toán cho MMO. Hệ thống sẽ thực hiện vài nghìn giao dịch với các giá trị "đã biết" (lừa đảo hay không) và tìm ra sự kết hợp tốt nhất của cài đặt là xác định đúng các giao dịch gian lận mà không có quá nhiều thông tin sai.

Chúng tôi đã có dữ liệu về vài chục đặc điểm (boolean) của một giao dịch, mỗi đặc điểm được đưa ra một giá trị và tổng cộng. Nếu tổng số cao hơn ngưỡng, giao dịch là gian lận. GA sẽ tạo ra một số lượng lớn các giá trị ngẫu nhiên, đánh giá chúng dựa trên khối dữ liệu đã biết, chọn những dữ liệu đạt điểm cao nhất (trên cả phát hiện gian lận và hạn chế số lượng dương tính giả), sau đó lai tạo một vài giá trị tốt nhất từ mỗi thế hệ để tạo ra một thế hệ ứng cử viên mới. Sau một số thế hệ nhất định, bộ giá trị ghi điểm tốt nhất được coi là người chiến thắng.

Tạo ra kho dữ liệu đã biết để kiểm tra là gót chân của hệ thống. Nếu bạn chờ đợi các khoản bồi hoàn, bạn đã chậm vài tháng khi cố gắng trả lời những kẻ lừa đảo, vì vậy ai đó sẽ phải xem xét thủ công số lượng lớn giao dịch để xây dựng kho dữ liệu đó mà không phải chờ quá lâu.

Điều này cuối cùng đã xác định được phần lớn các vụ lừa đảo xảy ra, nhưng không thể đạt được dưới 1% cho các mặt hàng dễ bị lừa đảo nhất (vì 90% giao dịch đến có thể là lừa đảo, hoạt động khá tốt).

Tôi đã làm tất cả điều này bằng cách sử dụng perl. Một lần chạy phần mềm trên một hộp linux khá cũ sẽ mất 1-2 giờ để chạy (20 phút để tải dữ liệu qua liên kết WAN, thời gian còn lại dành cho việc bẻ khóa). Kích thước của bất kỳ thế hệ nhất định nào bị giới hạn bởi RAM có sẵn. Tôi sẽ chạy đi chạy lại với những thay đổi nhỏ về các tham số, tìm kiếm một tập kết quả đặc biệt tốt.

Nói chung, nó đã tránh được một số lỗ hổng đi kèm với việc cố gắng điều chỉnh thủ công các giá trị tương đối của hàng tá chỉ số gian lận và liên tục đưa ra các giải pháp tốt hơn tôi có thể tạo bằng tay. AFAIK, nó vẫn được sử dụng (khoảng 3 năm sau khi tôi viết nó).


Tôi nghĩ rằng bạn có thể đã sử dụng một mạng lưới thần kinh để thực hiện điều chỉnh tham số (mặc dù sẽ mất nhiều thời gian hơn để có hiệu quả hơn so với thực hiện bằng tay).
alexpinho98

21

Tiền boa bóng đá. Tôi đã xây dựng một hệ thống GA để dự đoán kết quả của các trận đấu trong tuần tới AFL (Aussie Rules Football).

Vài năm trước tôi đã chán ngán với bể bóng đá công việc tiêu chuẩn, mọi người chỉ lên mạng và lấy những tờ thông tin từ một số chuyên gia trên báo chí. Vì vậy, tôi cho rằng không thể quá khó để đánh bại một loạt các chuyên ngành báo chí phát sóng, phải không? Suy nghĩ đầu tiên của tôi là lấy kết quả từ Massey Xếp hạng và sau đó tiết lộ vào cuối mùa chiến lược của tôi sau khi giành được danh tiếng và vinh quang. Tuy nhiên, vì những lý do tôi chưa bao giờ phát hiện ra Massey không theo dõi AFL. Sự hoài nghi trong tôi tin rằng đó là vì kết quả của mỗi trò chơi AFL về cơ bản đã trở thành cơ hội ngẫu nhiên, nhưng những phàn nàn của tôi về những thay đổi quy tắc gần đây thuộc về một diễn đàn khác.

Về cơ bản, hệ thống được coi là sức mạnh tấn công, sức mạnh phòng thủ, lợi thế sân nhà, cải thiện từ tuần này sang tuần khác (hoặc thiếu nó) và vận tốc thay đổi đối với từng điều này. Điều này tạo ra một bộ phương trình đa thức cho mỗi đội trong mùa giải. Người chiến thắng và điểm số cho mỗi trận đấu cho một ngày nhất định có thể được tính toán. Mục tiêu là tìm ra tập hợp các hệ số phù hợp nhất với kết quả của tất cả các trò chơi trong quá khứ và sử dụng tập hợp đó để dự đoán trò chơi tuần sắp tới.

Trong thực tế, hệ thống sẽ tìm ra các giải pháp dự đoán chính xác hơn 90% kết quả trò chơi trong quá khứ. Sau đó, nó sẽ chọn thành công khoảng 60-80% số trò chơi cho tuần sắp tới (đó là tuần không có trong tập huấn luyện).

Kết quả: ngay phía trên của gói. Không có giải thưởng tiền mặt lớn cũng như một hệ thống mà tôi có thể sử dụng để đánh bại Vegas. Đó là niềm vui mặc dù.

Tôi xây dựng mọi thứ từ đầu, không sử dụng khung.


21

Cũng như một số vấn đề phổ biến, như Nhân viên bán hàng du lịch và một biến thể trong chương trình Mona Lisa của Roger Alsing , tôi cũng đã viết một trình giải Sudoku tiến hóa (đòi hỏi một chút suy nghĩ ban đầu về phía tôi, thay vì chỉ thực hiện lại ý tưởng của ai đó). Có nhiều thuật toán đáng tin cậy hơn để giải Sudokus nhưng phương pháp tiến hóa hoạt động khá tốt.

Trong vài ngày qua, tôi đã chơi xung quanh với một chương trình tiến hóa để tìm "sàn lạnh" cho bài xì phé sau khi xem bài viết này trên Reddit. Nó không hoàn toàn thỏa đáng vào lúc này nhưng tôi nghĩ tôi có thể cải thiện nó.

Tôi có khuôn khổ riêng mà tôi sử dụng cho các thuật toán tiến hóa.


17

Tôi đã phát triển GA pha tại nhà cho hệ thống hồ sơ bề mặt laser 3D mà công ty của tôi đã phát triển cho ngành vận tải hàng hóa vào năm 1992. Hệ thống này dựa trên hình tam giác 3 chiều và sử dụng máy quét laze tùy chỉnh, máy ảnh 512x512 (với hw chụp tùy chỉnh). Khoảng cách giữa máy ảnh và laser sẽ không bao giờ chính xác và tiêu điểm của máy ảnh không được tìm thấy ở vị trí 256.256 mà bạn mong đợi!

Đó là một cơn ác mộng khi thử và tìm ra các tham số hiệu chuẩn bằng cách sử dụng hình học tiêu chuẩn và mô phỏng giải phương trình kiểu ủ.

Thuật toán di truyền đã bị đánh bại trong một buổi tối và tôi đã tạo ra một khối hiệu chuẩn để kiểm tra nó. Tôi biết kích thước khối đến độ chính xác cao và do đó, ý tưởng là GA của tôi có thể phát triển một tập hợp các tham số tam giác tùy chỉnh cho mỗi đơn vị quét sẽ vượt qua các biến thể sản xuất.

Các mẹo làm việc một điều trị. Tôi đã lúng túng để nói rằng ít nhất! Trong khoảng 10 thế hệ, khối 'ảo' của tôi (được tạo từ quá trình quét thô và được tạo lại từ các tham số hiệu chuẩn) thực sự trông giống như một khối! Sau khoảng 50 thế hệ tôi đã có sự hiệu chuẩn mà tôi cần.


11

Thường rất khó để có được sự kết hợp màu sắc chính xác khi bạn dự định sơn nhà. Thông thường, bạn có một số màu trong tâm trí, nhưng nó không phải là một trong những màu, nhà cung cấp cho bạn thấy.

Hôm qua, giáo sư của tôi là một nhà nghiên cứu GA đã đề cập về một câu chuyện có thật ở Đức (xin lỗi, tôi không có tài liệu tham khảo nào nữa, vâng, tôi có thể tìm hiểu nếu có ai yêu cầu). Anh chàng này (hãy gọi anh ta là anh chàng da màu ) đã từng đi từ cửa ra vào để giúp mọi người tìm mã màu chính xác (trong RGB ) sẽ là tủ quần áo cho những gì khách hàng nghĩ đến. Đây là cách anh ấy sẽ làm điều đó:

Anh chàng da màu thường mang theo bên mình một chương trình phần mềm sử dụng GA. Anh thường bắt đầu với 4 màu khác nhau - mỗi màu được mã hóa thành nhiễm sắc thể được mã hóa (có giá trị được giải mã sẽ là giá trị RGB). Người tiêu dùng chọn 1 trong 4 màu (Đây là màu gần nhất mà anh ấy / cô ấy có trong tâm trí). Chương trình sau đó sẽ chỉ định mức độ tập thể dục tối đa cho cá nhân đó và chuyển sang thế hệ tiếp theo bằng cách sử dụng đột biến / chéo . Các bước trên sẽ được lặp lại cho đến khi người tiêu dùng đã tìm thấy màu chính xác và sau đó anh chàng màu được sử dụng để nói với anh ta về sự kết hợp RGB!

Bằng cách chỉ định mức độ tập thể dục tối đa cho màu sắc gần với những gì người tiêu dùng nghĩ đến, chương trình của anh chàng màu sắc đang tăng cơ hội hội tụ màu sắc, người tiêu dùng có suy nghĩ chính xác. Tôi thấy nó khá vui!

Bây giờ tôi đã có -1, nếu bạn đang có kế hoạch cho nhiều -1, xin vui lòng. làm sáng tỏ lý do để làm như vậy!


6
Tôi sẽ không đánh giá thấp bạn, nhưng tôi đoán rằng đó là vì bạn đã không tự làm điều đó. OP đặc biệt yêu cầu những thứ mà bạn đã tự làm.
jprete

Đây là khá nhiều phiên bản đơn giản của hình dạng sinh học của Richard Dawkins.
Nick Johnson

1
Điều thú vị về màu sắc là bạn không thể tự mình xem xét nó. Chuyên gia tư vấn màu sắc không bật lên chỉ với một màu - họ đến trong bảng màu và sơ đồ. Không có điểm nào chỉ chọn một màu trên chính nó. Tôi đã không downvote nhưng câu trả lời của bạn đang kéo dài định nghĩa về GA. Làm thế nào để bạn đột biến / chéo một màu? Đây thực sự là một minh chứng cho việc lặp đi lặp lại thu hẹp một bộ dữ liệu hạn chế.
Kirk Broadhurst

2
Điều này có thể giải thích các downvote: điều này có vẻ giống như trả tiền trên đồi, không phải GA.
Eric Normand

8

Một vài tuần trước, tôi đã đề xuất một giải pháp về SO bằng thuật toán di truyền để giải quyết vấn đề bố cục đồ thị. Đây là một ví dụ về một vấn đề tối ưu hóa bị ràng buộc.

Cũng trong lĩnh vực học máy, tôi đã triển khai khung quy tắc phân loại dựa trên GA trong c / c ++ từ đầu.
Tôi cũng đã sử dụng GA trong một dự án mẫu để đào tạo mạng nơ ron nhân tạo (ANN) thay vì sử dụng thuật toán truyền bá ngược nổi tiếng .

Ngoài ra, và là một phần trong nghiên cứu sau đại học của tôi, tôi đã sử dụng GA trong việc đào tạo Mô hình Markov ẩn như một cách tiếp cận bổ sung cho thuật toán Baum-Welch dựa trên EM (một lần nữa trong c / c ++).


Xin chào Amro. Bạn đã thực hiện một so sánh đầy đủ giữa các kết quả thu được với backprop và GA? Nếu vậy, bạn có thể chia sẻ kết quả so sánh với chúng tôi? Làm thế nào bạn thực hiện bước chéo cho hai NN?
lmsasu

@lmsasu: không có gì lạ mắt: mỗi chuỗi hoặc nhiễm sắc thể trong quần thể đại diện cho các giá trị trọng lượng và sai lệch của mạng và sử dụng toán tử chéo 1 hoặc 2 điểm đơn giản. Từ những gì tôi nhớ lại, phải mất một thời gian dài để mạng đào tạo bằng GA. Việc triển khai của tôi là một bằng chứng về khái niệm hơn bất kỳ điều gì khác (xem ở đây để biết ví dụ về đồ chơi kiểm soát máy quét mìn ảo) ... Dù sao cũng nên có rất nhiều bài báo thảo luận về việc sử dụng GA để không chỉ học về trọng lượng, mà còn phát triển cấu trúc mạng.
Amro

8

Là một phần của văn bằng CompSci đại học của tôi, chúng tôi đã được chỉ định vấn đề tìm cờ jvm tối ưu cho máy ảo nghiên cứu Jike. Điều này đã được đánh giá bằng cách sử dụng bộ điểm chuẩn Dicappo trả về thời gian cho bàn điều khiển. Tôi đã viết một alogirthm phân tán đã chuyển các cờ này để cải thiện thời gian chạy của bộ chuẩn, mặc dù phải mất nhiều ngày để chạy để bù cho jitter phần cứng ảnh hưởng đến kết quả. Vấn đề duy nhất là tôi đã không tìm hiểu đúng về lý thuyết trình biên dịch (đó là mục đích của bài tập).

Tôi có thể đã tạo ra dân số ban đầu bằng các cờ mặc định hiện có, nhưng điều thú vị là thuật toán tìm thấy một cấu hình rất giống với mức tối ưu hóa O3 (nhưng thực sự nhanh hơn trong nhiều thử nghiệm).

Chỉnh sửa: Ngoài ra tôi đã viết khung thuật toán di truyền của riêng mình bằng Python cho bài tập và chỉ sử dụng các lệnh popen để chạy các điểm chuẩn khác nhau, mặc dù nếu đó không phải là bài tập được đánh giá, tôi sẽ xem xét pyEvolve.


7

Trước hết, "Lập trình di truyền" của Jonathan Koza ( trên amazon ) có khá nhiều cuốn sách về các kỹ thuật lập trình / thuật toán tiến hóa và tiến hóa, với nhiều ví dụ. Tôi rất đề nghị kiểm tra nó ra.

Đối với việc sử dụng thuật toán di truyền của riêng tôi, tôi đã sử dụng thuật toán di truyền (trồng tại nhà) để phát triển thuật toán bầy đàn cho kịch bản thu thập / phá hủy đối tượng (mục đích thực tế có thể đã được dọn sạch một bãi mìn). Đây là một liên kết đến bài báo . Phần thú vị nhất của những gì tôi đã làm là chức năng tập thể dục đa giai đoạn, đây là điều cần thiết vì các chức năng tập thể dục đơn giản không cung cấp đủ thông tin cho thuật toán di truyền để phân biệt đủ giữa các thành viên trong dân số.


Chuỗi của Koza về GP rất dày đặc và có lẽ không dành cho người mới biết về GP. Tôi muốn đề xuất Hướng dẫn thực địa của Riccardo Poli về lập trình di truyền (có sẵn dưới dạng bản sao html miễn phí) hoặc Giới thiệu về thuật toán di truyền của Melanie Mitchell
Nobody

7

Tôi là thành viên của một nhóm điều tra việc sử dụng Tính toán tiến hóa (EC) để tự động sửa các lỗi trong các chương trình hiện có. Chúng tôi đã sửa chữa thành công một số lỗi thực sự trong các dự án phần mềm trong thế giới thực (xem trang chủ của dự án này ).

Chúng tôi có hai ứng dụng của kỹ thuật sửa chữa EC này.

  • Đầu tiên ( mã và sao chép có sẵn thông qua trang dự án ) phát triển các cây cú pháp trừu tượng được phân tích cú pháp từ các chương trình C hiện có và được triển khai trong Ocaml bằng công cụ EC tùy chỉnh của chúng ta.

  • Thứ hai ( thông tin mã và sao chép có sẵn thông qua trang dự án ), đóng góp cá nhân của tôi cho dự án, phát triển cụm x86 hoặc mã byte Java được biên dịch từ các chương trình được viết bằng một số ngôn ngữ lập trình. Ứng dụng này được triển khai trong Clojure và cũng sử dụng công cụ EC được xây dựng tùy chỉnh của riêng mình.

Một khía cạnh hay của tính toán tiến hóa là sự đơn giản của kỹ thuật giúp bạn có thể viết các triển khai tùy chỉnh của riêng mình mà không gặp quá nhiều khó khăn. Để có một văn bản giới thiệu có sẵn miễn phí về Lập trình di truyền, hãy xem Hướng dẫn thực địa về lập trình di truyền .


6

Một đồng nghiệp và tôi đang nghiên cứu giải pháp tải hàng hóa lên xe tải bằng các tiêu chí khác nhau mà công ty chúng tôi yêu cầu. Tôi đã làm việc với một giải pháp Thuật toán di truyền trong khi anh ta đang sử dụng Nhánh và Giới hạn với việc cắt tỉa tích cực. Chúng tôi vẫn đang trong quá trình thực hiện giải pháp này nhưng cho đến nay, chúng tôi đã thu được kết quả tốt.


5

Cách đây vài năm, tôi đã sử dụng ga để tối ưu hóa ngữ pháp asr (nhận dạng giọng nói tự động) để có tỷ lệ nhận dạng tốt hơn. Tôi đã bắt đầu với các danh sách lựa chọn khá đơn giản (trong đó ga đang thử nghiệm các kết hợp các thuật ngữ có thể có cho từng vị trí) và làm việc theo cách của tôi với các ngữ pháp mở và phức tạp hơn. Sức khỏe được xác định bằng cách đo sự tách biệt giữa các thuật ngữ / trình tự dưới một loại chức năng khoảng cách ngữ âm. Tôi cũng đã thử nghiệm thực hiện các biến thể tương đương yếu về ngữ pháp để tìm ra một biến thể được biên dịch thành một biểu diễn nhỏ gọn hơn (cuối cùng tôi đã sử dụng thuật toán trực tiếp và nó đã tăng đáng kể kích thước của "ngôn ngữ" mà chúng ta có thể sử dụng trong các ứng dụng) .

Gần đây tôi đã sử dụng chúng như một giả thuyết mặc định để kiểm tra chất lượng của các giải pháp được tạo ra từ các thuật toán khác nhau. Điều này phần lớn liên quan đến việc phân loại và các loại vấn đề phù hợp khác nhau (nghĩa là tạo ra một "quy tắc" giải thích một tập hợp các lựa chọn được đưa ra bởi các nhà đánh giá qua (các) tập dữ liệu).


4

Tôi đã tạo một khung GA hoàn chỉnh có tên "GALAB", để giải quyết nhiều vấn đề:

  • định vị GSM ANTs (BTS) để giảm các vị trí chồng lấp & trống.
  • Lập kế hoạch hạn chế nguồn lực.
  • Tạo hình tiến hóa. ( Evopic )
  • Vấn đề nhân viên bán hàng du lịch.
  • Vấn đề N-Queen & N-Color.
  • Các vấn đề về tour & Knapsack của Knight.
  • Ma thuật vuông & câu đố Sudoku.
  • nén chuỗi, dựa trên vấn đề Siêu dây.
  • Vấn đề bao bì 2D.
  • APP cuộc sống nhân tạo nhỏ bé.
  • Câu đố Rubik.

Có, nguồn của nó được xuất bản dưới cuốn sách GA của tôi .
MShams

4

Tôi đã từng sử dụng GA để tối ưu hóa hàm băm cho các địa chỉ bộ nhớ. Các địa chỉ có kích thước trang 4K hoặc 8K, vì vậy chúng cho thấy một số dự đoán trong mẫu bit của địa chỉ (các bit đáng kể nhất đều bằng 0; bit giữa tăng đều đặn, v.v.) Hàm băm ban đầu là "chunky" - nó có xu hướng theo cụm trên mỗi thùng băm thứ ba. Các thuật toán cải tiến đã có một phân phối gần như hoàn hảo.


3

Tôi không biết nếu bài tập về nhà được tính ...

Trong quá trình học, chúng tôi đã triển khai chương trình của riêng mình để giải quyết vấn đề Nhân viên bán hàng du lịch.

Ý tưởng là để so sánh trên một số tiêu chí (khó khăn để lập bản đồ vấn đề, hiệu suất, v.v.) và chúng tôi cũng sử dụng các kỹ thuật khác như ủ mô phỏng .

Nó hoạt động khá tốt, nhưng chúng tôi phải mất một thời gian để hiểu cách thực hiện giai đoạn 'sinh sản' một cách chính xác: mô hình hóa vấn đề trong tay thành một thứ phù hợp với lập trình di truyền thực sự khiến tôi cảm thấy khó khăn nhất ...

Đó là một khóa học thú vị vì chúng tôi cũng đã tìm hiểu về mạng lưới thần kinh và những thứ tương tự.

Tôi muốn biết liệu có ai sử dụng loại lập trình này trong mã 'sản xuất' không.


3

Tôi đã xây dựng một GA đơn giản để trích xuất các mẫu hữu ích ra khỏi phổ tần số của âm nhạc khi nó được phát. Đầu ra được sử dụng để điều khiển các hiệu ứng đồ họa trong một plugin winamp.

  • Đầu vào: một vài khung FFT (tưởng tượng một mảng 2D nổi)
  • Đầu ra: giá trị float đơn (tổng trọng số của đầu vào), ngưỡng là 0,0 hoặc 1,0
  • Gen: trọng lượng đầu vào
  • Chức năng tập thể dục: kết hợp chu kỳ nhiệm vụ, độ rộng xung và BPM trong phạm vi hợp lý.

Tôi đã có một vài GA được điều chỉnh theo các phần khác nhau của quang phổ cũng như các giới hạn BPM khác nhau, vì vậy chúng không có xu hướng hội tụ về cùng một mẫu. Đầu ra từ top 4 từ mỗi dân số được gửi đến công cụ kết xuất.

Một tác dụng phụ thú vị là thể lực trung bình trên toàn dân là một chỉ báo tốt cho những thay đổi trong âm nhạc, mặc dù thường phải mất 4-5 giây để tìm ra nó.


3

Là một phần của luận án của tôi, tôi đã viết một khung java chung cho thuật toán tối ưu hóa đa mục tiêu mPOEMS (tối ưu hóa nguyên mẫu đa biến với các bước cải tiến phát triển), đó là GA sử dụng các khái niệm tiến hóa. Nó là chung theo cách mà tất cả các phần độc lập với vấn đề đã được tách ra khỏi các phần phụ thuộc vào vấn đề và giao diện được sử dụng khung để chỉ thêm các phần phụ thuộc vào vấn đề. Do đó, một người muốn sử dụng thuật toán không phải bắt đầu từ số 0 và nó tạo điều kiện thuận lợi cho công việc rất nhiều.

Bạn có thể tìm thấy mã ở đây .

Các giải pháp mà bạn có thể tìm thấy với thuật toán này đã được so sánh trong một công trình khoa học với các thuật toán tiên tiến SPEA-2 và NSGA, và đã được chứng minh rằng thuật toán thực hiện tương đương hoặc thậm chí tốt hơn, tùy thuộc vào số liệu bạn thực hiện để đo hiệu suất và đặc biệt tùy thuộc vào vấn đề tối ưu hóa mà bạn đang tìm kiếm.

Bạn có thể tìm thấy nó ở đây .

Cũng như một phần của luận án và bằng chứng công việc của tôi, tôi đã áp dụng khung này cho vấn đề lựa chọn dự án được tìm thấy trong quản lý danh mục đầu tư. Đó là về việc lựa chọn các dự án làm tăng giá trị nhất cho công ty, hỗ trợ hầu hết chiến lược của công ty hoặc hỗ trợ bất kỳ mục tiêu tùy tiện nào khác. Ví dụ: lựa chọn một số dự án nhất định từ một danh mục cụ thể hoặc tối đa hóa các hiệp lực dự án, ...

Luận án của tôi áp dụng khung này cho vấn đề lựa chọn dự án: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf

Sau đó, tôi làm việc trong một bộ phận quản lý danh mục đầu tư tại một trong số 500 tài sản, nơi họ sử dụng một phần mềm thương mại cũng áp dụng GA cho vấn đề lựa chọn dự án / tối ưu hóa danh mục đầu tư.

Tài nguyên khác:

Tài liệu của khung: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf

giấy trình bày của mPOEMS: http://portal.acm.org/citation.cfm?id=1792634.1792653

Trên thực tế với một chút nhiệt tình, mọi người có thể dễ dàng điều chỉnh mã của khung chung thành một vấn đề tối ưu hóa đa mục tiêu tùy ý.


2

Trong công việc tôi gặp vấn đề sau: đã đưa ra các nhiệm vụ M và N DSP, cách tốt nhất để phân công nhiệm vụ cho DSP là gì? "Tốt nhất" được định nghĩa là "giảm thiểu tải của DSP được tải nhiều nhất". Có nhiều loại nhiệm vụ khác nhau và các loại nhiệm vụ khác nhau có sự phân chia hiệu suất khác nhau tùy thuộc vào nơi chúng được phân công, vì vậy tôi đã mã hóa tập hợp các công việc chuyển sang DSP thành "chuỗi DNA" và sau đó sử dụng thuật toán di truyền để "nhân giống" chuỗi bài tập tốt nhất tôi có thể.

Nó hoạt động khá tốt (tốt hơn nhiều so với phương pháp trước đây của tôi, đó là đánh giá mọi sự kết hợp có thể ... trên các kích thước vấn đề không tầm thường, phải mất nhiều năm để hoàn thành!), Vấn đề duy nhất là không có cách nào để nói nếu giải pháp tối ưu đã đạt được hay không. Bạn chỉ có thể quyết định xem "nỗ lực tốt nhất" hiện tại có đủ tốt hay để nó chạy lâu hơn để xem liệu nó có thể làm tốt hơn không.


2

Có một cuộc thi trên codechef.com (nhân tiện, trang web tuyệt vời, cuộc thi lập trình hàng tháng), trong đó người ta phải giải quyết một sudoku không thể giải quyết được

Những gì tôi sẽ làm, trước tiên là tạo ra một sudoku hoàn hảo và sau đó ghi đè lên các trường, đã được đưa ra. Từ cơ sở khá tốt này, tôi đã sử dụng lập trình di truyền để cải thiện giải pháp của mình.

Tôi không thể nghĩ ra một cách tiếp cận xác định trong trường hợp này, bởi vì sudoku có kích thước 300x300 và việc tìm kiếm sẽ mất quá nhiều thời gian.


2

Tôi đã sử dụng một thuật toán di truyền đơn giản để tối ưu hóa tỷ lệ tín hiệu / nhiễu của sóng được biểu diễn dưới dạng chuỗi nhị phân. Bằng cách lật các bit theo một số cách nhất định trong vài triệu thế hệ, tôi đã có thể tạo ra một biến đổi dẫn đến tín hiệu cao hơn tỷ lệ nhiễu của sóng đó. Thuật toán cũng có thể là "Mô phỏng luyện kim" nhưng không được sử dụng trong trường hợp này. Về cốt lõi, các thuật toán di truyền rất đơn giản và đây là một trường hợp sử dụng đơn giản mà tôi đã thấy, vì vậy tôi đã không sử dụng một khung để tạo và lựa chọn thế hệ - chỉ là một hạt giống ngẫu nhiên và Tỷ lệ tín hiệu trên tạp âm chức năng trong tầm tay.


2

Trong một cuộc hội thảo tại trường, chúng tôi phát triển một ứng dụng để tạo nhạc dựa trên chế độ âm nhạc. Chương trình được xây dựng bằng Java và đầu ra là một tệp midi với bài hát. Chúng tôi sử dụng phân biệt các aproach của GA để tạo nhạc. Tôi nghĩ chương trình này có thể hữu ích để khám phá các tác phẩm mới.


Tuyệt vời tôi đã thử một cái gì đó tương tự: liên kết
Todor Balabanov

2

trong chương trình đại học, chúng tôi đã sử dụng NERO (sự kết hợp giữa mạng thần kinh và thuật toán di truyền) để dạy robot trong trò chơi đưa ra quyết định thông minh. Nó thật tuyệt


2

Tôi đã phát triển một mô phỏng xoay đa luồng dựa trên chuyển hướng robot thông qua một tập hợp địa hình lưới ngẫu nhiên của các nguồn thực phẩm và mỏ và phát triển một chiến lược dựa trên thuật toán di truyền để khám phá tối ưu hóa hành vi robot và sự sống sót của các gen mạnh nhất cho nhiễm sắc thể robot. Điều này đã được thực hiện bằng cách sử dụng biểu đồ và ánh xạ của mỗi chu kỳ lặp.

Kể từ đó, tôi đã phát triển nhiều hành vi trò chơi hơn nữa. Một ứng dụng ví dụ mà tôi tự xây dựng gần đây là một thuật toán di truyền để giải quyết vấn đề nhân viên bán hàng du lịch trong việc tìm đường ở Vương quốc Anh có tính đến các trạng thái bắt đầu và mục tiêu cũng như một / nhiều điểm kết nối, trì hoãn, hủy bỏ, công trình xây dựng, giờ cao điểm, đình công, xem xét giữa các tuyến nhanh nhất và rẻ nhất. Sau đó cung cấp một khuyến nghị cân bằng cho tuyến đường sẽ đi vào một ngày nhất định.

Nói chung, chiến lược của tôi là sử dụng các gen đại diện dựa trên POJO sau đó tôi áp dụng các triển khai giao diện cụ thể để lựa chọn, đột biến, chiến lược chéo và điểm tiêu chí. Chức năng tập thể dục của tôi về cơ bản trở nên khá phức tạp dựa trên chiến lược và tiêu chí tôi cần áp dụng như một biện pháp heuristic.

Tôi cũng đã xem xét áp dụng thuật toán di truyền vào kiểm tra tự động trong mã bằng các chu kỳ đột biến có hệ thống trong đó thuật toán hiểu logic và cố gắng xác định báo cáo lỗi với các khuyến nghị để sửa mã. Về cơ bản, một cách để tối ưu hóa mã của tôi và cung cấp các khuyến nghị để cải thiện cũng như cách tự động hóa việc phát hiện mã lập trình mới. Tôi cũng đã thử áp dụng các thuật toán di truyền vào sản xuất âm nhạc trong số các ứng dụng khác.

Nói chung, tôi thấy các chiến lược tiến hóa như hầu hết các chiến lược tối ưu hóa toàn cầu / siêu hình học, ban đầu chúng chậm học nhưng bắt đầu chọn khi các giải pháp ngày càng gần với trạng thái mục tiêu và miễn là chức năng tập thể dục và chẩn đoán của bạn được liên kết tốt để tạo ra sự hội tụ trong không gian tìm kiếm của bạn.


1

Tôi đã từng thử làm một người chơi máy tính cho trò chơi cờ vây, độc quyền dựa trên lập trình di truyền. Mỗi chương trình sẽ được coi là một hàm đánh giá cho một chuỗi các bước di chuyển. Các chương trình được sản xuất không tốt lắm, ngay cả trên bảng 3x4 khá nhỏ.

Tôi đã sử dụng Perl, và tự mình mã hóa mọi thứ. Tôi sẽ làm mọi thứ khác ngày hôm nay.


1

Sau khi đọc The Blind Watchmaker , tôi đã quan tâm đến chương trình pascal Dawkins nói rằng ông đã phát triển để tạo ra các mô hình sinh vật có thể tiến hóa theo thời gian. Tôi đã đủ quan tâm để viết riêng của mình bằng cách sử dụng Swarm . Tôi đã không tạo ra tất cả các đồ họa critter ưa thích mà anh ấy đã làm, nhưng những đặc điểm được kiểm soát 'nhiễm sắc thể' của tôi đã ảnh hưởng đến khả năng sống sót của sinh vật. Họ sống trong một thế giới đơn giản và có thể đánh sập nó với nhau và môi trường của họ.

Các sinh vật sống hoặc chết một phần là do tình cờ, nhưng cũng dựa trên mức độ chúng thích nghi hiệu quả với môi trường địa phương, mức độ tiêu thụ chất dinh dưỡng và cách chúng sinh sản thành công. Đó là niềm vui, nhưng cũng nhiều bằng chứng cho vợ tôi rằng tôi là một người đam mê.


1

Cách đây một thời gian, nhưng tôi đã cuộn GA để phát triển các hạt nhân xử lý hình ảnh có hiệu lực để loại bỏ dấu vết tia vũ trụ khỏi hình ảnh của Kính viễn vọng Không gian Hubble (HST). Cách tiếp cận tiêu chuẩn là chụp nhiều lần phơi sáng với Hubble và chỉ giữ lại những thứ giống nhau trong tất cả các hình ảnh. Vì thời gian của HST rất có giá trị, tôi là một người yêu thiên văn học và gần đây đã tham dự Đại hội về tính toán tiến hóa, tôi nghĩ về việc sử dụng GA để dọn dẹp các phơi sáng đơn lẻ.

Các cá thể ở dạng cây lấy diện tích 3x3 pixel làm đầu vào, thực hiện một số tính toán và đưa ra quyết định về việc và cách sửa đổi pixel trung tâm. Thể hình được đánh giá bằng cách so sánh đầu ra với một hình ảnh được làm sạch theo cách truyền thống (tức là phơi sáng xếp chồng).

Nó thực sự có hiệu quả, nhưng không đủ để đảm bảo đã từ bỏ cách tiếp cận ban đầu. Nếu tôi không bị hạn chế về thời gian bởi luận án của mình, tôi có thể đã mở rộng thùng phần di truyền có sẵn cho thuật toán. Tôi khá chắc chắn rằng tôi có thể đã cải thiện nó đáng kể.

Các thư viện đã sử dụng: Nếu tôi nhớ chính xác, IRAF và cfitsio để xử lý dữ liệu hình ảnh thiên văn và I / O.


1

Tôi đã thử nghiệm với GA khi còn trẻ. Tôi đã viết một trình giả lập bằng Python hoạt động như sau.

Các gen mã hóa các trọng số của một mạng lưới thần kinh.

Đầu vào của mạng nơ-ron là "râu" phát hiện chạm. Giá trị cao hơn có nghĩa là rất gần và 0 có nghĩa là không chạm vào.

Các đầu ra là hai "bánh xe". Nếu cả hai bánh đi về phía trước, anh chàng đi về phía trước. Nếu các bánh xe ở hai hướng ngược nhau, anh chàng quay lại. Sức mạnh của đầu ra quyết định tốc độ quay của bánh xe.

Một mê cung đơn giản đã được tạo ra. Nó thực sự đơn giản - thậm chí ngu ngốc. Có sự bắt đầu ở dưới cùng của màn hình và một mục tiêu ở trên cùng, với bốn bức tường ở giữa. Mỗi bức tường có một không gian được lấy ra một cách ngẫu nhiên, vì vậy luôn có một lối đi.

Tôi bắt đầu những người ngẫu nhiên (tôi nghĩ họ là lỗi) khi bắt đầu. Ngay khi một anh chàng đạt được mục tiêu, hoặc đạt đến giới hạn thời gian, thể lực đã được tính toán. Nó tỷ lệ nghịch với khoảng cách đến mục tiêu lúc đó.

Sau đó tôi ghép chúng lại và "nhân giống" chúng để tạo ra thế hệ tiếp theo. Xác suất được chọn để được nhân giống tỷ lệ thuận với thể lực của nó. Đôi khi điều này có nghĩa là một người được nhân giống nhiều lần nếu nó có thể lực tương đối cao.

Tôi nghĩ rằng họ sẽ phát triển một hành vi "ôm tường trái", nhưng dường như họ luôn tuân theo một điều gì đó kém tối ưu hơn. Trong mọi thí nghiệm, các con bọ hội tụ thành một mô hình xoắn ốc. Họ sẽ xoắn ốc ra bên ngoài cho đến khi họ chạm vào một bức tường bên phải. Họ sẽ làm theo điều đó, sau đó khi họ đến khoảng trống, họ sẽ quay xuống (cách xa khoảng trống) và xung quanh. Họ sẽ quay 270 độ sang trái, sau đó thường vào khoảng trống. Điều này sẽ đưa họ qua phần lớn các bức tường, và thường đến mục tiêu.

Một tính năng tôi đã thêm là đưa một vec tơ màu vào các gen để theo dõi sự liên quan giữa các cá thể. Sau một vài thế hệ, tất cả chúng đều có cùng màu, điều đó cho tôi biết tôi nên có một chiến lược nhân giống tốt hơn.

Tôi đã cố gắng để họ phát triển một chiến lược tốt hơn. Tôi làm phức tạp mạng lưới thần kinh - thêm một bộ nhớ và mọi thứ. Nó không giúp được gì. Tôi luôn thấy chiến lược tương tự.

Tôi đã thử nhiều thứ khác nhau như có các nhóm gen riêng biệt chỉ tái tổ hợp sau 100 thế hệ. Nhưng không có gì sẽ đẩy họ đến một chiến lược tốt hơn. Có lẽ điều đó là không thể.

Một điều thú vị khác là vẽ đồ thị thể dục theo thời gian. Có những mô hình nhất định, như thể dục tối đa đi xuống trước khi nó đi lên. Tôi chưa bao giờ thấy một cuốn sách tiến hóa nói về khả năng đó.

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.