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ó?
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
[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. –