Cześć wszystkim!
Ostatnio zajmuję się małym zadankiem, o którym opowiem zaraz. Postanowiłem wykorzystać w jego rozwiązaniu algorytm genetyczny, jednak zabrnąłem w ślepą uliczkę, potrzebuję świeżego spojrzenia na sprawę i jakieś pomysły, które akurat mi nie przyszły do głowy, dlatego liczę na Waszą pomoc. Algorytm piszę w C#.
Zadanie: W magazie trzeba zarezerwować miejsce na bardzo wiele stosów paneli o różnych szerokościach (dokładnie 12). Magazyn podzielony jest na 8 pól różnej wielkości (nazwijmy to długości). Trzeba tak rozmieścić te panele o różnych szerokościach, aby maksymalnie wykorzystać miejsce. Ich ilość jest wyrażona procentowo, ale nie jest to liczba bardzo sztywna stąd możliwe są niewielkie mutacje i zmiany w ich procentowym udziale.
Początkowo przyjąłem sobie, że populacja to panele w ilości wystarczającej na rozlokowanie w całym magazynie. Każdy osobnik posiada 2 geny: przynależności do danego pola w magazynie oraz szerokość panela. Dopasowanie musi być rozpatrywane dla każdego pola z osobna a także dla magazynu jako całości. Początkowo tworzyłem wiele takich populacji i krzyżowałem losowe osobniki miedzy sobą, co pozwalało na spełnienie kryterium dla maksymalnie 4 pól. Później stwierdziłem, że można osobniki dla każdego pola potraktować jako odrębną populację i krzyżować je pomiędzy sobą w stopniu zależnym od dopasowania oraz np gdy wynika ze w jednym polu paneli jest za dużo to przenosiłem je tam, gdzie ich brakowało. Rezultaty mojej pracy są jednak jak do tej pory marne. Ten sposób doprowadził mnie do dopasowania paneli do max. 3 pól na raz.
Tak więc przyjąć za populację osobniki dla całego magazynu czy dla poszczególnych pól? Jak krzyżować? Z chęcią przeczytam i rozważę każdą sugestię. A może jest jakiś inny algorytm, który sprawdziłby się lepiej w tego typu zadaniu...
Pozdrawiam