Home Teaching Contact

Wstęp do sztucznej inteligencji [2025Z]

  1. Informacje o laboratorium
  2. Zadania laboratoryjne

Informacje o laboratorium

Zasady ogólne


Laboratorium odbywa się w każdy czwartek między godziną 08:15 a 10:00 w sali laboratoryjnej 09 (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. 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 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.

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 Punktacja
Algorytmy ewolucyjne i genetyczne 2025-10-09 0-7
Dwuosobowe gry deterministyczne 2025-10-23 0-7
Regresja i klasyfikacja 2025-11-06 0-7
Przeszukiwanie przestrzeni 2025-11-27 0-7
Sztuczne sieci neuronowe 2025-12-11 0-8
Uczenie się ze wzmocnieniem 2026-01-08 0-7
Modele bayesowskie 2026-01-22 0-7

Zadania laboratoryjne

Zadanie 1.

Zaprojektuj i zaimplementuj algorytm ewolucyjny (np. strategię ewolucyjną (1+1)). Następnie zbadaj jego zbieżność na funkcjach

dla wymiarowości n = 10, 30. Przyjmij maksymalną liczbę wywołań funkcji celu równą: $$ FE_{max} = 100 \times n $$ Pamiętaj, że implementacja solwera powinna być w stanie zoptymalizować 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:
    

Zadanie 2.

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.

Pamiętaj, aby logika gracza była odeseparowana od logiki samej gry.

Zadanie 3.

Zaimplementuj algorytm drzewa klasyfikującego 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. Porównaj działanie implementowanego algorytmu względem wybranego modelu bazowego (np. regresja logistyczna).

Zadanie 4.

Zaimplementuj algorytm gradientu prostego. Następnie zbadaj zbieżność algorytmu, używając następujących funkcji:

Jako dziedzinę funkcji celu przyjmij zbiór $$[-10, 10]^{n} \subset \mathbb{R}^{n}, n = 10.$$

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: