Wymagania
Transkrypt
Wymagania
AAL - projekt: zalecenia ogólne Proponowane problemy algorytmiczne są do opracowania indywidualnego. Może się zdarzyć, że to samo lub b. podobne zadania projektowe są proponowane kilku studentom, praca projektowa powinna mieć jednak charakter w 100% indywidualny i wykryte przypadki współdzielenia kodu, itp. będą podlegały sankcjom. Opracowywane algorytmy i realizujące je programy powinny spełniać następujące ogólne kryteria: Język programowania. Projekt należy wykonać w języku C/C++. Program powinien być przenośny i dać się skompilować/wykonać zarówno na platformie Linux jak i (opcjonalnie) Windows. Uwaga: nie należy nadużywać mechanizmów obiektowych, projekt z AAL dotyczy algorytmów a nie programowania obiektowego, tak więc mechanizmów obiektowych należy używać w taki sposób i tam gdzie są one uzasadnione i upraszczają implementację, a nie jako "sztuki dla sztuki". Samodokumentowanie. Każdy projekt powinien zawierać plik tekstowy readme.txt, w którym należy umieścić zwięzłe informacje dotyczące organizacji kodu źródłowego oraz podstawowe dane o problemie i algorytmie. W szczególności powinna tam znaleźć się: "wizytówka" studenta krótka specyfikacja problemu (albo przynajmniej tytuł problemu) – jednoznacznie identyfikujący realizowane zadanie informacja o możliwych poleceniach aktywacji programu (opcje, parametry, ...) opis konwencji dotyczących danych wejściowych i prezentacji wyników krótki opis metody rozwiązania, zastosowanych algorytmów i struktur danych informacje o funkcjonalnej dekompozycji programu na moduły źródłowe - nagłówkowe i implementacyjne ("przewodnik" po plikach źródłowych) inne informacje dodatkowe o szczególnych decyzjach projektowych (np. ograniczenia dotyczące rozmiaru problemu, charakterystyki generatorów danych testowych, specjalne konwencje w alokacji pamięci dynamicznej, wymagania dotyczące typów parametryzujących szablony, konwencje związane z obsługą sytuacji wyjątkowych, itp.). UWAGA: Plik readme.txt nie zastępuje dokumentacji końcowej. Każdy plik źródłowy musi być opatrzony komentarzem nagłówkowym z nazwiskiem studenta i tytułem problemu. Dekompozycja. Program składa się z dwu logicznych części: części realizującej struktury danych i algorytmy potrzebne w rozwiązaniu problemu (definicja i implementacja odpowiednich klas) oraz z części realizującej interfejs użytkownika. Projektując warstwę algorytmiczną należy oczywiście brać pod uwagę potrzeby interakcji z użytkownikiem i stosowane konwencje wejścia-wyjścia, ale nie powinno to powodować sztywnego związania z tymi konwencjami (np. zmiana konwencji WEWY z tekstowej na graficzną nie powinna wymagać modyfikacji warstwy algorytmicznej, a jedynie modyfikację/uzupełnienie warstwy odpowiedzialnej za interfejs użytkownika). Samoprezentacja programu. Program powinien zachowywać się bez tajemnic użytkowych. W szczególności jeden z typowych sposobów aktywacji programu (np. wg konwencji systemu UNIX) powinien pokazywać wszystkie prawidłowe formy aktywacji lub podawać nazwę pliku z informacjami dodatkowymi. Wybór konwencji we-wy. Jeżeli program może ograniczyć się tylko do WE-WY znakowego, to wystarczy zatroszczyć się o prostą i czytelną prezentację danych i wyników. W niektórych przypadkach, przy spełnieniu pewnych ograniczeń, można wyniki prezentować w postaci pseudograficznej (czyli znakowo z uproszczonym wrażeniem graficznym). Wiele z proponowanych problemów wymaga jednak prezentacji graficznej danych i wyników. Interakcyjność nie jest potrzebna – wystarczy dobrze opracowana bierna wizualizacja. 1 Dane wejściowe (instancje problemu). Wybór danych do testowania algorytmu powinien uwzględniać szczególne sytuacje istotne z punktu widzenia (1) badania poprawności (2) oceny złożoności. W większości przypadków generacja instancji problemów wg żądanych rozmiarów jest zagadnieniem samym w sobie i wymaga opracowania pomocniczych algorytmów generacji. Bezwzględnie należy unikać „zaszywania” w kodzie nazw plików z danymi wejściowymi czy z wynikami i innych usztywniających chwytów (np. umieszczania w danych statycznych instancji testowych problemu). Tryby wykonania. Program powinien umożliwiać 3 rodzaje wykonań: 1. wg danych dostarczonych ze strumienia wejściowego (standardowego lub pliku) dla sekwencji konkretnych problemów; ten tryb pozwala testować poprawności dla małych instancji 2. wg danych generowanych automatycznie (losowo) z ewentualną parametryzacją generacji określaną przez użytkownik; ten tryb także służy do testowania poprawności 3. wykonanie z generacją danych, pomiarem czasu i prezentacją wyników pomiarów. Dla niektórych problemów mogą być celowe inne tryby wykonania lub jeden z trybów wykonania 1, 2 podanych wyżej może okazać się zbędny (do ustalenia z prowadzącym). Styl. W programie należy przestrzegać zasady dobrego stylu kodowania (przejrzysty układ tekstu programu uwzględniający konstrukcje zagnieżdżone; odpowiednia zawartość i porządek konstrukcji językowych w plikach źródłowych; stosowanie identyfikatorów ułatwiających zrozumienie kodu; zwięzłe komentarze dla funkcji nietrywialnych; komentarze objaśniające algorytm wewnątrz funkcji). Nazwy plików powinny sugerować ich zawartość i rolę w programie. Przed przekazaniem projektu do oceny proszę przeczytać kod i usunąć pozostające zwykle po fazie uruchamiania rozmaite nieużytki, dziwne komentarze itp. Proszę także zatroszczyć się o uzyskanie kodu z czystą kompilacją (bez ostrzeżeń). Dokumentacja. Wraz z programem źródłowym trzeba przekazać dokumentację końcową w formie elektronicznej (dokument pdf jest wystarczający, postać edytowalna nie jest potrzebna) zawierającą opis problemu i metody (lub metod) rozwiązania, opis wykorzystywanych struktur danych i algorytmów pomocniczych oraz ocenę spodziewanej złożoności algorytmu (wykorzystaną w trybie wykonania 3.). Prostą wskazówkę, którą należy kierować się przygotowując dokumentację programu, zawiera pytanie: czy opis zadowoliłby mnie samego gdybym o problemie i jego rozwiązaniu miał dowiedzieć się z tego dokumentu? Ewentualne dodatkowe ustalenia szczegółowe dotyczące zawartości dokumentacji końcowej należy uzgodnić z prowadzącym projekt. Pomiary czasu wykonania. W każdym projekcie oczekuje się: (1) przeprowadzenia analizy złożoności zaproponowanego algorytmu oraz (2) wsparcia dla wykonywania eksperymentów z pomiarami czasu dla różnych (wybranych przez użytkownika) rozmiarów problemu. Wynikiem analizy jest oszacowanie asymptoty O(T(n)); wsparcie dla eksperymentów pomiarowych polega na możliwości rejestracji ciągu wartości t(n1), ... t(nk) konkretnych czasów wykonania dla instancji problemu o rozmiarach n1, ... , nk i generacji zestawienia wyników jak w poniższej tabeli. Jeśli ocena teoretyczna T(n) jest zgodna z wynikami pomiarów, to potwierdzenie tego powinno być natychmiast widoczne w tabeli. 2 Tabela wyświetlana na ekranie Algorytm z asymptotą O(T(n)) n t(n)[ms] q(n) n1 t(n1) . n2 t(n2) . .... .... . nmediana t(nmediana) 1.0 .... .... . nk-1 t(nk-1) . nk t(nk) . Przez q(n) oznaczono (znormalizowany dla nmediana ) współczynnik zgodności oceny teoretycznej z pomiarem czasu: q ( n) t (n) t (n) T (nmediana ) cT (n) T (n) t (nmediana ) Według takiej tabelki łatwo ocenić, czy ocena teoretyczna jest dobra (w kolumnie q(n) wszystkie wartości bliskie 1), czy też w ocenie T(n) nastąpiło przeszacowanie (q(n) malejące) bądź niedoszacowanie (q(n) rosnące). Użytkownik powinien móc wybrać rozmiary problemu, dla których zostaną przeprowadzone pomiary. Terminy. Do dnia 9 grudnia 2016 trzeba przygotować koncepcję rozwiązania problemu i przedstawić ją prowadzącemu projekt do zaakceptowania. Niedotrzymanie terminu może spowodować zmniejszenie liczby punktów za projekt (do 5p za tydzień opóźnienia). Zakończenie projektu (prezentacja ostatecznej wersji algorytmu i przekazanie dokumentacji końcowej) powinno nastąpić do dnia 17 stycznia 2017; termin ostateczny do 26 stycznia przeznaczony jest na ewentualne uzupełnienia / korekty projektu według wcześniejszego ustalenia z prowadzącym. Zasady oceniania Łącznie można uzyskać 30 p., w tym: podejście do problemu, analiza złożoności, projekt wstepny (w sumie – ocena p.w.): 10 p. poprawność i kompletność implementacji (w tym "styl kodowania"): 10 p.; +3p za przenośność – tj. wersję Windows analiza wyników: 5 p. Dokumentacja końcowa : 5 p. Zasady kontaktowania się i prowadzenia konsultacji: E-mail: [email protected]; tel. (PW): 222347184; przypominam też o istnieniu ogólnodostępnej listy e-mail: [email protected] Konsultacje odbywają się zawsze we wtorki w godz 10:05-12:00; pok. 206; w wyjątkowych przypadkach mogą zostać przełożone na inny dzień, o czym uprzedzę mailowo z wyprzedzeniem. 3 B. proszę w miarę możności stawiać się na konsultacjach w godz 10:05 – 11:00 (bez konieczności uzgodnienia) lub zasygnalizować chęć przybycia na konsultacje w godz 11:00-12:00 co najmniej dzień wcześniej mailem. Na konsultacje zawsze można zgłaszać się z dowolnymi pytaniami dot. realizacji projektu, zarówno organizacyjnymi jak i merytorycznymi; w przypadku kwestii merytorycznych preferowana jest wizyta na konsultacjach (a nie e-mail – po prostu bardziej skomplikowane kwestie trudno omawia się przez pocztę elektroccizną). Sprawy organizacyjne, dot. np. terminów, itp. można konsultować emailem. Rozdanie zadań nastąpi zdalnie. Projekt wstępny proszę przekazać w wymaganym terminie (lub wcześniej) w postaci wydrukowanej na konsultacjach; w momencie przekazania nie jest konieczne (choć oczywiście wskazane) osobiste stawienie się. Projekt wstępny prosze też wysłać e-mailem na podany wcześniej adres podając w temacie: "AAL Projekt Wstępny Imię Nazwisko". Przekazanie wydruku jest jednak obowiązkowe, za datę przekazania projektu uznaję datę przekazania wydruku, a nie wysłania maila! Po zebraniu wszystkich (lub większości) projektów wstepnych opublikuję punktację oraz indywidualne uwagi; po tym momencie zachęcam do odwiedzin w czasie konsultacji w celu omówienia oceny projektu wstępnego. "Zdanie" projektu końcowego wymaga osobistego pojawienia się na konsultacjach; konieczne jest: (1) przeprowadzenie pokazu działania programu; (2) przekazanie wydrukowanej dokumentacji końcowej. Dopiero po wstępnym pozytywnym zaopiniowaniu projektu poproszę indywidualnie o (3) wysłanie mailem źródeł do weryfikacj (lub poprawki). Dokładne zalecenia dot. sposobu przekazania źródeł podam osobno. Uwaga: przez "zdaniem" projektu nie należy przekazywać mailem ani w innej postaci źródeł ani dokumentacji. Nie jest możliwe zdalne zaliczenie projektu, jedyna dopuszczalna forma jest opisana punkt wyżej. 4