Laboratorium odbywa się w każdy czwartek między godziną 08:15 a 10:00 w sali laboratoryjnej 011 (piwnica) na wydziale EiTI. Do sali laboratoryjnej zabrania się wnoszenia okrycia wierzchniego, tj. kurtek, płaszczy, etc.
Sugerowanym językiem implementacji rozwiązań zadań laboratoryjnych jest język Python (sugerowana wersja: 3.12). Dopuszczalne jest użycie innego języka programowania (z wyłączeniem języków ezoterycznych). Wymagane jest, aby kod każdego ćwiczenia laboratoryjnego był sformatowany zgodnie z The Black Code Style: Current style.
Po odebraniu tematu ćwiczenia laboratoryjnego nie ma obowiązku fizycznej obecności w laboratorium. Ćwiczenia mogą być realizowane na komputerach osobistych. Należy jednak zadbać o to, aby przygotowane przez Państwa programy dały się uruchomić pod systemami operacyjnymi z rodziny GNU/Linux.
Ćwiczenia laboratoryjne wykonywane są pojedynczo z wyjątkiem ćwiczenia poświęconemu sieciom neuronowym, które wykonywane jest w parach.
Rozwiązaniem każdego ćwiczenia laboratoryjnego powinna być dokumentacja oraz kod źródłowy zaimplementowanych algorytmów.
Dokumentacja powinna składać się z sekcji, w których zostaną zawarte następujące informacje:
Rozwiązanie każdego ćwiczenia należy wysłać drogą mailową w formie archiwum
zip,
które powinno zawierać plik pdf
dokumentacji
oraz pliki źródłowe programu. Plik archiwum należy nazwać zgodnie według
poniższego wzoru:
wsi-{numer indeksu}-{numer ćwiczenia}.zip
Ponadto w wiadomości e-mail należy dostarczyć repozytorium git z kodem źródłowym oraz historią zmian. W tym celu można wykorzystać wydziałowego GitLaba lub dowolny publicznie dostępny serwer.
Uwaga!
Dokumentacja nie powinna przekraczać 5 stron A4. Domyślnym językiem, w którym dokumentacja powinna być napisana, jest język polski -- dopuszcza się także, aby dokumentacja była napisana w języku angielskim.
Rozwiązanie zadania laboratoryjnego ocenianie jest w skali 0-7 punktów lub 0-8 punktów (ćwiczenie dotyczące sieci neuronowych). Na ocenę składają się:
W celu uzyskania oceny należy zaprezentować działanie zaimplementowanego algorytmu przed prowadzącym w trakcie laboratorium oraz odpowiedzieć na jego pytania dotyczące raportu.
Opóźnienie w dostarczeniu rozwiązania skutkuje naliczaniemn kary w następujący sposób: $$ O_k = max\{O_p(1 - 10\%n),\; 0\} $$ gdzie \(n\) odpowiada liczbie dni opóźnienia, a \(O_k\) i \(O_p\) odpowiednio ocenie końcowej i proponowanej.
Temat | Start | Oddanie | Punktacja |
---|---|---|---|
Przeszukiwanie przestrzeni | 10.10.2024 | 24.10.2024 | 0-7 |
Algorytmy ewolucyjne i genetyczne | 24.10.2024 | 07.11.2024 | 0-7 |
Dwuosobowe gry deterministyczne | 07.11.2024 | 28.11.2024 | 0-7 |
Regresja i klasyfikacja | 28.11.2024 | 12.12.2024 | 0-7 |
Sztuczne sieci neuronowe | 12.12.2024 | 02.01.2025 | 0-8 |
Uczenie się ze wzmocnieniem | 02.01.2025 | 16.01.2025 | 0-7 |
Modele bayesowskie | 16.01.2025 | 23.01.2025 | 0-7 |
Zaimplementuj algorytm gradientu prostego. Następnie zbadaj zbieżność algorytmu, używając następujących funkcji:
Zbadaj wpływ wartości parametru kroku na zbieżność (wykres par (\(t, q(x_{t})\)), gdzie t to krok/numer iteracji) metody oraz czas jej działania. W swoich badaniach rozważ następujące wartości parametru \(\alpha \in \{1, 10, 100\}\).
Do wyliczenia gradientu funkcji możesz skorzystać z pakietu
autograd
. Pamiętaj, że implementacja solwera powinna być w
stanie zoptymalizowac każdą zadaną funkcję celu oraz posiadac co najmniej dwa warunki stopu.
Sugerowana sygnatura funkcji:
def solver(f, x0, ...) -> result:
^-------------- funkcja celu
^----------- punkt startowy
^------- pozostałe argumenty, np. parametry metody.
Zaimplementuj algorytm ewolucyjny (1+1)-ES z adaptacją zasięgu mutacji zgodnie z regułą 1/5-sukcesu. Zbadaj zaimplementowany solver na nastepujących funkcjach celu: kwadratowej, F3/CEC2017 oraz F7/CEC2017. W ramach badania sprawdź jaki wpływ na działanie algorytmu mają parametry sterujące regułą adaptacji zasięgu mutacji oraz początkowa wartość zasięgu mutacji. Porównaj działanie algorytmu z własną lub dostarczaną w ramach pakietów numerycznych implementacją algorytmu SGD. Pamiętaj, aby w badaniach skompensować stochastyczność solwera ewolucyjnego. Rozważ dwie wymiarowości zadania optymalizacji (liczba zmiennych decyzyjnych): 10 oraz 30.
Zaimplementuj algorytm min-max w grze kółko i krzyżyk na planszy 3x3. Program powinien grać sam ze sobą i wizualizować kolejne stany gry na terminalu. Zbadaj wpływ głębokości przeszukiwania drzewa gry na jakość uzyskanych wyników.
Rozważ zastosowanie klas Player
, State
,
Game
do reprezentacji -- kolejno -- gracza, stanu gry oraz samej
gry.
Pamiętaj, że implementacja musi być wykonana samodzielnie. Brak zrozumienia dostarczonego kodu rozwiązania równoważny jest plagiatowi.
Zaimplementuj algorytm SVM oraz zbadaj działanie algorytmu w zastosowaniu do zbioru danych Wine Quality Data Set.
W celu dostosowania zbioru danych do problemu klasyfikacji binarnej zdyskretyzuj zmienną objaśnianą. Pamiętaj, aby podzielić zbiór danych na zbiór trenujący oraz uczący.
Zbadaj wpływ hiperparametrów na działanie implementowanego algorytmu. W badaniach rozważ dwie różne funkcje jądrowe poznane na wykładzie.
Niech dana będzie funkcja \(f ∷ [-10, 10] \rightarrow R\) o następującej postaci: $$ f(x) = x^{2} * sin(x) + 100 * sin(x) * cos(x) $$ Zaimplementuj perceptron wielowarstwowy, który posłuży do aproksymacji funkcji.
Zbadaj:
Zaimplementuj algorytm Q-learning. Następnie, wykorzystując środowiskoTaxi, zbadaj wpływ hiperparametrów (współczynnik uczenia) oraz poznanych strategii eksploracji na działanie algorytmu.
Zaimplementuj naiwny klasyfikator Bayesa oraz zbadaj działanie algorytmu w zastosowaniu do zbioru danych Iris Data Set. Pamiętaj, aby podzielić zbiór danych na zbiór trenujący oraz uczący!