Tôi đã đăng câu hỏi này sớm hơn trên stackoverflow, nơi nó được đóng dưới dạng ngoài chủ đề. Tôi hy vọng nó sống sót ở đây.
Tôi tập thể dục leo núi của chúng tôi, các tuyến đường cần phải được thiết lập lại theo thời gian. Các quy tắc sau được áp dụng:
- Chúng tôi có tổ chức leo núi với một số màu sắc khác nhau với số lượng khác nhau. - Khi một tuyến đường được đặt trong một khu vực, không có tuyến đường nào khác có cùng màu phải được đặt trong khu vực đó hoặc trong các khu vực lân cận để tránh nhầm lẫn.
- Một số kết hợp màu sắc phải được tránh trong một khu vực, như trắng / xám hoặc đỏ / hồng.
- Mục tiêu là có bốn tuyến đường trong mỗi lĩnh vực, ít hơn là ổn nếu bốn tuyến sẽ phá vỡ các quy tắc trên.
Bây giờ tôi đã thử hai cách tiếp cận khác nhau. Cái đầu tiên là Mô phỏng luyện kim trong đó tôi đã khởi tạo bức tường với một mô hình màu ngẫu nhiên (nhưng với trọng lượng màu nhất định) và tính toán độ xấu cho mỗi phối màu. Tính xấu này cũng được tính toán cho sự kết hợp giữa một ngành và các nước láng giềng. Trong mỗi lần lặp, một tuyến được chọn ngẫu nhiên từ khu vực tồi tệ nhất được hoán đổi với một tuyến từ khu vực khác được chọn ngẫu nhiên. Điều này cho thấy một số loại hội tụ, nhưng kết quả không thể sử dụng được (tức là trạng thái kết quả chứa các thành phần có màu gấp đôi hoặc gấp ba).
Sau đó tôi tiếp cận vấn đề từ phía đối diện và bắt đầu với một bức tường trống. Lần này, mọi màu sắc đều có sự phân rã từ một khu vực sang các khu vực lân cận. Nồng độ của các màu tương tự cũng được tăng lên, tức là một tuyến đường màu đỏ làm tăng nồng độ cam trong một khu vực và gần đó. Một nguồn màu ngẫu nhiên có trọng số (xô) đã cho tôi màu tiếp theo của bức tường, được đặt tại khu vực có nồng độ thấp nhất của màu này. Nếu nồng độ vượt quá ngưỡng nhất định, màu sẽ không được thêm vào (nhưng được đặt lại vào thùng). Đây là một phần thành công vì trạng thái kết quả không chứa bất kỳ màu kép nào - nhưng một số lĩnh vực trống hoặc chỉ chứa một màu.
Vậy: Điều gì có thể là một thuật toán thích hợp để giải quyết vấn đề này, với các quy tắc trên? Tôi sẽ vui vẻ thêm thông tin khi có yêu cầu.
Chỉnh sửa 1 - Thêm thông tin:
- trường hợp thử nghiệm của tôi có 15 lĩnh vực,
- mỗi khu vực nên chứa 4 tuyến đường
- phòng tập thể dục thực sự có 3 tòa nhà với trung bình 50 ngành
- một số khu vực được bố trí xung quanh trụ cột, một số được kết nối bởi mái nhà
- chúng tôi có khoảng 10 màu giữ khác nhau
- chiều cao của các khu vực khác nhau giữa 6 (phần mới bắt đầu) và 20 mét (13 dọc + 7 mái), vì vậy chúng tiêu thụ số lượng giữ khác nhau. Tuy nhiên, trung bình là khoảng 12 và điều này có thể được coi là không đổi.
- có một số lượng giới hạn của mỗi màu, số lượng không bằng nhau
- một số màu dễ hơn, khó hơn một chút (nghĩa là chúng ta có thể tạo ra một tuyến đường màu vàng với bất kỳ khó khăn nào, trong khi việc tạo ra một tuyến đường màu cam rất dễ dàng cho trẻ em sẽ gần như không thể)
- một số lĩnh vực là "dễ dàng hơn", vì vậy màu sắc dễ dàng sẽ xuất hiện ở đây (đây là tùy chọn, setters tuyến của chúng tôi có thể làm cho mọi thứ khó hơn hoặc dễ dàng hơn trong phạm vi rộng).
- chúng ta có thể nói một cách an toàn những màu nào kết hợp tốt với nhau trong một khu vực hoặc trong các khu vực lân cận và những sự kết hợp nào không. Có một số điều ngạc nhiên, chẳng hạn như trắng và đen (combo xấu): cả hai đều chuyển sang màu xám trong khi cao su (giày) hoặc phấn (tay) được để lại trên chúng.
- một số màu giữ là sự kết hợp như tím / trắng (trong một mẫu sọc).
Chỉnh sửa 2: Một số câu hỏi về thuật toán di truyền
Bây giờ tôi đã tải xuống và biên dịch ParadisEO và thậm chí có IDE của tôi (tôi đang sử dụng Code :: Blocks) để biên dịch ví dụ QuickStart. ParadisEO cung cấp các thuật toán di truyền với một mục tiêu duy nhất cũng như GA đa mục tiêu. GertVdE đề nghị tính toán mức độ phù hợp của từng lĩnh vực và tối đa hóa tổng số thể lực của tất cả các lĩnh vực như một mục tiêu duy nhất. Tôi cũng có thể tối đa hóa thể lực của từng lĩnh vực với GA đa mục tiêu không? Đó sẽ là khoảng 50 mục tiêu.
Ngoài ra, tôi đang vật lộn với định nghĩa của một chức năng chéo hợp lý. Vì số lượng tối đa của mỗi màu là cố định, việc vượt qua có thể dẫn đến các trạng thái bất hợp pháp. Nếu tôi cho phép nhiều hơn số tiền tối đa đã cho trước đó, mẫu tổng thể có thể hội tụ thành một sự lặp lại của các kết hợp ít "rắc rối" hơn trong đó các màu rắc rối đã bị loại bỏ. Mặt khác, tôi cũng có thể loại bỏ các màu dư thừa cho đến khi đạt được mức tối đa, làm cho chức năng chéo không bảo thủ.
(Tôi hoàn toàn mới đối với các thuật toán di truyền)