PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI INFORMACJE PODSTAWOWE Kontakt pok. 230 C-3, tel.: 071 320 2480 1 Wykład 1 dr inż. Łukasz Jeleń Na podstawie wykładów dr. T. Fevensa e-mail: lukasz.jelen@pwr.edu.pl www: lukasz.jelen.staff.iiar.pwr.wroc.pl 2 EFEKTY KSZTAŁCENIA Z zakresu wiedzy (dot. wykładu): PEK_W01 zna podstawowe i zaawansowane struktury danych (tablice, listy, stosy, kolejki, kopce, tablice haszujące, drzewa, grafy) i efektywność podstawowych operacji na nich (dodawanie, usuwanie, wyszukiwanie elementów). PEK_W02 zna zasadę działania i efektywność podstawowych algorytmów sortowania, wyszukiwania, wyznaczania minimalnego drzewa rozpinającego, najkrótszych ścieżek, maksymalnego przepływu. PEK_W03 jest w stanie wyjaśnić budowę i zasadę działania Deterministycznej oraz Niedeterministycznej Maszyny Turinga oraz różnice między nimi. PEK_W04 zna reguły kodowania danych wejściowych problemów, ich efektywność oraz wpływ na rozmiar instancji problemu. PEK_W05 zna definicje algorytmu wielomianowego i ponadwielomianowego. PEK_W06 zna podstawowe klasy złożoności obliczeniowej problemów kombinatorycznych decyzyjnych (P, NP, NP-zupełne, silnie NP-zupełne), relacje między nimi oraz konsekwencje i ograniczenia wynikające z przynależności problemu do danej klasy. 3 Z zakresu wiedzy (dot. wykładu) - c.d.: PEK_W07 zna definicje wielomianowej i pseudowielomianowej transformacji. PEK_W08 zna kroki dowodzenia NP-zupełności problemów decyzyjnych oraz sposób dowodzenia przynależności problemów do klasy P. PEK_W09 jest w stanie scharakteryzować analizę najgorszego przypadku, eksperymentalną oraz probabilistyczną, a także miary oceny jakości algorytmów przybliżonych. PEK_W10 jest w stanie wyjaśnić istotę algorytmów oraz schematów aproksymacyjnych. PEK_W11 zna zasadę działania wybranych algorytmów metaheurystycznych (poszukiwania z zakazami, symulowanego wyżarzania, poszukiwania genetycznego, poszukiwania mrówkowego). PEK_W12 zna podstawowe metody sztucznej inteligencji: strategie przeszukiwań drzew rozwiązań, algorytm A*, algorytm MINIMAKS, algorytm cięć alfa-beta. EFEKTY KSZTAŁCENIA 4
ZALICZENIE LITERATURA Efekty kształcenia http://weka.pwr.wroc.pl/ Studenci -> Plany i programy studiów -> Karty przedmiotów Ocena z wykładu Ocena końcowa = 60% oceny z kolokwium + 40% oceny z laboratorium Kolokwium zaliczeniowe: przedostatni wykład -> 05.06.2015 LITERATURA PODSTAWOWA 5 LITERATURA [1] T. Cormen, C.E. Leiserson, R.L. Rivest, Wprowadzenie do algorytmów, WNT 2003. [2] N. Wirth, Algorytmy + struktury danych = programy, WNT 2004. [3] J. Błażewicz, Problemy optymalizacji kombinatorycznej, PWN, Warszawa 1996. [4] A. Janiak, Wybrane problemy i algorytmy szeregowania zadań i rozdziału zasobów, Akademicka Oficyna Wydawnicza PLJ, Warszawa 1999. [5] C. Smutnicki, Algorytmy szeregowania, Exit, Warszawa 2002. [6] L. Bolc, J. Cytowski, Metody przeszukiwania heurystycznego, PWN 1989. [7] P. Wróblewski, Algorytmy, struktury danych i techniki programowania, Helion 2003. 7 LITERATURA UZUPEŁNIAJĄCA: [1] M. Sysło, N. Deo, J. Kowalik, Algorytmy optymalizacji dyskretnej, PWN, Warszawa 1999. [2] T. Sawik, Badania operacyjne dla inżynierów zarządzania, Wydawnictwa AGH, Kraków 1998. [3] N.J. Nilsson, Principles of Artificial Intelligence, Springer-Verlag, 1982. [4] S. Kirkpatrick, C.D. Gelatt, M.P. Vecchi, Optimization by Simulated Annealing, Science 220 (4598), str. 671 680, 1983. [5] F. Glover, Tabu Search - Part I, ORSA Journal on Computing, 1 (3), str. 190-206, 1989. 6 LITERATURA [6] F. Glover, Tabu Search - Part II, ORSA Journal on Computing, 2 (1), str. 4-32, 1990. [7] Z. Michalewicz Algorytmy genetyczne + struktury danych = programy ewolucyjne, Warszawa, WNT 1996. [8] M. Dorigo, Ant Colony Optimization, MIT Press, 2004. 8
JAK DOSTAĆ DOBRĄ OCENĘ? Być systematycznym Robić zadania z list zadań PROBLEM VS. ALGORYTM Co to jest? Przychodzić na zajęcia Sprawdzona metoda: zaimplementować przykłady przerabiane na wykładzie Szukać dodatkowych przykładów w Internecie 9 10-1 PROBLEM VS. ALGORYTM PROBLEM VS. ALGORYTM Ciasto: Ciasto: Co to jest? 1 szklanka wody Co to jest? 1 szklanka wody 150g margaryny 150g margaryny 1 szklanka mąki pszennej 1 szklanka mąki pszennej 5 jajek 5 jajek szczypta soli szczypta soli szczypta proszku do pieczenia szczypta proszku do pieczenia Mając dane wejściowe (składniki) mamy rozwiązać problem pieczenia ciasta 10-2 10-3
PROBLEM VS. ALGORYTM PRZEPIS NA CIASTO Ciasto: Co to jest? 1 szklanka wody 150g margaryny 1 szklanka mąki pszennej 5 jajek szczypta soli szczypta proszku do pieczenia Mając dane wejściowe (składniki) mamy rozwiązać problem pieczenia ciasta 10-4 Jak? 1. Przygotować ciasto. Wodę zagotować z margaryną. ( ) po jednym jajku, szczyptę soli i proszek do pieczenia. 2. Ciasto podzielić na 2 części. 3. Formę prostokątną o wymiarach ok. 35x 24cm wysmarować margaryną i posypać mąką. Połowę ciasta rozprowadzić łyżką w formie. 4. Piec w nagrzanym piekarniku, na złoty kolor, ok. 30min. w temperaturze 180 C. W ten sam sposób upiec drugą połowę ciasta. 5. Przygotować masę budyniową. 2 szklanki mleka i cukier zagotować. ( ) dodawać stopniowo zimny budyń. 6. Masę rozsmarować na jednym blacie ciasta. ( ) Ciasto wstawić do lodówki, na co najmniej 2 godz. 7. Gotowe posypać cukrem pudrem. 11-1 PRZEPIS NA CIASTO PRZEPIS NA CIASTO Przygotuj Piekarnik : 180 0 Woda: 250ml Olej: 83ml Instrukcje Podgrzej piekarnik do 180 0. Posmaruj formę margaryną Ciasto Pieczenie W wysokim naczyniu wymieszać zawartość torebki z wodą i olejem. Ubijać przez 2 minuty na wysokich obrotach 32x22 cm: 30 40 min. ø 20 cm: 30 40 min. Forma do babeczek: 15 20 min. Przepis Przygotuj Piekarnik : 180 0 Woda: 250ml Olej: 83ml Instrukcje Podgrzej piekarnik do 180 0. Posmaruj formę margaryną Ciasto Pieczenie W wysokim naczyniu wymieszać zawartość torebki z wodą i olejem. Ubijać przez 2 minuty na wysokich obrotach 32x22 cm: 30 40 min. ø 20 cm: 30 40 min. Forma do babeczek: 15 20 min. 1. Przygotować ciasto. Wodę zagotować z margaryną. ( ) po jednym jajku, szczyptę soli i proszek do pieczenia. 2. Ciasto podzielić na 2 części. 3. Formę prostokątną o wymiarach ok. 35x 24cm wysmarować margaryną i posypać mąką. Połowę ciasta rozprowadzić łyżką w formie. 4. Piec w nagrzanym piekarniku, na złoty kolor, ok. 30min. w temperaturze 180 C. W ten sam sposób upiec drugą połowę ciasta. 5. Przygotować masę budyniową. 2 szklanki mleka i cukier zagotować. ( ) dodawać stopniowo zimny budyń. 6. Masę rozsmarować na jednym blacie ciasta. ( ) Ciasto wstawić do lodówki, na co najmniej 2 godz. 7. Gotowe posypać cukrem pudrem. 11-2 1. Przygotować ciasto. Wodę zagotować z margaryną. ( ) po jednym jajku, szczyptę soli i proszek do pieczenia. 2. Ciasto podzielić na 2 części. 3. Formę prostokątną o wymiarach ok. 35x 24cm wysmarować margaryną i posypać mąką. Połowę ciasta rozprowadzić łyżką w formie. 4. Piec w nagrzanym piekarniku, na złoty kolor, ok. 30min. w temperaturze 180 C. W ten sam sposób upiec drugą połowę ciasta. 5. Przygotować masę budyniową. 2 szklanki mleka i cukier zagotować. ( ) dodawać stopniowo zimny budyń. 6. Masę rozsmarować na jednym blacie ciasta. ( ) Ciasto wstawić do lodówki, na co najmniej 2 godz. 7. Gotowe posypać cukrem pudrem. 11-3
PRZEPIS NA CIASTO A PROGRAM KOMPUTEROWY Przepis DEFINICJA PROBLEMU Zbiór danych wraz z poleceniem wykonania daje nam specyfikację potrzebnych przedmiotów i przedstawia szczegółowy opis instrukcji ich użycia opis składników i czynności potrzebnych do upieczenia ciasta. dane wejściowe definicja danych Opis problemu rozwiązanie problemu pieczenia ciasta opis problemu Dokładne wykonanie instrukcji skutkuje poprawnie upieczonym ciastem. Producent rozwiązał za nas problem pieczenia ciasta. pytanie Dane wejściowe Rozwiązanie problemu Dane wyjściowe Program jest zestawem instrukcji potrzebnych do poprawnego rozwiązania problemu. polecenie Algorytm Pisząc program analizujemy problem i rozwiązujemy go tworząc przepis (program). 12 13 PRZYKŁAD: PROBLEM OPTYMALIZACJI PRZYKŁAD: PROBLEM OPTYMALIZACJI Ogólny problem optymalizacji: Mając daną funkcję f: X IR oraz zbiór X należy znaleźć x* X, dla którego f(x*) jest minimalne, tzn: f(x*) = min x X f(x) 14-1 Ogólny problem optymalizacji: Mając daną funkcję f: X IR oraz zbiór X należy znaleźć x* X, dla którego f(x*) jest minimalne, tzn: f(x*) = min x X f(x) Klasyczne przykłady optymalizacji: Problem komiwojażera dane jest n miast oraz odległość/czas podróży pomiędzy każdą parą miast. Należy znaleźć najkrótszą/najszybszą drogę łączącą wszystkie miasta zaczynającą się i kończącą w określonym punkcie. Problem plecakowy problem wyboru przedmiotów, tak by ich sumaryczna wartość była jak największa i jednocześnie mieściły się w plecaku. 14-2 www.mini.pw.edu.pl/miniwyklady/ grafy/prob-komiw.html Wikipedia
PROGRAM KOMPUTEROWY (KOD) = STRUKTURA(Y) DANYCH + ALGORYTM(Y) Musimy znać podstawowe algorytmy i struktury danych aby móc tworzyć kod dobrej jakości Przez dobrą jakość rozumieć będziemy program, który: jest wydajny rozwiązuje problem zgodnie z nałożonymi ograniczeniami sprzętowymi Nie można zostać dobrym programistą bez dobrej znajomości algorytmów i struktur danych ALGORYTM Jest zbiorem dobrze zdefiniowanych zasad niezbędnych do rozwiązania problemu. Przetwarza dane wejściowe problemu na dane wyjściowe, które ten problem rozwiązują. Problem może zawierać wiele algorytmów Struktury danych organizują informację Algorytm przetwarza informację Dane wejściowe Algorytm Dane wyjściowe 15 16 ALGORYTM ALGORYTM Właściwości: Musi być poprawny Musi się składać ze ściśle zdefiniowanych kroków Kolejność kroków musi być ściśle określona Musi się składać ze skończonej ilości kroków Musi się zakończyć dla wszystkich danych wejściowych Właściwości: Musi być poprawny Musi się składać ze ściśle zdefiniowanych kroków Kolejność kroków musi być ściśle określona Musi się składać ze skończonej ilości kroków Musi się zakończyć dla wszystkich danych wejściowych Program komputerowy jest instancją lub konkretną reprezentacją algorytmu w dowolnym języku programowania 17-1 17-2
STRUKTURY DANYCH - DEFINICJE Typ jest to zbiór wartości np.: Integer, Boolean Typ danych jest typem i zbiorem operacji, które przetwarzają ten typ. np.: Suma, Iloczyn Dana jest elementem typu danych - informacją Np.: Typy danych w Javie: prosty: int, float, bool zagregowany: array, struct, vector, string Zagregowany typ danych jest przykładem struktury danych składający się z: prostych pól powiązań między polami operacji na strukturze danych, które pozwalają na manipulację tych pól 18 ABSTRACT DATA TYPE (ADT) Definicja typu danych tylko za pomocą wartości i operacji na tym typie danych Jest specyfikacją typu danych, która: ukazuje istotne cechy ukrywa detale implementacyjne Definiuje typ danych przez zależności wejścia - wyjścia np.: każda operacja ADT jest zdefiniowana przez jej wejścia i wyjścia ADT radzą sobie ze złożonością poprzez abstrakcję: metaforę 20-1 STRUKTURY DANYCH W językach programowania, niektóre struktury danych są wbudowane (np.: tablice, łańcuchy znakowe) Wiele innych struktur danych jest często niezbędnych możemy je zaimplementować z wykorzystaniem wbudowanych struktur danych Nazywamy je strukturami zdefiniowanymi przez użytkownika (user-defined) STL dla C++ Do zdefiniowania struktur danych w Javie wykorzystuje się klasy Na wykładzie poznamy struktury danych i algorytmy, które są najczęściej wykorzystywane w wielu aplikacjach 19 ABSTRACT DATA TYPE (ADT) Definicja typu danych tylko za pomocą wartości i operacji na tym typie danych Jest specyfikacją typu danych, która: ukazuje istotne cechy ukrywa detale implementacyjne Definiuje typ danych przez zależności wejścia - wyjścia np.: każda operacja ADT jest zdefiniowana przez jej wejścia i wyjścia ADT radzą sobie ze złożonością poprzez abstrakcję: metaforę 20-2
PRZYKŁAD ADT Słownik D : Zbiór słów i ich znaczeń Operacje: D.find(k,y); przeszukaj D dla słowa k i jeśli znalezione, y jest definicją k D.insertItem(k,y); wstaw nowe słowo k o znaczeniu y do D D.removeElement(k); usuń słowo k i jego definicję z D 21 WYBÓR IMPLEMENTACJI ADT Wszystkie struktury danych posiadają swoje wady i zalety. Bardzo rzadko jedna struktura danych jest lepsza od innych we wszystkich sytuacjach. Struktura danych wymaga: przestrzeni dla każdej danej, którą przechowuje czasu do przeprowadzenia każdej podstawowej operacji wysiłku programistycznego. 23 STRUKTURA DANYCH VS. ADT Struktura danych jest konkretną implementacją ADT - Typ - Operacje - Pamięć - Podalgorytmy Typ Danych 22 Dane: Forma Logiczna Dane: Forma Fizyczna PRZYKŁAD: SD VS. ADT Dane: Uporządkowane Wartości Operacje: Wstaw, Usuń, Struktura danych: Lista na tablicy Dane: Wartości zapisane w tablicy Operacje: Wstaw, Usuń,, implementowane na tablicy Implementacja Struktura danych: Lista jednokierunkowa Dane: Wartości zapisane w liście jednokierunkowej Operacje: Wstaw, Usuń,, implementowane na liście 24
WYBÓR IMPLEMENTACJI ADT Tylko po dokładnej analizie charakterystyki problemu możemy wybrać najlepszą strukturę danych dla danego zadania WYBÓR IMPLEMENTACJI ADT Tylko po dokładnej analizie charakterystyki problemu możemy wybrać najlepszą strukturę danych dla danego zadania Przykład z banku: 25-1 WYBÓR IMPLEMENTACJI ADT Tylko po dokładnej analizie charakterystyki problemu możemy wybrać najlepszą strukturę danych dla danego zadania Przykład z banku: Otwarcie konta: kilka minut 25-2 WYBÓR IMPLEMENTACJI ADT Tylko po dokładnej analizie charakterystyki problemu możemy wybrać najlepszą strukturę danych dla danego zadania Przykład z banku: Otwarcie konta: kilka minut Transakcje: kilka sekund 25-3 25-4
WYBÓR IMPLEMENTACJI ADT ZŁOŻONOŚĆ OBLICZENIOWA Tylko po dokładnej analizie charakterystyki problemu możemy wybrać najlepszą strukturę danych dla danego zadania Przykład z banku: Otwarcie konta: kilka minut Najlepszy przypadek Średni przypadek Najgorszy przypadek Większość algorytmów przekształca obiekty wejściowe w obiekty wyjściowe Czas działania (złożoność obliczeniowa) algorytmu zazwyczaj wzrasta wraz z rozmiarem danych wejściowych Średni czas działania jest najczęściej trudny do określenia koncentrujemy się na przypadku najgorszym Transakcje: kilka sekund Zamknięcie konta: doba łatwiejszy do analizy Istotny w aplikacjach takich jak gry, finanse i robotyka 25-5 SIEDEM WAŻNYCH FUNKCJI 26 DOŚWIADCZENIA T(n) 1E+30 1E+27 1E+24 1E+21 1E+18 1E+15 1E+12 1E+9 1E+6 1E+3 1E+0 Sześcienna Kwadratowa Liniowa 1E+0 1E+2 1E+4 1E+6 1E+8 1E+10 n Siedem funkcji często wykorzystywanych w analizie algorytmów: Stała 1 Logarytmiczna log n Liniowa n N-Log-N n log n Kwadratowa n 2 Sześcienna n 3 Wykładnicza 2 n Na wykresie log-log, nachylenie linii świadczy o wzroście funkcji 27 Czas (ms) 9000 6750 4500 2250 0 0 23 45 68 90 Rozmiar danych wejściowych Napisz program implementujący algorytm Przetestuj napisany program na danych o różnych rozmiarach Wykorzystaj metodę typu System.currentTimeMillis() do dokładnego oszacowania czasu działania algorytmu Zrób wykres dla otrzymanych wyników. 28
OGRANICZENIE EKSPERYMENTÓW Niezbędne jest zaimplementowanie algorytmu, który może być trudny Wyniki złożoności obliczeniowej mogą nie być znaczące dla danych wejściowych, które nie były wykorzystywane w eksperymentach W celu porównania dwóch algorytmów należy korzystać z tego samego sprzętu i oprogramowania ANALIZA TEORETYCZNA Wykorzystuje formalną reprezentację algorytmu zamiast implementacji Charakteryzuje złożoność obliczeniową jako funkcję rozmiaru danych wejściowych, n Bierze pod uwagę wszystkie możliwe dane wejściowe Pozwala nam na ocenę szybkości działania algorytmu niezależnie od sprzętu/oprogramowania 29 30 DEFINICJA Złożoność obliczeniowa algorytmu A jest zdefiniowana przez: t - czas - ilość operacji niezbędnych do rozwiązania dowolnej instancji I problemu o rozmiarze N(I) przez algorytm A => N(I) = n f A (n) = max(t) Nas interesuje jak wygląda funkcja F A, a nie jej wartości 31