Home Teaching Contact

Wprowadzenie do sztucznej inteligencji [2024L]

  1. Informacje o laboratorium
  2. Zadania laboratoryjne

Informacje o laboratorium

Zasady ogólne


Laboratorium odbywa się w każdy wtorek 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: 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.

Dokumentacja oraz kod źródłowy

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 || ipynb dokumentacji oraz pliki źródłowe programu. Plik archiwum należy nazwać zgodnie według poniższego wzoru:


wsi-{numer indeksu}-{numer ćwiczenia}.zip

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.

Ocena oraz jej kryteria

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.

Terminarz

Temat Start Oddanie Punktacja
Przeszukiwanie przestrzeni 27.02.2024 12.03.2024 0-7
Algorytmy ewolucyjne i genetyczne 12.03.2024 26.03.2024 0-7
Dwuosobowe gry deterministyczne 26.03.2024 16.04.2024 0-7
Regresja i klasyfikacja 16.04.2024 07.05.2024 0-7
Sztuczne sieci neuronowe 07.05.2024 21.05.2024 0-8
Uczenie się ze wzmocnieniem 21.05.2024 04.06.2024 0-7
Modele bayesowskie 04.06.2024 11.06.2024 0-7

Zadania laboratoryjne

Zadanie 1.

Zaimplementuj algorytm gradientu prostego. Następnie zbadaj zbieżność algorytmu, używając następującej funkcji: $$q(\textbf{x}) = \sum^{n}_{i = 1}\alpha^{\frac{i - 1}{n - 1}}x^{2}_{i},\; \textbf{x}\in [-100, 100]^{n} \subset \mathbb{R}^{n}, n = 10.$$

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.
      

Zadanie 2.

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.

Zadanie 3.

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.

Zadanie 4.

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.

Zadanie 5.

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:

Do implementacji zadanego aproksymatora lub solwera optymalizacyjnego możesz korzystać z zewnętrznych bibliotek: np. numpy, scipy, scikit-learn.

Zadanie 6.

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.