INFORMACJE PODSTAWOWE EFEKTY KSZTAŁCENIA EFEKTY

advertisement
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
Download