Projekt optymalizacja kombinatoryczna

Zasady zaliczenia    Format sprawozdania    Tematy zadań    Uwagi    Najlepsi   

Zasady zaliczania

  1. Grupa dziekańska jest dzielona na 2-osobowe zespoły. Każdy zespół programuje przynajmniej 2 rozwiązania dla jednego z 3 problemów. Rozwiązania dotyczą tego samego problemu (nie zmieniamy problemu w kolejnych rozwiązaniach). Dwa rozwiązania są obowiązkowe, trzecie rozwiązanie dla chętnych (np. w celu podwyższenia średniej). Trzecie rozwiązanie może też zostać przydzielone jako dodatkowa praca za powtarzające się niepoprawne rozwiązania.
  2. Oceny określane są następująco. Wyliczana jest średnia z ocen za rozwiązania. Do oceny średniej za programy mogą być dodane punkty: Wszelkie ekstra-punkty i inne "bonusy" są doliczane tylko osobom, które rozliczyły się w terminie ze wszystkich zadań.
  3. Jeżeli przygotowane zostaną 3 rozwiązania (tzn. trzy programy), to do średniej brane są 2 najlepsze oceny.
  4. Poszczególne rozwiązania muszą się istotnie różnić jakościowo. Na przykład, użycie heurystyki kolorującej wierzchołki grafu w kolejności wynikającej z czegoś jest tylko jedną metodą niezależnie od sposobu wyboru kolejności wierzchołków. Algorytm zachłanny i wyprowadzona z niego metoda GRASP również są jedną podobną metodą. Trzy różne metaheurystyki (np. simulated annealing, tabu search i genetic algorithm) SĄ trzema różnymi metodami. Co do różnych wersji algorytmu BB (branch and bound), to istnienie różnic między implementacjami jest zależne od szczegółów, tj. metod cięcia i liczenia dolnych ograniczeń. W razie wątpliwości proszę pytać.
  5. Język programowania C, C++, kompilator gcc, g++ dla środowiska Linux, Cygwin (z tego wynika, że nie można użyć bibliotek conio.h, windows.h stosowanych np. przez mingw, dev-cpp, code::blocks). Akceptowane będą tylko te programy, które uda się skompilować na zajęciach dostępnymi kompilatorami. Tekst programu musi być w kodzie ASCII (niektóre edytory tekstowe (Linux,Mac) zostawiają niewidoczne znaki nawet w plikach tekstowych. Tego ma nie być). Dopuszczalne jest użycie make, inne narzędzia zarządzania procesem kompilacji programu nie są akceptowane.
  6. Wszystkie programy muszą się dać wykonać z linii poleceń i z linii poleceń przyjmować parametry wykonania (nazwy plików, liczby, przełączniki, itp.).
  7. Proszę aby programy pobierały dane z bieżącego katalogu i zapisywały wyniki albo na konsolę, albo do pliku o jednej i tej samej nazwie. Proszę NIE tworzyć własnych systemów nazw i katalogów dla plików wynikowych, nie przetwarzać więcej niż jednego pliku na raz. To ułatwia mi wsadowe testowanie Państwa programów.
  8. Jakie metody wchodzą w rachubę:
    a) "szyte" heurystyki,
    b) BB,
    c) metaheurystyki,
    d) użycie zewnętrznych pakietów rozwiązujących części składowe problemu np. (sprowadzenie do) ILP (integer linear programming, np. lp_solve przykład knapsack, przykład max-sat).
    Pobieżny opis tych metod można znaleźć np. na foliach 60-96 na stronie z prowadzonego kiedyś przeze mnie wykładu.
  9. Rada: łatwiej zacząć od prostej metody, np. to może być szybka szyta heurystyka albo GRASP.
  10. Uwaga! Nie wolno importować całych gotowych rozwiązań (cudzego kodu rozwiązującego całe postawione zadanie). Można korzystać z rozwiązań opisanych w książkach, artykułach i w sieci, wówczas w sprawozdaniu trzeba podać źródło. Np. w ten sposób:
    Literatura
    Autor, tytuł, źródło, rok publikacji (ewent. czas dostępu dla str. www).
  11. Limit czasu. Aby możliwa była weryfikacja działania programów na zajęciach i sprawdzarką, muszą się one wykonywać w ograniczonym czasie. Przyjmujemy, że limit czasu to 5 minut na instancję. Tzn. tego limitu będę używać na etapie weryfikacji kodu w trybie off-line. Do weryfikacji poprawności rozwiązania na zajęciach przyjmijmy limit 3 minut. Programy muszą się same zatrzymać w tym czasie i podać poprawne rozwiązanie. Trzeba tak dobrać liczbę iteracji, albo śledzić upływ czasu, aby limit nie był przekraczany. Proszę zwrócić uwagę, że programy będą wykonywane na komputerach o różnych prędkościach i nawet na najwolniejszym limit czasu musi być przestrzegany.
  12. Aby rozwiązanie zostało przyjęte należy:
  13. Terminy zaliczenia rozwiązań. Do tych terminów powinny być zaliczone wszystkie powyższe kroki weryfikujące rozwiązanie. Wszystkie elementy materialne potrzebne do zaliczenia (sprawozdanie i kod) muszą do mnie dotrzeć najpóźniej w tych terminach, nawet jeżeli na zajęciach (z powodów od Państwa niezależnych) nie udało się sprawdzić pracy. Dopiero wykonanie wszystkich kroków i dostarczenie sprawozdania i kodu wyznacza termin przyjęcia rozwiązania. Termin dotyczy obu grup (niezależnie od parzystości tygodnia). Wszystko można też zaliczać wcześniej.
  14. Każdy tydzień opóźnienia w zaliczeniu obniża ocenę o 0.5. Jeżeli praca była zwrócona do poprawki (tzn. musi być ponownie oceniona), to nową wersję trzeba dostarczyć w ciągu tygodnia od wysłania przeze mnie informacji o błędach. Przekroczenie tego terminu będzie obniżać ocenę bazową o 0.5 stopnia za każdy tydzień. Czas oczekiwania na moją odpowiedź nie liczy się jako opóźnienie (czas upływający po mojej stronie nie obniża oceny). Minimalna ocena pracy, która (w końcu) zostanie zaakceptowana wynosi 3.0.
  15. Daty wpłynięcia sprawozdania, programu, wysłania informacji o błędach określa mój system poczty elektronicznej lub (w przypadku papieru) moment wręczenia sprawozdania (datę na nim możemy wpisać razem ;-). Jako ostateczna data wpłynięcia rozwiązania brany jest zawsze termin dostarczenia ostatniego elementu weryfikacji rozwiązania. Innymi słowy, jeżeli praca jest oddawana w kawałkach (program, tekst, rozmowa na zajęciach), to liczy się data oddania ostatniego kawałka.
  16. Jeżeli rozwiązanie zostanie zwrócone do poprawy więcej niż 4 razy, liczba programów do przedstawienia zostaje zwiększona do 3.
  17. Trzeba dostarczyć co najmniej 2 działające rozwiązania. Nie ma możliwości rezygnacji z jednego programu z oceną 2.0.
  18. Po zakończeniu semestru nowe prace nie będą przyjmowane. W sesji poprawkowej przyjmowane są tylko poprawki do wcześniej przysłanych projektów. Po zakończeniu sesji żadne prace nie będą przyjmowane.
  19. Tekst sprawozdania może być tworzony przyrostowo, tzn. sprawozdanie dla kolejnego rozwiązania może zawierać elementy poprzedniego sprawozdania jako podzbiór. Umożliwia to porównanie jakości i szybkości dwóch rozwiązań.
  20. Proszę nie traktować mnie jako swojego korektora. Za przysłanie niedziałających programów, niekompletnych sprawozdań i z błędami zwracam pracę do poprawy i obniżam ocenę o 0.5 stopnia (za każdy zwrot). Więcej niż 4 zwroty, to dodatkowa praca (3-cie rozwiązanie).
  21. Programy można testować i zgłaszać dowolną liczbę razy na zajęciach bez wpływu na ocenę.


