2013-12-13 16 views
6

Nhiệm vụ của tôi:di truyền/tiến hóa thuật toán - Họa sĩ

Tạo một chương trình để sao chép một hình ảnh (được cho là đầu vào) sử dụng nguyên thủy chỉ (giống như hình tam giác hoặc một cái gì đó). Chương trình nên sử dụng thuật toán tiến hóa để tạo ra hình ảnh đầu ra.


Câu hỏi của tôi:

tôi cần phải phát minh ra một thuật toán để tạo ra quần thể và kiểm tra xem chúng (bao nhiêu - theo% - chúng phù hợp với hình ảnh đầu vào). Tôi có một ý tưởng; bạn có thể tìm thấy nó bên dưới.

Vì vậy, những gì tôi muốn từ bạn: tư vấn (nếu bạn tìm thấy ý tưởng của tôi không đến nỗi tệ) hoặc nguồn cảm hứng (có thể bạn có một ý tưởng tốt hơn?)


Ý tưởng của tôi:

Giả sử tôi sẽ chỉ sử dụng hình tam giác để tạo hình ảnh đầu ra.

Dân số đầu tiên của tôi là P hình ảnh (được tạo bằng cách sử dụng T hình tam giác được tạo ngẫu nhiên - được gọi là Yếu tố).

tôi kiểm tra theo chức năng tập thể dục của tôi mỗi hình ảnh trong dân số và chọn E trong số họ là tầng lớp thượng lưu và phần còn lại của dân số chỉ cần loại bỏ:

To compare 2 pictures we check every pixel in picture A and compare his R,G,B with 
    the same pixel (the same coordinates) in picture B. 
    I use this: 
      SingleDif = sqrt[ (Ar - Br)^2 + (Ag - Bg)^2 + (Ab - Bb)^2] 
    then i sum all differences (from all pixels) - lets call it SumDif 
    and use: 
      PictureDif = (DifMax - SumDif)/DifMax 
    where 
      DifMax = pictureHeight * pictureWidth * 255*3 

tốt nhất được sử dụng để tạo ra quần thể tiếp theo bằng cách này:

picture MakeChild(picture Mother, picture Father) 
    { 
      picture child; 
      for(int i = 0; i < T; ++i) 
      { 
         j //this is a random number from 0 to 1 - created now 
         if(j < 0.5) child.element(i) = Mother.element(i); 
         else child.element(i) = Father.element(i) 
         if(j < some small %) mutate(child.element(i)); 
      } 
      return child; 
    } 

Vì vậy, nó khá đơn giản. Chỉ có các đột biến cần một bình luận: Vì vậy, luôn luôn có một số xác suất nhỏ mà yếu tố X ở trẻ em sẽ khác với X trong cha mẹ của mình. Để làm điều này, chúng ta thực hiện các thay đổi ngẫu nhiên trong phần tử con (thay đổi màu của nó bằng số ngẫu nhiên, hoặc thêm số ngẫu nhiên vào tọa độ (x, y) của anh ta - hoặc nút của anh ta).

Vì vậy, đây là ý tưởng của tôi ... Tôi đã không kiểm tra nó, đã không mã hóa nó. Vui lòng kiểm tra ý tưởng của tôi - bạn nghĩ gì về nó?

+0

Bạn có thể thử thay đổi chức năng mục tiêu để bắt đầu bạn đang cố gắng khớp các bản vá lớn hơn các pixel đơn lẻ. Có thể áp dụng một bộ lọc để nó coarsens hình ảnh và các ứng cử viên, và bạn có thể làm giao phối và đột biến theo cách như vậy mà tất cả các yếu tố trong một bản vá như vậy được di chuyển. Bạn giảm kích thước của các bản vá dần dần cho đến khi bạn nhận được điểm ảnh. (Bây giờ tôi nghĩ về nó, nó giống như sử dụng mô phỏng ủ trong một thuật toán di truyền.) – Fortunato

+2

[Bài đăng trên blog này] (http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona- lisa /) dường như chi tiết những gì bạn đang cố gắng đạt được, mặc dù anh ta không chọn từ một dân số ở mỗi bước, chỉ cần so sánh nó với lần lặp trước. Điều đó cảm thấy giống như mô phỏng ủ hơn bất cứ điều gì di truyền với tôi, nhưng tuy nhiên tôi nghĩ rằng nhìn qua nó sẽ có giá trị cho bạn. –

Trả lời

2

Tôi sẽ làm cho số lượng các bản vá lỗi của mỗi đứa trẻ năng động và có được hoạt động đột biến để chèn/xóa các bản vá lỗi với một số xác suất (thấp). Tất nhiên điều này có thể dẫn đến rất nhiều dư thừa và sưng lên trong hệ gen của đứa trẻ. Trong những tình huống này, thường là nên sử dụng bộ gen của một cá nhân như một tham số của chức năng thể dục để các cá nhân nhận được phần thưởng (với giá trị thể lực cao hơn) để sử dụng ít bản vá hơn. Vì vậy, ví dụ nếu PictureDif của các cá nhân A và B giống nhau nhưng A có ít bản vá hơn B, thì A có khả năng tập luyện cao hơn.

Một vấn đề khác là toán tử sinh sản mà bạn đã đề xuất (cụ thể là thao tác chéo). Để quá trình tiến hóa hoạt động hiệu quả, bạn cần đạt được một sự cân bằng thăm dò và khai thác hợp lý. Một cách để thực hiện điều này là có một tập hợp các toán tử sinh sản thể hiện mối tương quan thể dục tốt [1] có nghĩa là tập thể dục của trẻ phải là đóng cho phụ huynh của nó.

Trong trường hợp sinh sản gốc đơn, bạn chỉ cần tìm các thông số đột biến phù hợp. Tuy nhiên, khi nói đến đa sinh sản (chéo) một trong những kỹ thuật thường được sử dụng là để sản xuất 2 trẻ em (thay vì 1) từ cùng một 2 cha mẹ. Đối với đứa trẻ đầu tiên, mỗi gen đến từ người mẹ với xác suất là 0,2 và từ người cha với xác suất là 0,8 và con thứ hai theo cách khác. Tất nhiên sau khi crossover, bạn có thể làm đột biến.

Oh và một điều nữa, đối với các nhà khai thác đột biến, khi bạn nói

... làm thay đổi ngẫu nhiên trong phần tử trong con (thay đổi màu sắc của mình bằng số ngẫu nhiên, hoặc thêm số ngẫu nhiên để mình (x, y) phối hợp - hoặc nút của ông)

đó là một ý tưởng tốt để sử dụng một Gaussian phân phối để thay đổi màu sắc, phối hợp, vv

[1] Tính toán tiến hóa: Một cách tiếp cận thống nhất của Kenneth A. De Jong, trang 69

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