PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI INFORMACJE PODSTAWOWE • Kontakt • pok. 230 C-3, • tel.: 071 320 4226 • e-mail: [email protected] • www: lukasz.jelen.staff.iiar.pwr.wroc.pl Wykład 1 dr inż. Łukasz Na podstawie wykładów dr. T. Fevensa Jeleń • 1 2 EFEKTY KSZTAŁCENIA 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_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_W04 – zna reguły kodowania danych wejściowych problemów, ich efektywność oraz wpływ na rozmiar instancji problemu. PEK_W10 – jest w stanie wyjaśnić istotę algor ytmów oraz schematów aproksymacyjnych. • • PEK_W05 – zna definicje algorytmu wielomianowego i ponadwielomianowego. PEK_W11 – zna zasadę działania wybranych algorytmów metaheurystycznych (poszukiwania z zakazami, symulowanego wyżarzania, poszukiwania genetycznego, poszukiwania mrówkowego). • 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. • PEK_W12 – zna podstawowe metody sztucznej inteligencji: strategie przeszukiwań drzew rozwiązań, algorytm A*, algorytm MINIMAKS, algorytm cięć alfa-beta. © 2004 Goodrich, Tamassia 3 4 ZALICZENIE LITERATURA Efekty kształcenia http://weka.pwr.wroc.pl/ • Studenci -> Plany i programy studiów -> Karty przedmiotów Ocena z wykładu • • • PEK_W03 – jest w stanie wyjaśnić budowę i zasadę działania Deterministycznej oraz Niedeterministycznej Maszyny Turinga oraz różnice między nimi. • • Z zakresu wiedzy (dot. wykładu) - c.d.: • © 2004 Goodrich, Tamassia • © 2004 Goodrich, Tamassia Ocena końcowa = 60% oceny z kolokwium + 40% oceny z laboratorium Kolokwium zaliczeniowe: • ostatni wykład -> 19.06.2016 (Pn) i 22.06.2016 (Czw) • data może ulec zmianie !!! © 2004 Goodrich, Tamassia © 2004 Goodrich, Tamassia 5 6 LITERATURA • LITERATURA LITERATURA PODSTAWOWA • LITERATURA UZUPEŁNIAJĄCA: [1] M. Sysło, N. Deo, J. Kowalik, „Algorytmy optymalizacji dyskretnej”, PWN, Warszawa 1999. [1] T. Cormen, C.E. Leiserson, R.L. Rivest, „Wprowadzenie do algorytmów”, WNT 2003. [2] T. Sawik, „Badania operacyjne dla inżynierów zarządzania”, Wydawnictwa AGH, Kraków 1998. [2] N. Wirth, „Algorytmy + struktury danych = programy”, WNT 2004. [3] N.J. Nilsson, “Principles of Artificial Intelligence”, Springer-Verlag, 1982. [3] J. Błażewicz, „Problemy optymalizacji kombinatorycznej”, PWN, Warszawa 1996. [4] S. Kirkpatrick, C.D. Gelatt, M.P. Vecchi, “Optimization by Simulated Annealing”, Science 220 (4598), str. 671–680, 1983. [4] A. Janiak, „Wybrane problemy i algorytmy szeregowania zadań i rozdziału zasobów”, Akademicka Oficyna Wydawnicza PLJ, Warszawa 1999. [5] F. Glover, “Tabu Search - Part I”, ORSA Journal on Computing, 1 (3), str. 190-206, 1989. [5] C. Smutnicki, „Algorytmy szeregowania”, Exit, Warszawa 2002. [6] F. Glover, “Tabu Search - Part II”, ORSA Journal on Computing, 2 (1), str. 4-32, 1990. [6] L. Bolc, J. Cytowski, „Metody przeszukiwania heurystycznego”, PWN 1989. [7] P. Wróblewski, „Algorytmy, struktury danych i techniki programowania”, Helion 2003. © 2004 Goodrich, Tamassia [7] Z. Michalewicz „Algorytmy genetyczne + struktury danych = programy ewolucyjne”, Warszawa, WNT 1996. [8] M. Dorigo, „Ant Colony Optimization”, MIT Press, 2004. © 2004 Goodrich, Tamassia 7 8 ISTOTA KURSU JAK DOSTAĆ DOBRĄ OCENĘ? • Być systematycznym • Robić zadania z list zadań • Przychodzić na zajęcia • Sprawdzona metoda: • • • zaimplementować przykłady przerabiane na wykładzie „…I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” Szukać dodatkowych przykładów w Internecie Torvalds, Linus (2006-06-22). Message to Git mailing list © 2004 Goodrich, Tamassia © 2004 Goodrich, Tamassia 9 10 PROBLEM VS. ALGORYTM PRZEPIS NA CIASTO is ze p Co to jest? Ciasto: • 1 szklanka wody • 150g margaryny • 1 szklanka mąki pszennej • 5 jajek • szczypta soli • szczypta proszku do pieczenia Pr • Przygotuj Piekarnik : 1800 Woda: 250ml Olej: 83ml Instrukcje Podgrzej piekarnik do 1800. Posmaruj formę margaryną Ciasto W wysokim naczyniu wymieszać zawartość torebki z wodą i olejem. Ubijać przez 2 minuty na wysokich obrotach Pieczenie 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ń. Mając dane wejściowe (składniki) mamy rozwiązać problem pieczenia ciasta © 2004 Goodrich, Tamassia 11 Ja k? 6. Masę rozsmarować na jednym blacie ciasta. (…) Ciasto wstawić do lodówki, na co najmniej 2 godz. 7. Gotowe posypać cukrem pudrem. © 2004 Goodrich, Tamassia 12 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 • dane wejściowe • opis składników i czynności potrzebnych do upieczenia ciasta. • definicja danych • rozwiązanie problemu pieczenia ciasta • opis problemu Dokładne wykonanie instrukcji skutkuje poprawnie upieczonym ciastem. • Producent rozwiązał za nas problem pieczenia ciasta. • Program jest zestawem instrukcji potrzebnych do poprawnego rozwiązania problemu. • Pisząc program analizujemy problem i rozwiązujemy go tworząc przepis (program). © 2004 Goodrich, Tamassia • pytanie • polecenie Opis problemu Dane wejściowe Rozwiązanie problemu Dane wyjściowe Algorytm © 2004 Goodrich, Tamassia 13 14 PRZYKŁAD: PROBLEM OPTYMALIZACJI PROGRAM KOMPUTEROWY (KOD) = STRUKTURA(Y) DANYCH + ALGORYTM(Y) 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*) = minx∈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. • • • Przez „dobrą jakość” rozumieć będziemy program, który: www.mini.pw.edu.pl/MiNIwyklady/ grafy/prob-komiw.html • • 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 Struktury danych organizują informację Algorytm przetwarza informację © 2004 Goodrich, Tamassia 15 16 ALGORYTM 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 © 2004 Goodrich, Tamassia Musimy znać podstawowe algorytmy i struktury danych aby móc tworzyć kod dobrej jakości • Wikipedia © 2004 Goodrich, Tamassia • • Dane wejściowe Algorytm 17 Dane wyjściowe • 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 © 2004 Goodrich, Tamassia 18 STRUKTURY DANYCH STRUKTURY DANYCH - DEFINICJE • Typ jest to zbiór wartości • • Typ danych jest typem i zbiorem operacji, które przetwarzają ten typ. • • Wiele innych struktur danych jest często niezbędnych • • Dana jest elementem typu danych - informacją • Np.: Typy danych w C++: prosty: int, float, bool zagregowany: array, struct, vector, string • Zagregowany typ danych jest przykładem struktury danych składający się z: • możemy je zaimplementować z wykorzystaniem wbudowanych struktur danych Nazywamy je strukturami zdefiniowanymi przez użytkownika (user-defined) • STL dla C++ • prostych pól • Do zdefiniowania struktur danych w C++ wykorzystuje się klasy • powiązań między polami • • operacji na strukturze danych, które pozwalają na manipulację tych pól Na wykładzie poznamy struktury danych i algorytmy, które są najczęściej wykorzystywane w wielu aplikacjach © 2004 Goodrich, Tamassia 19 20 ABSTRACT DATA TYPE (ADT) PRZYKŁAD 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 • • W językach programowania, niektóre struktury danych są wbudowane (np.: tablice, łańcuchy znakowe) np.: Suma, Iloczyn © 2004 Goodrich, Tamassia • • np.: Integer, Boolean 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ę © 2004 Goodrich, Tamassia 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 • © 2004 Goodrich, Tamassia 21 22 STRUKTURA DANYCH VS. ADT WYBÓR IMPLEMENTACJI ADT • Struktura danych jest konkretną implementacją ADT • Wszystkie struktury danych posiadają swoje wady i zalety. • Bardzo rzadko jedna struktura danych jest lepsza od innych we wszystkich sytuacjach. • Struktura danych wymaga: Typ Danych - - Dane: Forma Logiczna Typ Operacje Dane: Forma Fizyczna Pamięć Podalgorytmy © 2004 Goodrich, Tamassia • przestrzeni dla każdej przechowywanej danej • czasu do przeprowadzenia każdej podstawowej operacji • wysiłku programistycznego. © 2004 Goodrich, Tamassia 23 24 PRZYKŁAD: SD VS. ADT Dane: Uporządkowane Wartości Operacje: Wstaw, Usuń, … Struktura danych: Lista na tablicy Dane: Wartości zapisane w tablicy WYBÓR IMPLEMENTACJI ADT • Tylko po dokładnej analizie charakterystyki problemu możemy wybrać najlepszą strukturę danych dla danego zadania • Przykład z banku: Operacje: Wstaw, Usuń, …, implementowane na tablicy Implementacj a Struktura danych: Lista jednokierunkowa Dane: Wartości zapisane w liście jednokierunkowej Operacje: Wstaw, Usuń, …, implementowane na liście © 2004 Goodrich, Tamassia • Otwarcie konta: kilka minut • Transakcje: kilka sekund • Zamknięcie konta: doba © 2004 Goodrich, Tamassia 25 26 ZŁOŻONOŚĆ OBLICZENIOWA SIEDEM WAŻNYCH FUNKCJI • 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 • łatwiejszy do analizy • Istotny w aplikacjach takich jak gry, finanse i robotyka © 2004 Goodrich, Tamassia Czas (ms) n 27 28 DOŚWIADCZENIA OGRANICZENIE EKSPERYMENTÓW • Napisz program implementujący algorytm • Niezbędne jest zaimplementowanie algorytmu, który może być trudny • Przetestuj napisany program na danych o różnych rozmiarach • • Wykorzystaj metodę typu System.currentTimeMillis() do dokładnego oszacowania czasu działania algorytmu 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 6750 4500 2250 0 23 1E+30 Sześcienna 1E+27 Kwadratowa 1E+24 Liniowa 1E+21 1E+18 1E+15 1E+12 1E+9 1E+6 1E+3 1E+0 1E+0 1E+2 1E+4 1E+6 © 2004 Goodrich, Tamassia 9000 0 Siedem funkcji często wykorzystywanych w analizie algorytmów: • Stała ≈ 1 • Logarytmiczna ≈ log n • Liniowa ≈ n • N-Log-N ≈ n log n 2 • Kwadratowa ≈ n 3 • Sześcienna ≈ n 1E+8 1E+10 n • Wykładnicza ≈ 2 • Na wykresie log-log, nachylenie linii świadczy o wzroście funkcji • T(n) Najlepszy przypadek Średni przypadek Najgorszy przypadek 45 68 90 Rozmiar danych wejściowych • Zrób wykres dla otrzymanych wyników. © 2004 Goodrich, Tamassia © 2004 Goodrich, Tamassia 29 30 DEFINICJA 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 © 2004 Goodrich, Tamassia • 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 • fA(n) • = max(t) Nas interesuje jak wygląda funkcja FA, a nie jej wartości © 2004 Goodrich, Tamassia 31 32