UWAGA!

Do wszystkich tematów (zarówno projekt 2. jak i 3.) należy przygotować dwa programy testujące. Pierwszy - podobnie jak w przypadku pierwszego projektu - powinien pokazywać możliwości klasy (preferowany jest program automatyczny, proszę nie skupiać się na interakcji z użytkownikiem). Drugi program powinien testować poprawność napisanego kodu (w wersji minimum należy przygotować plik sprawdzający implementację za pomocą makra assert (inne przykłady użycia makra można znaleźć na przykład tutaj. W projektach należy - o ile nie jest inaczej uzasadnione - korzystać z możliwości biblioteki STL. Kod źródłowy (projekt 2. i 3.) powinien być udokumentowany w sposób umożliwiający automatyczne wygenerowanie dokumentacji przy użyciu narzędzia doxygen (prezentacja jak to robić: tutaj - plik pdf lub tutaj). Należy wybrać dowolny z obsługiwanych sposobów dokumentowania kodu.
Do 3. projektu należy przygotować dwie dokumentcje - funkcjonalną i techniczną. Dokumentacja funkcjonalna powinna zostać przygotowana w formie elektronicznej (plik w formacie pdf lub ps), zawierać maksymalnie 4 strony tekstu i opisywać sposób działania programu, itp. (dokumentacja użytkownika!). Dokumentacja techniczna (klasy, struktura projektu, itp.) powinna zostać wygenerowana za pomocą narzędzia doxygen w formacie HTML i - podobnie jak w przypadku dokumentacji funkcjonalnej - należy ją zaprezentować podczas oddawania projektu oraz wysłać razem z kodem programu.

Do wszystkich projektów należy przygotować pliki Makefile, w czasie tworzenia projektu należy stosować się do zasad programowania zorientowanego obiektowo. Należy również pilnować czytelności kodu, co wiąże się z konsekwentnym trzymaniem się wybranego stylu.

Tam gdzie w treści projektu pojawia się polecenie dotyczące implementacji należy zaprojektować i zaimplementować pełną funkcjonalność danej klasy (zestawu klas).
Tam gdzie mowa o zaprojektowaniu klasy (zestawu klas) należy zaprojektować jej strukturę (pola) oraz udostępnić komplet metod (nie posiadających pełnej funkcjonalności, np. takich, które wypisują jedynie swoją nazwę lub zwracają tymczasową wartość - do celów programu testującego).

Uprzedzając ewentualne pytania do niektórych projektów:
  • Format ARFF jest to format zapisu danych stworzony na potrzeby oprogramowania Weka. Opis formatu znajduje się tutaj. Dane w formacie ARFF można pobrać tutaj.
  • Walidacja modelu wygenerowanego przez algorytm klasyfikacji danych oznacza sprawdzenie jego możliwości predykcyjnych na zbiorze danych, który nie był użyty do budowy tego modelu. W przypadku projektów, w których wymagana jest walidacja zbiorem testowym należy dokonać losowego podziału całego zestawu danych na dwa rozłączne zbiory - trenujący (na którym zbudowany będzie model) i testowy (na którym model będzie sprawdzany). Walidacja krzyżowa opisana jest tutaj.
  • W niektórych projektach określone są klasy atrybutów na jakich ma działać algorytm uczenia się. Dla uproszczenia należy przyjąć, że atrybuty nominalne to takie, które charakteryzują się skończonym lub przeliczalnym zbiorem wartości dyskretnych (kolor, dzień tygodnia, grupa wiekowa, przedziały temperatur), zaś numeryczne to takie, które przyjmują wartości ze zbioru liczb rzeczywistych (pomiar natężenia prądu, wiek, temperatura).
Tematy projektów:

  • Temat 1 Grupowanie danych za pomocą algorytmów k-means i k-medoids. Wykrywanie istotnych zmiennych (za pomocją losowej permutacji wartości poszczególnych zmiennych). Dane wejściowe - pliki w formacie ARFF.

    Projekt 2. Projekt klas AlgorytmGrupowania i wywodzących się z niej klas AlgorytmKMeans i AlgorytmKMedoids. Implementacja zestawu klas do obsługi przechowywania danych oraz zestawu klas do wyznaczania odległości między punktami danych (hierarchię należy zaprojektować w sposób umożliwiający proste dodawanie nowych miar odległości). Projekt hierarchii klas do obsługi plików z danymi (w szczególności do obsługi formatu ARFF).

    Projekt 3. Implementacja klasy do obsługi plików w formacie ARFF. Realizacja programu.

    Materiały: k-means i k-medoids

  • Temat 2 Klasyfikacja za pomocą drzew decyzyjnych. Atrybuty nominalne i numeryczne (prosta metoda dyskretyzacji). Dane wejściowe - pliki w formacie ARFF.

    Projekt 2. Implementacja zestawu klas do obsługi węzłów drzewa (węzeł wewnętrzny i liść). Implementacja hierarchi klas do obsługi wyznaczania jakości testu w drzewie i właściwej klasy wyznaczającej entropię. Projekt hierarchii klas do wyznaczania metody oceny jakości klasyfikacji (podział na zbiór trenujący i testowy oraz walidacja krzyżowa). Projekt hierarchii klas do obsługi plików z danymi (w szczególności do obsługi formatu ARFF).

    Projekt 3. Implementacja klasy do obsługi plików w formacie ARFF. Realizacja programu.

    Materiały: Strona dr Pawła Cichosza i Wykłady ze Sztucznej Inteligencji

  • Temat 3 Gra w statki dla dwóch graczy. Rozmiar planszy, wielkości i liczba statków są parametrami, które można konfigurować. Automatyczne rozmieszczanie statków. Gracze jako dwa niezależne programy komunikujące się za pomocą pliku lub plików (uruchomione na tym samym koncie). Wykorzystanie biblioteki ncurses.

    Projekt 2. Implementacja klasy do konfiguracji gry. Projekt hierarchii klas do obsługi wyświetlania gry (Klasa Plansza i wywodząca się z niej klasa PlanszaNcurses). Implementacja klasy do komunikacji między programami. Projekt hierarchii klas reprezentujących statki.

    Projekt 3. Realizacja programu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 4 Program uczący się grać w kółko i krzyżyk (kwadratowa plansza o dowolnej wielkości - w praktyce program testowany będzie na planszy o maksymalnym wymiarze 5 na 5 pól). Program powinien starać się nie popełniać tych samych błędów. Program powinien uczyć się w dwóch trybach - rozgrywając losowe partie komputer-komputer oraz grając z użytkownikiem. Zdobytą „wiedzę” program powinien zapisywać w pliku. Wykorzystanie biblioteki ncurses.

    Projekt 2. Projekt hierarchii klas do obsługi wyświetlania gry (Klasa Plansza i wywodząca się z niej klasa PlanszaNcurses). Implementacja hierarchii klas reprezentujących graczy. Implementacja klasy do przechowywania zdobywanej wiedzy.

    Projekt 3. Realizacja programu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 5 Gra w szachy dla dwóch osób. Dodatkowo tryb gry na czas. Wykorzystanie biblioteki ncurses.

    Projekt 2. Projekt hierarchii klas do obsługi wyświetlania gry (Klasa Plansza i wywodząca się z niej klasa PlanszaNcurses). Implementacja hierarchii klas reprezentujących figury.

    Projekt 3. Realizacja programu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 6 Gra w „Reversi" (przeciwko komputerowi). Wykorzystanie biblioteki ncurses.

    Projekt 2. Projekt hierarchii klas do obsługi wyświetlania gry (Klasa Plansza i wywodząca się z niej klasa PlanszaNcurses). Implementacja hierarchii klas reprezentujących graczy (człowiek, komputer), umożliwiająca dodawanie w łatwy sposób nowych poziomów "inteligencji" komputera.

    Projekt 3. Realizacja programu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 7 Gra “Saper”. Oprócz standardowych zestawów plansz należy zrealizować tryb, w którym rozmiar planszy i liczba min są parametrami, które można konfigurować. Możliwość zapisu i odczytu gry. Statystyki gry (liczba pozostałych min, czas gry). Wykorzystanie biblioteki ncurses.

    Projekt 2. Projekt hierarchii klas do obsługi wyświetlania gry (Klasa Plansza i wywodząca się z niej klasa PlanszaNcurses). Implementacja hierarchii klas reprezentujących pola planszy. Implementacja klasy do zapisu i odczytu stanu gry.

    Projekt 3. Realizacja porgramu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 8 Kalendarz z możliwością dodawania notatek różnego typu i opcją przypominania (możliwość ustawienia czasu przypomnienia). Należy przygotować prosty interfejs graficzny. Należy również umożliwić wymianę notatek między kalendarzami. W tym celu zaproponować własne klasy do serializacji i deserializacji. Wykorzystanie biblioteki ncurses.

    Projekt 2. Projekt hierarchii klas (ogólnych) służących do serializacji i deserializacji obiektów do różnych typów plików (do implementacji w projekcie wybrać dowolny format binarny lub tekstowy). Implementacja hierarchii klas dla notatek dziedziczących po klasie serializującej.

    Projekt 3. Implementacja serializacji. Realizacja programu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 9 Program wspomagający użytkownika w nauce szybkiego pisania na klawiaturze. Program powinien umożliwiać wybranie jednego z dostępnych ćwiczeń. Ćwiczenia, zapisane w pliku tekstowym, zawierają tekst, który użytkownik musi jak najszybciej przepisać na ekran komputera. Należy zaimplementować kilka trybów pracy , np. przepisywanie pełnego tekstu, poszczególne słowa z ćwiczenia pojawiają się w kolejności losowej, itp. Wykorzystanie biblioteki ncurses.

    Projekt 2. Implementacja klasy do wczytywania ćwiczeń z pliku. Implementacja hierarchii klas reprezentującej różne tryby pracy. Implementacja klasy do wyznaczania statystyk z wykonanego ćwiczenia (czas wykonania, liczba błędów, itp.)

    Realizacja programu.

    Projekt 3.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 10 Mini-SQL dla plików w formacie ARFF. Do zaimplementowania proste zapytania typu: SELECT * FROM tabela; SELECT kolumna FROM tabela; SELECT avg(kolumna) FROM tabela; SELECT DISTINCT kolumna FROM tabela; SELECT kolumna FROM tabela WHERE warunek logiczny;.

    Projekt 2. Projekt hierarchii klas do obsługi plików z danymi (w szczególności do obsługi formatu ARFF). Implementacja hierarchii klas do przechowywania wczytanych danych. Implementacja parsera poleceń.

    Projekt 3. Implementacja klasy do obsługi plików w formacie ARFF. Realizacja programu.

  • Temat 11 Mini-Matlab. Praca na zmiennych (tworzenie, przypisywanie wartości, usuwanie). Operacje na wektorach i macierzach (tworzenie, usuwanie, dodawanie, odejmowanie, mnożenie). Obsługa operacji złożonych (np. a=b=c). Przykłady działania:
    > a=5
    > a
    	[5]
    > v=[1,2,3]
    > u=[1,2,3]
    > w=v+u
    > w
    	[2,4,6]
    
    Wyświetlanie listy zmiennych zainicjowanych w bieżącej sesji. Wykorzystanie biblioteki ncurses.

    Projekt 2. Implementacja hierarchii klas do obsługi zmiennych (skalary, wektory, macierze). Implementacja parsera poleceń. Projekt hierarchii klas do wykonywania obliczeń na zmiennych.

    Projekt 3. Realizacja programu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 12 Klasyfikacja i regresja za pomocą algorytmu k-najbliższych sąsiadów (k-nearest neighbors, knn). Atrybuty numeryczne i nominalne. Walidacja zbiorem testowym. Dane wejściowe - pliki w formacie ARFF.

    Projekt 2. Projekt hierarchii klas do obsługi plików z danymi (w szczególności do obsługi formatu ARFF). Implementacja hierarchii klas reprezentujących algorytm knn (klasyfikacja i regresja). Implementacja hierarchii klas do przechowywania wczytanych danych. Projekt hierarchii klas do wyznaczania metody oceny jakości klasyfikacji (podział na zbiór trenujący i testowy oraz walidacja krzyżowa).

    Projekt 3. Implementacja klasy do obsługi plików w formacie ARFF. Realizacja programu.

    Materiały: wiki i statsoft

  • Temat 13 Gra „Backgammon” przeciwko komputerowi. Wykorzystanie biblioteki ncurses.

    Projekt 2. Projekt hierarchii klas do obsługi wyświetlania gry (Klasa Plansza i wywodząca się z niej klasa PlanszaNcurses). Implementacja hierarchii klas reprezentujących graczy (człowiek, komputer), umożliwiająca dodawanie w łatwy sposób nowych poziomów "inteligencji" komputera.

    Projekt 3. Realizacja programu.

    Materiały: NCURSES Programming HOWTO i Ncurses - Wstęp

  • Temat 14 Grupowanie hierarchiczne wstępujące (aglomeracyjne). Dane wejściowe - pliki w formacie ARFF (tylko dane numeryczne). Ocena jakości grupowania na różnych poziomach za pomocą wyznaczania korelacji pomiędzy odległościami między danymi a grupami, do których należą.

    Projekt 2. Projekt hierarchii klas do obsługi plików z danymi (w szczególności do obsługi formatu ARFF). Implementacja hierarchii klas do przechowywania wczytanych danych. Implementacja hierarchii klas reprezentujących miary odległości między danymi. Projekt hierarchii klas reprezentujących różne rodzaje mierzenia odległości pomiędzy grupami (do implementacji metody complete-linkage i single-linkage). Projekt klasy reprezentującej algorytm i struktury danych niezbędne do przechowywania informacji o zawartości grup na poszczególnych poziomach grupowania.

    Projekt 3. Implementacja klasy do obsługi plików w formacie ARFF. Realizacja programu.

    Materiały: wiki en

hydrosiew proagro