witam serdecznie...

mam problem z aplikacją i nie potrafie go naprawić a zostalo mi doslownie pare dni na dokonczenie tej aplikacji... zalezy od tego moja przyszlosc czyli cofka albo dalsze studiowanie... czy znalazł by sie ktoś życzliwy i pomoglby z tym fantem?

sprawa ma sie nastepująco:

zadaniem aplikacji jest optymalne ulozenie elementow na plaszczyznie z zastosowaniem algorytmu mrowkowego... aplikacja jest prawie zrobiona jednak mam błąd jaki opisalem wyzej... objawia on sie na 2 sposoby - niedopuszczlane rozwiazania - wyrysowuje mniej obiektów niz dodano do listy - lub wyrysowuje wiekszosc/wszystkie ale nakladają sie one na siebie...

wiekszosc kod jest skomentowana w zrodlach...

ponizej mniej wiecje działanie aplikacji:

  1. Uruchamiamy procedurę ułożenia:
    a) cala logika układająca zaszyta jest w komponencie, na którym malowane będą ułożone produkty, przeciążona jest metoda paintComponent();
    b) cały magazyn to układ współrzędnych Y zależnych od X;
    c) określanie odcinka do zapełnienia go produktami następuje na zasadzie wykrycia różnicy wartości Y;
    d) zakładając, ze mamy juz odcinek np. = 100, następuje teraz próba ułożenia ścieżki - ułożenia produktów w kolejności losowej do satysfakcjonującej nas długości - tutaj dodano wspomniany wcześniej współczynnik tolerancji = 2% długości odcinka, a wiec jeśli produkty będą miały dokładnie taką długość jak zamierzony odcinek, to ok, ale tak zdarza sie rzadko - współczynnik tolerancji zakłada, ze będzie odrobinkę mniejsza łączna długość produktów a i tak zostanie dopuszczona do rysowania, jest to cos na wzór alg. heurystycznego uczącego sie produktów, które może dodać do ścieżki;
    e) każde losowanie odbywa sie na liczbach pseudolosowych z przedziału pomniejszającego sie o wylosowane wcześniej i przydzielone produkty;
    f) jeżeli łączny czas losowań przekroczy założony w programie - kolejny parametr, następuje resetowanie ścieżki i losujemy ponownie;
    g) każde nieudane losowanie uszczupla nam poziom feromonu - kolejny parametr, aż do 0, po czym następuje powrót do gniazda czyli do funkcji odmierzającej długość odcinka do zagospodarowania przez produkty itd.;
    h) jeżeli ułożone zostaną wszystkie produkty, bądź zostanie przekroczony czasowy ogranicznik działania funkcji układających - kolejny parametr - następuje zwrócenie aktualnych rezultatów i rysowanie magazynu - może zdarzyć sie, ze przy zbyt małym czasie nie zostaną ułożone wszystkie produkty, a program zwróci rezultat;
    • Parowanie – w momencie gdy losowany jest układ linii i dokonywana jest rotacja produktów (w zależności od potrzeb) przy zbyt długim zapętleniu (domyślnie 15 sek.) dokonywane jest uszczuplenie feromonu. Skok następuje po 1 co 3 sekundy. 15 sekund, feromon == 0 i wychodzi z funkcji układającej linie – reset linii;
    • Reset linii – zostało wprowadzone dlatego iż program błędnie zapętlał się szukając produktu, który dopasowany będzie do rozmiarów pustej przestrzeni pomiędzy innymi produktami z poprzednich linii. Ponowne ułożenie nowej linii daje lepsze efekty i zmniejsza możliwość zbiegu
    • Układanie przedmiotów w magazynie sprowadza się do ułożenia produktów od dolnego-lewego narożnika wykorzystując metodę BL (Bottom-Left);

i opis jak uzyskac jakis wynik:

  • wprowadzic rozmiar magazynu (na poczatku mniesze np. 300 na 300, moze byc z listy)

  • ustawiamy ilość iteracji (ustawiam roznie od 50 do 350, 400...)

  • nastepna zakladka: wprowadzic liste produktow z pliku (folder testy, listy sa z rozszerzeniem pli, proponuje którąś z "benchmark_list_cat_01_p1.pli" i wciskamy OK aby lista zaladowala sie do tabeli)

  • przechodzimy na kolejna zakladke i wciskamy START

  • po wyliczeniu widac efekt, i mozemy zrobic tez zrzut w którym beda plik png oraz plik txt z danymi wprowadzonymi, statystyką i danymi koordynatów i kolejnosci produktów

a tu aplikacja:
http://www.przeklej.pl/plik/ant-wersja-2009-12-02-rar-0005ptbssagh

ps: w jakis sposób dodac do wyrysowanego okna scroolla po lewej w przypadku gdy wyrysowywany element byłby np wiekszy niz pulpit czy otwarte okno aplikacji... przykladowo 800 na 800? mi sie juz nie miesci i nie widze wyniku :/