Laboratorium odbywa się w każdy czwartek między godziną 12:15 a 14: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: ). 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 | Punktacja |
---|---|---|
Przeszukiwanie przestrzeni | 2025-03-04 | 0-7 |
Algorytmy ewolucyjne i genetyczne | 2025-03-18 | 0-7 |
Dwuosobowe gry deterministyczne | 2025-04-01 | 0-7 |
Regresja i klasyfikacja | 2025-04-15 | 0-7 |
Sztuczne sieci neuronowe | 2025-05-06 | 0-8 |
Uczenie się ze wzmocnieniem | 2025-05-20 | 0-7 |
Modele bayesowskie | 2025-06-03 | 0-7 |
Zaimplementuj algorytm gradientu prostego. Następnie zbadaj zbieżność algorytmu, używając następujących funkcji:
Zbadaj wpływ początkowej 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 początkowe 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 posiadać co najmniej dwa warunki stopu.
Sugerowana sygnatura funkcji:
def solver(
eval_func: Callable[[Sequence[float]], float],
x0: Sequence[float],
params: SolverParameters,
...
) -> SolverResult:
Zaprojektuj i zaimplementuj algorytm ewolucyjny. Następnie zbadaj jego
zbieżność na funkcjach F3
oraz F19
z benchmarku
CEC2017
dla wymiarowości n = 10
. Interfejs Twojego algorytmu powinien
być taki jak w zadaniu poprzednim. Pamiętaj o tym, że prezentowane wyniki
powinny być uśrednione.
Ponadto porównaj zbieżność algorytmu ewolucyjnego na wskazanych funkcjach z własną implementacją algorytmu gradientu prostego.
Rozważ zastosowanie klas Player
, State
,
Game
do reprezentacji -- kolejno -- gracza, stanu gry oraz sesji gry
gry.
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. Porównaj działanie algorytmu SVM względem wybranego modelu bazowego.
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!