Sprawozdanie

Format sprawozdania jest dowolny, powinno jednak zawierać:

  1. Metadane nt. autorów i projektu: imiona, nazwiska, numery indeksów, email do kontaktu, datę oddania sprawozdania (najlepiej wpisać w momencie wręczenia mi), nazwę zadania i nazwę rozwiązania (np. Kolorowanie, algorytm zachłanny).
  2. Opis metody rozwiązania problemu. Trzeba opisać ideę/zasadę na której opiera się algorytm. Można tu włączyć istotne wyjątki z kodu.
  3. Badania efektywnościowe, tzn. wyniki testów czasu działania metody i jakości uzyskanych rozwiązań w zależności od rozmiaru problemu. Przykładowe instancje testowe zostaną wskazane przy każdym temacie. Przeprowadzenie obszerniejszych testów będzie zaletą pracy. Limit czasu działania w testach opisanych w sprawozdaniu może przekraczać 5 min.
  4. Jeżeli algorytm jest probabilistyczny (in. randomizowany, in. korzysta z losowości), to trzeba pokazać rozrzut jakości wyników.
  5. Jeżeli algorytm ma jakieś parametry kontrolne, które należy stroić (tuning) to trzeba udokumentować proces wyboru tych parametrów.
  6. Przy drugim rozwiązaniu przeprowadzić testy określające, którą z dwóch metod należy uruchomić dla zadanego rozmiaru problemu i limitu czasu wykonania. Można to zrobić badając jakość rozwiązań dla różnych rozmiarów problemu i limitów czasu.
  7. Wnioski. Spostrzeżenia nt. działania algorytmu(-ów), trudności instancji itp. Np. można: wskazać której metody użyć dla pewnego rozmiaru instancji i ograniczeń czasowych; porównać swoje dwie/trzy metody na wykresie jakość/czas i stwierdzić, która dominuje nad którą i dlaczego.
  8. Załącznik w postaci kodu programu proszę przysłać pocztą (może być spakowany jakimś typowym programem, np. w formacie zip,tgz,rar,7z). Program będzie testowany pod kątem poprawności generowanych rozwiązań.
  9. W emailu i/lub sprawozdaniu proszę napisać jak skompilować Państwa program i jak go uruchomić.
  10. Proszę przesyłać tylko kod źródłowy (i ewentualnie makefile). Proszę nie przesyłać zestawów danych, plików repozytoriów (np. .git), plików wykonywalnych (.out), pośrednich (.o), .sh, .xml, .cbp, etc. etc.
