Zadania projektowe ZPR 2010Z, Paweł Szlendak

Konsultacje:Piatek 12.00 - 13.00, p.236
E-mail:p.szlendak(at)euromail.pl

UWAGA: Podane projekty sa przeznaczone do realizacji dla zespolow dwuosobowych. Istnieje mozliwosc rozszerzenia zakresu projektu dla zespolu trzyosobowego po wczesniejszej konsultacji.

|PRZYDZIELONE| Zadanie 1 - Symulator gry logicznej Abalone

Dostarczyć symulator gry Abalone. Implementacja ma zapewnić możliwość gry (symulacji gry) dla dwóch graczy. W wersji podstawowej nie uzględniać gracza komputerowego - ruch losowy.

Symulator powinien wyświetlać postęp gry (ułożenie planszy w poszczególych rundach). Dopuszczalna jest prosta wersja tekstowa gry w konsoli. Rozważyć użycie biblioteki boost::graph.

|PRZYDZIELONE| Zadanie 2 - Symulator gry logicznej Hive

Jak w zadaniu 2 - dla gry logicznej Hive

|PRZYDZIELONE| Zadanie 3 - Logger z dostępem wielowątkowym

Dostarczyć prostą bibliotekę implementującą system logowania zdarzeń do wykorzystania w aplikacji wielowątkowej. Założyć możliwość logowania zdarzeń z różnych modułów aplikacji (moduł np. identyfikowany po nazwie) oraz na różnym poziomie logowania (debug, info, warning, error, critical). Samą treść wiadomości do zalogowania traktować jako string. Zapewnić możliwość logowania zdarzeń na różne rodzaje wyjść tj. do pliku, na konsole. Umożliwić zmianę formatu wiadomości do zalogowania (formatters). Umożliwić włączenie/wyłączenie synchronizacji wyjścia.

Zaprezentować działanie loggera na testowej aplikacji powołującej kilka wątków i piszącej do logger'a z dużą częstotliwością. Zbadać narzut czasowy dla włączonej synchronizacji i bez synchornizacji wyjścia tj. wątków piszących do loggera (pliku).

Inspiracją dla systemu logowania może być boost::log lub logger w Pythonie. (w ograniczonym zakresie). Rozważyć użycie biblioteki boost::thread.

|PRZYDZIELONE| Zadanie 4 - Wielowątkowy serwer (TCP/IP) z usługą subskrypcji danych

Dostarczyć aplikację serwerową oferującą możliwość subskrypcji danych oraz aplikację kliencką testującą serwer.

Klient nawiązuje połączenie z serwerem (authorize) oraz subskrybuje pewne dane (subscribe). Każdy nowy request po stronie serwera przetwarzany jest w oddzielnym wątku. Zasubskrybowane dane są wysyłane automatycznie do klienta z pewnym interwałem czasowym do momentu zakończenia przez klienta subskrypcji (unsubscribe). Serwer może mieć wiele otwartych subskrypcji jednocześnie.

Na potrzeby projektu przyjąć, że subskrybowana wartość to np. czas serwera w UTC aktualizowany co 2 sekundy przez główny wątek serwera. Zaproponować prosty tekstowy protokół komunikacyjny dla wiadomości: authorize, subscribe, unsubscribe. Można wykorzystać istniejące format wymiany danych tekstowych np. JSON. Zapewnić możliwość wygodnego dodawania nowego typu subskrypcji.

Aplikacja kliencka (testująca serwer) powinna powoływać kilka wątków z których każdy subskrybuje czas serwera. Rozważyć użycie boost::asio i boost::thread.

|PRZYDZIELONE| Zadanie 5 - Porównanie implemetancji algorytmu uczenia sieci neuronowych

Dostarczyć dwóch różnych (pod względem wykorzystanych struktur danych) implementacji algorytmu wstecznej propagacji błędu uczenia sieci neuronowych. Jedna implementacja wykorzystująca boost::graph, druga implementacja wykorzystująca tylko podstawowe struktury danych (tablice i listy). Szczególną uwagę zwrocić na efektywność czasową i pamięciową obu implementacji.

Przetestować implementacje w zadaniu uczenia sieci neuronowej wykorzystując jeden zbiór danych np. z UCI Machine Learning Repository. Wskazać zalety i wady obu implementacji.

|PRZYDZIELONE| Zadanie 6 - Arkusz kalkulacyjny

Dostarczyć program arkusza kalkulacyjnego typu Excel (z ograniczoną funkcjonalnością).

W szczególności arkusz kalkulacyjny powinien:

Założyć istnienie więcej niż jednego akrusza na całą aplikację. Zaproponować obrazową prezentację działania arkusza w konsoli (bez GUI).