Proszę o dostarczenie sprawozdania w formie papierowej.

Typowe błędy w sprawozdaniach
Lista tematów

Uwagi nt. implementacji

  1. Jak określić kiedy metaheurystyka ma się zatrzymać? Są (przynajmniej) dwa wyjścia.
    a) Jeżeli algorytm jest zdefiniowany tak, że znamy optymalną wartość funkcji celu (taka wartość nie musi być "prawdziwa" można przyjąć jakąś wartość spekulatywnie do osiągnięcia), to algorytm może zatrzymać się po jej osiągnięciu. Spekulatywnie przyjętą testową wartość funkcji celu można też zmniejszyć, o ile metodzie udało się uzyskać tę wartość.
    b) Jeżeli optimum nie jest znane, to trzeba zatrzymać się po pewnym czasie. Ze względów praktycznych algorytmy zachłanne nie powinny działać dłużej niż kilka sekund (dla instancji tak małych jak te na zajęciach), a algorytmy takie jak BB, GA, Tabu nie powinny działać dłużej niż kilka minut. Programy muszą zatrzymywać się w określonych powyżej limitach czasu.
  2. Strojenie (tuning) metaheurystyk.
    Jeżeli ktoś z Państwa implementuje jakąś metaheurystykę, to proszę zwrócić uwagę, że metaheurystyki zwykle mają szereg "magicznych" parametrów sterujących ich działaniem. Na przykład: tabu search - długość listy tabu, rozmiar przeszukiwanego sąsiedztwa, genetic search - rozmiar populacji, prawdopodobieństwo mutacji, simulated annealing - sposób zmieniania temperatury, a wszystkie takie algorytmy razem mają jakiś warunek stopu (np. liczba iteracji, czas działania do zatrzymania). Te wszystkie parametry trzeba sensownie dobrać. Wymaga to testowania i eksperymentalnego dobierania. Wyniki takich testów trzeba opisać i objaśnić w sprawozdaniu. Program musi też mieć jakieś domyślne wartości parametrów kontrolnych, aby osoba używająca programu nie musiała zaczynać używania od ponownego strojenia. Zwykle wiązanie ad hoc tych "magicznych" liczb ze strukturą instancji (np. długość listy tabu równa się 10% liczby wierzchołków w grafie) nie jest dobrym pomysłem. Brak strojenia oznacza, że metaheurystyka nie została prawidłowo użyta.

Uwagi organizacyjne

  1. Znalazłeś/Znalazłaś błąd? Informuj!
  2. Za znalezienie błędu (wykazanie błędnego działania) sprawdzarki +1 stopień do oceny końcowej. Informacja o błędzie musi zawierać przykładowe pliki wejściowe z objaśnieniem co działa niepoprawnie.
  3. Za znalezienie błędów w danych +0.1 do oceny końcowej.

Najlepsze wyniki uzyskane w roku akademickim 2023/2024

Powyższe zespoły dostają +0.5 do oceny średniej z projektów.

Osoby, które uzyskały polepszające wyniki w przeszłości

2014 -- G.Latosiński + J.Synak (JS: 3291), K.Krakowski + M.Ledzianowski (CRPTW: 1020 ciężarówek), A.Borowski (CVRPTW: 3874362.6312 długość trasy)
2016 -- F.Krawiec + M.Leśny (Pata: 1083230633), N.Schlaffke + M.Slysz (CRPTW: 1017 ciężarówek, długość trasy: 4362883.055)
2017 -- K.Krakowski + I.Małyszka (Pata: 725251161)
2018 -- M.Leszczyk + A.Zielińska (CVRPTW: 3756354.9435 długość trasy, liczba ciężarówek: 1021)
2019 -- D.Makałowski + M.Okonek (CVRPTW: 4050701.9654 długość trasy, liczba ciężarówek: 998)
2020 -- K.Jajeśnica + K.Jakusik (JS: 3211)
2023 -- B.Kozłowski + A.Pilawski (CVRPTW: 3688638.54649 długość trasy, liczba ciężarówek: 1018)


MD. Ostatnia zmiana :