Automat stanów w General Game Playing. Gajusz Chmiel

Wielkość: px
Rozpocząć pokaz od strony:

Download "Automat stanów w General Game Playing. Gajusz Chmiel"

Transkrypt

1 Automat stanów w General Game Playing Gajusz Chmiel 14 marca 2012

2 Streszczenie General Game Playing (GGP) jest dziedziną, której celem jest zbudowanie systemów zdolnych grać na zaawansowanym poziomie we wcześniej nieznane gry. Pierwszą częścią pracy jest wprowadzenie do zagadnienia. Zawiera ono omówienie powstania dziedziny oraz przedstawione i podsumowane dotychczasowe osiągnięcia. Postęp w dziedzinie GGP można zaobserwować na co rocznych konkursach, w których najlepsze systemy rywalizują o zwycięztwo, mierząć się w wielu różnych grach. W pierwszej części pracy największy nacisk kładę na omówienie tych technik, które były stosowane w kolejnych latach przez zwycięzców konkursu. W drugiej części znajduje się szczegółowe omówienie implementacji maszyny wnioskującej opartej na Propositional Nets. Maszyna wnioskująca, a w szczególności jej wydajność odgrywała w minionych konkursach kluczową rolę. Implementacja w języku C# zawiera szereg optymalizacji w strukturze sieci, co stanowi pewne rozwinięcie orginalnego pomysłu opracowanego na Uniwersytecie Stanforda. Całość domknięta jest podsumowaniem testów wydajnościowych, w których wyniki porównane są ze standardowa implementacją w Prologu.

3 Spis treści I Wprowadzenie do General Game Playing 3 1 Gra w ujęciu formalnym Game Description Language Syntaktyka GDL KIF Zdefiniowane relacje w GDL Protokół rozgrywki Techniki stosowane w GGP Automat gry w praktyce Prolog Kompilacja Dekompozycja gier Wykrywanie symetrii Algorytmy przeszukiwania MiniMax Iterative Deepening A* UCT Konstrukcja funkcji ewaluacyjnej Cluneplayer Fluxplayer Analiza zwycięskich graczy Cluneplayer Fluxplayer Cadiaplayer Ary TurboTurtle Podsumowanie

4 II Automat stanów 40 3 Propositional Net Konwersja z GDL do Propositional Net Obliczenie dziedzin predykatów Generowanie przełączników sieci Generowanie bramek logicznych i połączeń Optymalizacja struktury sieci Wyznaczenie porządku topologicznego sieci Implementacja i testy Prologowy automat stanów Wyniki testów Usprawnienia 51 2

5 Część I Wprowadzenie do General Game Playing 3

6 General Game Playing jest częścią dziedziny sztucznej inteligencji, koncentrującą się wokół budowania programów, zdolnych do rozwiązywania problemów, których treść jest zmienną programu. Ujmując to innymi słowami - opis problemu, który potrafiłby rozwiązać program jest podawany jako dane wejściowe, a wynikiem jest ciąg zgodnych z zasadami operacji, który prowadzi do możliwie najlepszego wyniku. Pewne klasy problemów uwzględniają uczestnictwo innych, niezależnych programów zmieniając sens rozwiązywania problemu w rywalizację lub kooperację. W tym miejscu chciałbym podkreślić, że nazwa General Game Playing (dosłownie: ogólne granie w gry) może być myląca, gdyż zakres możliwych do zdefiniowania gier obejmuje również problemy grafowe, czy problem pokrycia zbioru. W dalszej części pracy będę jednak używać określeń gra i problem zamiennie, idąc w ten sposób zgodnie z terminologią używaną w pracach na ten temat. [1]Za oficjalny początek tej młodej dziedziny można uznać rok 2005 i ogłoszenie przez Uniwersytet Stanford a otwartych mistrzostwo świata w General Game Playing. Towarzyszyło temu ograniczenie możliwych gier do konkretnego modelu, formalizacja języka opisu oraz protokół rozgrywki. W momencie pisania tej pracy odbyło się siedem edycji konkursu, co świadczy z jednej strony o zainteresowaniu dziedziną, jak i o tym, że wciąż istnieją duże możliwości rozwoju. W części I pracy rozpocznę od umotywowania dziedziny, kontrastując GGP z klasycznym podejściem do Game Playing, a w szczególności z najbardziej znanym przedstawicielem dziedziny - Deep Blue. Następnie wprowadzony zostanie w sposób formalny model gier, którymi zajmuje się GGP, wraz z omówieniem języka opisu oraz przybliżony zostanie protokół rozgrywki. Są to elementy, które mają fundamentalne znaczenie dla zrozumienia dalszych rozdziałów, a w szczególności zrozumienia technik stosowanych w GGP. 4

7 Rozdział 1 Gra w ujęciu formalnym Gry w General Game Playing składają się ze skończonej liczby stanów z wyróżnionym stanem początkowym oraz pewnymi stanami końcowymi, z których każdy ma przypisaną indywidualną nagrodę dla każdego z graczy.w każdej rozgrywce bierze udział skończona i stała liczba graczy, którzy w każdej turze, jednocześnie dokonują wyboru wykonywanej akcji ze skończonego zbioru działań zgodnych z zasadami. Każdy z graczy jest informowany o wybranych przez pozostałych akcjach. Stan gry zmienia się tylko pod wpływem akcji wykonywanych przez graczy. Tak opisany model można sformalizować w następujący sposób: S r 1,..., r n I 1,..., I n l 1,..., l n, l i I i S f : I 1... I n S S s 1 S T S g 1,..., g n, g i : r i T [0,..., 100] - skończony zbiór stanów gry. - gracze biorący udział w grze. - zbiory wszytkich akcji dla poszczególnych graczy. - zbiory legalnych akcji w danym stanie. - funkcja przejścia między stanami. - wyróżniony stan początkowy. - podzbiór stanów końcowych. - funkcja wypłaty dla stanów końcowych i poszczególnych graczy. Gra rozpoczyna się w stanie s 1. W każdej turze wszyscy gracze r i wybiera swoją akcję a i I i, dla której istnieje l i (m i, s numer tury ). Następnie stan gry zmienia się zgodnie z funkcją przejścia f(a 1,..., a n, s numer tury ). Gra kończy się w momencie, w którym stan gry s T. Zanim przejdziemy do omówienia sposobu na przekazanie zasad gry programowi, chciałbym rozważyć możliwości przedstawionego modelu. Weźmy akcję null 5

8 I i, dla każdego gracza i taką, że null wykonany na dowolnym stanie s S nie zmienia tego stanu. Konceptualnie jest to równoważne nie wykonaniu żadnej akcji. Mając do dyspozycji null możemy zasymulować w dowolnej grze naprzemienność wykonywania akcji w następujący sposób: w dowolnym stanie s S, wszyscy gracze poza jednym, magą wykonać tylko akcję null. Dzięki temu możemy wpasować do przedstawionego modelu takie gry jak szachy, warcaby, czy kółko i krzyżyk. Zgodne z modelem są zarówny gry wielo- jak i jednoosobowe. Do tych drugich możemy zaliczyć klasyczne łamigłowki takie jak: 8-queens, 15-puzzle czy wieże Hanoi, ale również pewne problemy optymalizacyjne jak: najkrótsza scieżka między parą wierzchołków w grafie, czy problem sumy podzbioru. Wsród możliwych do skonstruowania gier wieloosobowych, możemy wyróźnić gry sumy zerowej, ale również takie, które wymagają kooperacji. Funkcja wypłaty dla stanów terminalnych może być kształtowana w dowolny sposób. Przedstawienie wyżej wymienionych gier w praktyczny sposób nie zawsze jest łatwe, a więcej szczegółów dotyczących języka opisu gier znajduje się w najstępnej sekcji. Warto jednak odnotować, że w tak sformalizowanym modelu, możemy wyrazić cały szereg bardzo różniących się od siebie gier. Aplikacja potrafiąca radzić sobie z tak szerokim wachlarzem problemów jest zdecydowanie bliższa duchem początkom sztucznej inteligencji i [2]próbie budowy sztucznego umysłu niż ścieżka, w którą zabrneły wyspecjalizowane programy grające w jedną konkretną grę. Deep Blue Szachy byłyb obiektem badań sztucznej inteligencji w zasadzie od samego początku dziedziny. Gra, która od gracza na przyzwoitym poziomie wymaga stosowania rozmaitych strategii, planowania i przewidywania na wiele ruchów do przodu, mogłaby być wskaźnikiem tego jak blisko jest nam to stworzenia sztucznej inteligencji.[3] Pierwsze programy komputerowe zdolne grać w szachy powstały już w latach 50 XX wieku osiągając poziom nowicjusza. W latach 60 w oparciu o algorytm Alpha-beta powstały programy zdolne grać porównywalnie z dobrym graczem ze szkoły średniej. w kolejnej dekadzie nastąpił dalszy postęp w tej dziedzinie. Dzięki zwiększeniu mocy obliczeniowej komputerów, programy działające na bardzo podobnych zasadach jak ich poprzednicy, osiągnęły poziom eksperta, choć wciąż nie było pewne, czy kiedykolwiek komputer będzie zdolny do ogrania najlepszych ludzkich graczy. Dopiero pod koniec lat 80 wyspecjalizowany komputer Deep Thought w regularnym turnieju szachowym wyprzedził kilku arcymistrzów zajmując ex aequo pierwsze miejsce. Za najważniejsze - a z pewnością najsłynniejsze - osiągnięcie programów szachowych uznaje się komputer Deep Blue i jego zwycięstwo w 1997 roku nad Garry m Kasparov em, ówczesnym mistrzem świata 6

9 w szachach. Deep Blue bez wątpienia można uznać za technologiczne dzieło sztuki. [5] Zbudowano go z 30 procesorów ogólnego przeznaczenia IBM RS/6000, z czego dwadzieścia osiem działało z częstotliwościa 120M hz, a pozostałe dwa z częstotliwością 135M hz. Każdy procesor miał do dyspozycji 16 wyspecjalizowanych jednostek przeszukiwania stanów szachowych (łącznie 480), 1GB pamięci RAM (łącznie 30GB) oraz 4GB miejsca na dysku (łącznie 120GB). Każda z wyspecjalizowanych jednostek potrafiła przeanalizować od 2 do 2.5 miliona stanów gry.w czasie meczu z Kasparov em Deep Blue analizował średnio 126 milionów stanów gry na sekundę, a momentami ta liczba dochodziła do 330 milionów na sekundę. Funkcja ewulacyjna złożona była z około 8000 charakterystyk opisujących planszę, których wagi ustalane były programowo. Sama wartość w celu zwiększenia wydajności obliczana była sprzętowo, tz. wszystkie charakterystyki były wbudowane w sprzęt! Sam algorytm przeszukiwania opierał się na klasycznym algorytmie Alpha-beta ze znanymi już wcześniej szachowymi optymalizacjami. Podsumowując opis działania Deep Blue chciałbym zacytować Noam a Chomsky ego[4] : Program komputerowy wygrywający z arcymistrzem w szachy, to tak jakby buldożer wygrał zawody w podnoszeniu ciężarów. Deep Blue został tutaj przywołany nie bez przyczyny. Rozwiązania w nim zastosowane bardzo mocno oddaliły się od pierwotnego celu, którym jest zbudowanie sztucznego umysłu. Próby zrozumienia fenomenu inteligencji zastąpiono zapisywaniem na sztywno w kodzie źródłowym wiedzy programisty o konkretnym problemie uzupełnioną ogromem mocy obliczeniowej. Tworzenie wysoce wyspecjalizowanych aplikacji to na dzisiaj jedyna szansa, żeby móc konkurować - przy rozwiązywaniu konkretnych problemów - z człowiekiem. Model gry w General Game Playing jest zaprzeczeniem takiego podejścią. Program musi być gotowy do gry w potencjalnie nieskończenie wiele gier, każdą z nich analizując bez aktywnego wsparcia ze strony programistów. 1.1 Game Description Language Problemy spełniające założenia wprowadzonego w poprzedniej sekcji modelu, można postrzegać jako automaty skończone. Każda gra zawiera skończony zbiór stanów S. Funkcja f definiuje jak zmienić stan gry po wykonaniu akcji przez graczy. Stan s 1 określa stan początkowy, a zbiór T S określa stany końcowe automatu. Niestety poza bardzo wąskim gronem gier, przekazywanie automatu wprost jest niepraktyczne. Wspomine już wcześniej szachy zawierają ponad stanów[6], więc 7

10 zakodowanie ich wprost przekracza możliwości jakiegokolwiek istniejącego obecnie nośnika danych. Rozwiązaniem tego problemu było zaproponowanie języka programowania logicznego Game Description Language (GDL). Pozwala on opisywać stan gry za pomocą zbioru prawdziwych faktów. Przejście między stanami definiują reguły, które pozwalają wywnioskować zbiór faktów prawdziwych po wykonaniu danych akcji graczy. To czy stan, jest stanem końcowym, określają pewne reguły - spełnione lub nie - przy danym zbiorze prawdziwych faktów. Specyfikację języka można znaleść w bibliografii [6]. Znajdują się w niej szczególowe wyjaśnienia dotyczące wprowadzonych na syntaktykę ograniczeń. Przedstawione poniżej wprowadzenie do GDL mają umożliwić śledzenie następnych rozdziałów bez konieczności analizowania oficjalnej specyfikacji języka. 1.2 Syntaktyka GDL Definicja 1 (Symbole GDL) Symbole w GDL składają się z: Zbioru zmiennych np. X, Y. Zbioru stałych obiektowych np. a, b, c. Zbioru symboli relacyjnych o ustalonej arności np. adjacent, on. Zbioru symboli funkcyjnych z ustaloną arnością np. f, g, h. Definicja 2 (Termy GDL) Termem w GDL jest: Zmienna. Stała obiektowa. N-argumentowy symbol funkcyjny zastosowana do n termów np. f(a, X, g(h(c, Y), e)). Definicja 3 (Zdanie atomowe GDL) Zdaniem atomowym w GDL jest n-argumentowy symbol relacyjny zastosowany do n termów. Definicja 4 (Literał GDL) Literałem w GDL jest zdanie atomowe lub jego zaprzeczenie. Definicja 5 (Term stały GDL) Termem stałym w GDL term bez zmiennych. 8

11 Definicja 6 (Reguły GDL) Regułami w GDL nazywami implikację o następującej formie: h b 1... b n h jest zdaniem atomowym. Każde b i jest literałem. Bezpieczeństwo: jeśli zmienna występuje w h lub w literale negatywnym, to występuje też w literale pozytywnym w poprzedniku aplikacji. Powyższe definicje można uzupełnić zasadą Ograniczenia Rekursji. Ma ona charakter techniczny - zapobiegający rozrostowi termów- i jest omówiona szerzej w specyfikacji GDL [6]. Ma ona jednak znaczenie głównie w przypadku samodzielnego przygotowywania reguł do gier, co nie jest moim celem - przy testowaniu będę korzystał z bogatej oferty dostępnych gier [8] [9]. Tak zdefiniowany Game Description Language jest teoretycznym modelem posiadającym przydatne w General Game Playing własności. Można za pomocą tego modelu - poprzez odpowiedni zbiór symboli i reguł - opisać w zwięzły sposób wiele gier. Dodatkowo każdy stan jest zbiorem zdań prawdziwych, dzięki czemu istnieje możliwość poszukiwania jakiegoś głębszego podobieństwa między poszczególnymi stanami. Warto zaznaczyć, że model nie zawiera wbudowanej artmetyki, ani też nie zakłada żadnych faktów prawdziwych, poza tymi które można wywnioskować ze zbioru faktów zasadniczych i reguł. 1.3 KIF Przejście od tego teoretycznego modelu do praktycznego zastosowania wymaga pośredniego języka. Wybór padł na Knowledge Interchange Format (KIF ), który pozwala w sposób niezależny od maszyny i języka programowania wymieniać komunikaty między komputerami. Zdecydowane się na niego ponieważ składnia nie wymaga dużych zmian w stosunku do modelu GDL. Jest to język o notacji prefiksowej. Wszystkie zmienne rozpoczynają sie od znaku?. Arność i typ stałych ustalany jest z kontekstu. Oto kilka przykładów: X jest zapisane jako?x f(a, X, g(h(c, Y ), e)) jest zapisane jako (f a?x (g (h c?y) e)) true(cell(1, 1, X)) jest zapisane jako (true (cell 1 1?x)) true(cell(1, 1, X)) jest zapisane jako (not (true (cell 1 1?x))) p(x) q(x) r(x) jest zapisane jako ( (p?x) (q?x) (not (r?x))) 9

12 1.4 Zdefiniowane relacje w GDL Game Description Language definiuje kilka podstawowych predykatów. Dzięki nim w każdej grze można określić role graczy, stan początkowy, funkcję przejścia czy też funkcję wypłaty dla stanów końcowych. Poniższe omówienie tych predykatów oparte jest na zasadach gry kólko i krzyżyk. Grę rozpoczyna się na planszy o rozmiarach 3x3 wypełnionej symbolami b, które symbolizuja pole puste (ang. blank). W grze uczestniczy dwóch graczy: x i o. W każdym kroku, naprzemiennie każdy z graczy może postawić w dowolnym pustym polu odpowiednio znak krzyżyka lub kólka, podczas gdy drugi gracz w danej turze wykonuje akcję noop (w wolnym tłumaczeniu nic ). Celem gry jest ustawienie trzech własnych symboli w rzędzie: pionowo, poziomu lub na przekątnych. Gra kończy się jeśli, którys z graczy osiąga ten cel lub kiedy nie ma już pól pustych. W przypadku osiągniecia celu zwycięzca dostaje 100pkt, podczas gdy przegrany dostaje tych punktów 0. W przypadku remisu obaj gracze dostają po 50pkt. Gracze: relacja role W każdym opisie gry znajduje sie przynajmniej jedna rola opisana przez predykat role. W grze kólko i krzyżyk role wygladają następująco: (role o) (role x) Oznacza to, że w całej grze występuje dwóch graczy określonych przez stałe obiekty - x oraz o. Zbiór graczy jest stały podczas całej rozgrywki dlatego użycie predykatu role ograniczone jest tylko do termów stałych, w szczególności nie można w trakcie gry wywnioskować istnienia nowej roli. Stan gry: relacja true Stan gry jest jednoznacznie wyznaczony przez zbiór termów stałych postaci true(f akt). Jest to symboliczny zapis tego, że dany fakt jest prawdziwy. Każda gra zawiera zbiór faktów prawdziwych na początku gry, oraz zawiera zbiór reguł pozwalających wywnioskować fakty prawdziwe w następnym stanie. Przykładem faktu w grze kółko i krzyżyk jest: (controle x) oznaczający, że gracz x ma możliwość wykonania niepustej akcji. Za pomocą tego i podobnych faktów, złożonych z symboli funkcyjnych, czy też - ogólniej rzecz ujmując - termów, można zbudować zdania atomowe prawdziwe w danym stanie: 10

13 (true (control x)) (true (cell 2 2 b)) Powyższy zbiór faktów oznacza dokładnie tyle, że gracz x posiada możliwość wykonania niepustej akcji oraz, że pole oznaczone stałymi 2, 2 jest puste. Stan początkowy: relacja init Znaczenie predykatu init jest analogiczne do znaczenia predykatu true poza tym, że jego pomocą przekazuje się zbiór predykatów prawdziwych w stanie początkowym gry. W grze kółko i krzyżyk ten zbiór wyglada w następujący sposób: (init (cell 1 1 b)) (init (cell 1 2 b)) (init (cell 1 3 b)) (init (cell 2 1 b)) (init (cell 2 2 b)) (init (cell 2 3 b)) (init (cell 3 1 b)) (init (cell 3 2 b)) (init (cell 3 3 b)) (init (control x)) Funkcja przejścia: relacja next Kolejnym predykatem o znaczeniu analogicznym do predykatu true jest predykat next określający te fakty, które są prawdą w następnym stanie gry: (<= (next (control x)) (true (control o)) (<= (next (control o)) (true (control x)) Legalne akcje: relacja legal W każdym stanie gry - poza być może stanami końcowymi - każdy z graczy może wywnioskować zbiór możliwych do wykonania akcji. W tym celu istnieje zdefiniowany predykat przybierający formę legal(gracz, akcja), który jest prawdziwy jeśli gracz może wykonać daną akcj. W grze kółko i krzyżyk gracz, dla którego prawdą jest, że posiada kontrolę może zaznaczyć dowolne puste pole, podczas gdy drugi gracz może wykonać jedynie akcję noop. 11

14 (<= (legal?player (mark?x?y)) (true (control?player))) (<= (legal x noop) (true (control o))) (<= (legal o noop) (true (control x))) Wykonywanie akcji: relacja does Predykat ten przybiera analogiczną formę do poprzedniego predykatu: does(gracz, akcja). W najogólniejszym sensie słuzy on do zmiany stanu gry w odpowiedzi na akcje graczy: (<= (next (cell?x?y?player)) (does?player (mark?x?y))) Dodatkową rolę predykat ten może odgrywać w przenoszeniu faktów prawdziwych do następnego stanu: (<= (next (cell?x?y b)) (does?player (mark?m?n)) (true (cell?x?y b)) (distinctcell?x?y?m?n)) (<= (distinctcell?x?y?m?n) (distinct?x?m) (<= (distinctcell?x?y?m?n) (distinct?y?n) Podczas rozgrywki gracze są informowani o akcjach przeciwników. Dokładnie w momencie otrzymania tej informacji następuje zmiana stanu, czyli w praktyce oznacza to wywnioskowanie pełnej relacji next. Komunikat z akcjami może wyglądać następująco: (does x (mark 2 2)) (does o noop) Taki zbiór oznacza, że gracz x zaznaczył środek planszy,a gracz o nie zaznaczył nic. 12

15 Cel gry: relacja goal Każda gra musi mieć zdefiniowany cel. W GDL istnieje w tym celu relacja o formie: goal(gracz, nagroda), gdzie nagroda [0,..., 100]. Nie ma żadnych ograniczeń w kwestii doboru wartości nagród, gry mogą mieć zarówno sprzeczne, jak i wspólne cele. Warto zaznaczyć, że gracze starają się zmaksymalizować wypłatę. W grze kółko i krzyżyk przykładem użycia relacji goal może byc następująca reguła: (<= goal(?player 100) (line?player)) gdzie predykat line oznacza zdefinowaną w innym miejscu relację ułożenia trzech znaków w linii. Stany końcowe: relacja terminal Omawiana relacja terminal nie zawiera żadnych argumentów, więc jest wyróżnioną stałą obiektową, która pojawia się w zbiorze faktów prawdziwych, kiedy osiągnięto stan końcowy. Pierwsze osiągnięcie przez grę stanu końcowego oznacza koniec rozgrywki. (<= terminal (role?player) (line?player) (<= terminal (not open)) Pozostałe relacje i ograniczenia W GDL domyślnie istnieją również relacje służące do budowania formuł logicznych - unarny not oraz binarny or. Badanie tego czy dwa termy są różne odbywa się za pomocą binarnego predykatu distinct, który jest spełniony wtedy i tylko wtedy, gdy oba termy są różne w sensie syntaktycznym. Na użycie domyślnych predykatów są nałożone pewne ograniczenia omówione szerzej w specyfikacji [6]. Można tam również znaleźć definicje pewnych własności gier, które muszą być spełnione, żeby nadawała się ona do rozegrania partii. W przypadku samodzielnego tworzenia gier jest to niezbędna lektura. 13

16 1.5 Protokół rozgrywki GDL stanowi język zwięzłego opisu zasad szerokiej klasy gier. Do rozegrania rzeczywistej partii między programami potrzebny jest jeszcze mechanizm komunikacji. W związku z brakiem ograniczeń wyboru języka programowania czy systemu operacyjnego naturalnym wyborem był powszechnie stosowany protokół sieciowy TCP/IP. W tym ujęciu każdy gracz jest serwerem, który ma swój adres sieciowy i port na którym odbiera komunikaty. Zadaniem każdego gracza jest umiejętność odpowiadania na te komunikaty. Potencjalnie każdy program potrafi jednocześnie prowadzić wiele jednoznacznie identyfikowalnych gier. Każda rozgrywka musi być jednak rozpoczęta, a następnie nadzorowana przez specjalny program w specyfikacji[6] nazywany Manager em Gry (GM ). Nadzorowanie gry przez GM polega na sprawdzaniu legalności wykonywanych przez graczy akcji, sprawdzaniu czy są one przesyłane w odpowiednim czasie oraz propagowaniu ruchów do wszystkich graczy (gracze nie komunikują się ze sobą bezpośrednio, lecz za pośrednictwem GM ). W przypadku kiedy akcja gracza nie jest legalna lub kiedy gracz nie zdąży odpowiedzieć przez upłynięciem limitu czasu,w jego imieniu losowana jest akcja ze zbioru tych legalnych. Komunikacja między GM a graczami odbywa się poprzez wymianę komunikatów w protokole HTTP. Każda wiadomość zawiera standardowy nagłówek wraz z typem ciała wiadomości - text/acl. Treść komunikatu to - odpowiednia dla danego etapu rozgrywki - formuła KIF, opakowana w jedną z dostępnych komend. Komenda START Komenda START służy do rozpoczynania rozgrywki i ma następującą formę: (START <MATCHID> <ROLE> <DESCRIPTION> <STARTCLOCK> <PLAYCLOCK>) MATCHID jest unikalnym identyfiaktorem przypisanym danej rozgrywce, który pozwala na prowadzenie wielu gier jednocześnie. Wszystkie komendy należące do tej samej rozgrywki mają jednakowy identyfikator. ROLE jest pojedyńczym elementem określającym rolę danego gracza w rozgrywce np. o lub x w grze kółko i krzyżyk. DESCRIPTION jest wyrażeniem w języku KIF, zamkniętym w parę zewnętrznych nawiasów. STARTCLOCK / PLAYCLOCK są liczbami naturalnymi określającymi kolejno czas do pierwszej tury oraz czas na przesłanie odpowiedzi w każdej turze w sekundach. 14

17 W odpowiedzi każdy z graczy przed upłynięciem czasu na zainicjalizowanie gry powienien odpowiedzieć: READY Jeśli któryś z graczy nie zdąży odpowiedzieć w wyznaczonym czasie nie ma to żadnych konsekwencji - kolejne komendy będą wysyłane bez zakłóceń i spóźniony gracz wciąż może brać udział w rozgrywce. Komenda PLAY Komenda PLAY rozpoczyna każdą turę. Zawiera ona dwa argumenty: pierwszym jest identyfikator rozgrywki, drugim jest lista akcji wykonanych przez graczy w poprzedniej rundzie. (PLAY <MATCHID> (<A1>... <An>)) Specjalnym przypadkiem tej komendy jest pierwsze jej wystąpienie - lista akcji wykonanych w poprzedniej turze jest pusta i oznaczona symbolem NIL. W odpowiedzi w każdej turze, przed upływem wyznaczonego czasu gracz zobowiązany jest wysłać akcję, którą chciałby wykonać. (MARK 2 2) W przypadku kiedy podana akcja jest nielagalna lub nie została dostarczona przed upływem czasu, GM losuje z równym prawdopodobieństwem akcje ze zbioru legalnych. Gracz jest o tym fakcie informowany przy następnej komendzie PLAY, która jest pewnym potwierdzeniem (lub zaprzeczeniem) wyboru gracza. Komenda STOP Komenda ta ma strukturę i znaczenie analogiczne do komendy PLAY z tą różnicą, że oznacza koniec rozgrywki. (STOP <MATCHID> (<A1>... <An>)) W odpowiedzi każdy z graczy wysyła krótką wiadmość: DONE 15

18 Rozdział 2 Techniki stosowane w GGP Gracze w General Game Playing często nazywani są systemami GGP. Wynika to wprost z poziomu skomplikowania takiej aplikacji. W najbardziej zewnętrznej warstwie musi znajdować się serwer HTTP, bez którego nie ma możliwości komunikacji niezbędnej do prowadzenia rozgrywek. Granie w daną grę w najogólniejszym sensie wymaga jakieś formy przeszukiwania automatu zadanego przez opis w GDL. W tym celu potrzebny jest algorytm przeszukiwania oraz mechanizm generowania następników danego stanu, legalnych ruchów, czy też określania ilości punktów za stany końcowe. W niektórych podejściach potrzebny jest też mechanizm oceny stanów pośrednich, czyli kod odpowiedzialny za generowanie heurystycznych funkcji ewaluacyjnych, które w GGP nie mogą być znane z góry. Poszczególne elementy systemu mogą być realizowane na różne sposoby i najważniejsze z nich są przedstawione w następnych podrozdziałach. Część z wymienionych technik jest w pewnym odwrocie, gdyż znaleziono - wydaje się - lepsze alternatywy. GGP jest jednak dziedziną bardzo młodą, więc warto dla porządku wspomnieć pierwsze podejścia szczególnie, że gracze z nich korzystający wygrywali mistrzostwa świata. Ponadto można zaobserwować pewną ewolucję i odejście od technik klasycznego Game Playing na rzecz rozwiązań bardziej ogólnych i uniwersalnych. Celem tej sekcji jest przybliżenie idei rozwiązań zastosowanych w GGP, naszkicowanie zasad działania poszczególnych technik z wyraźnym zaznaczeniem pomysłów i intuicji z nimi związanych. Przy każdej z nich znajduje się odwołanie do pracy właściwej, opisującej dane zagadnienie w sposób bardziej formalny. Niestety na dzień dzisiejszy GGP nie doczekała się jako dziedzina pełniejszego opracowania, w większości prac powtarza sie element wprowadzenia do dziedziny, a opis pomysłow choć bardziej formalny niż w tej pracy, wciąż żadko kiedy zawiera jakiś dowód poprawności. 16

19 2.1 Automat gry w praktyce Zupełnie fundamentalną częścią systemu GGP jest automat gry. Mówiąc precyzyjniej jest to podsystem, który potrafi obliczyć odpowiedzi na co najmniej cztery podstawowe zapytania: Wszystkie legalne akcje dla danego gracza i stanu. Nastepny stan na podstawie danego stanu i wykonanych przez graczy akcji. Sprawdzić, czy dany stan jest stanem końcowym. Dla danego stanu końcowego i gracza podać liczbę zdobytych punktów. Właściwie w każdym systemie GGP jest to elemenet intensywnie wykorzystywany przez algorytm przeszukiwania. W związku z tym kluczową cechą automaty gry powinna być wydajność. Biorąc pod uwagę cele GGP i nauczkę ze ścieżki jaką obrali twórcy Deep Blue nie należy uważać elementu wydajności za bezwzględnie najważniejszy. Nie można też jednak zignorować ten element - jeśli maszyna kiedyś będzie zachowywać sie inteligentnie z dużym prawdopodobieństwem będzie też niezwykle wydajna. Mimo postępu w tej dziedzinie w stosunku do pierwszych prac dochodzącego do nawet 20x szybszych automatów gry wciaż jest wiele do zrobienia. [12] Dzięki jednemu z najszybszych obecnie rozwiązań potrafimy w szachach wygenerować - bez analizowania - około 1000 sytuacji na sekundę przy użyciu jednego rdzenia, co odpowiada zejściu w drzewie przeszukiwania na dwa, trzy ruchy do przodu. Dla przypomnienia Deep Blue średnio analizował około stanów na sekundę przy użyciu jednej wyspecjalizowanej jednostki (miał ich w sumie 480). Przy obecnej technologii konstrukcji procesora postęp wydajności osiąga się dzięki zrównolegleniu obliczeń i bez wątpienia od automatu gry wymagana jest skalowalności. Tą cechę można uzyskać poprzez utrzymywanie niezależnej kopii automatu dla każdego wątku zadającego zapytania Prolog Pierwsze systemy GGP implementowały automat gry w Prologu. Reguły podane w GDL można konwertować w jedną i drugą stronę w prosty, mechaniczny sposób. Drugim powodem tego wyboru jest fakt, że Prolog jest dojrzałym językiem z wieloma implementacjami silnika wnioskującego oraz z wieloma bibliotekami umożliwiającymi integrację z popularnymi językami programowania takimi jak Java, C++ czy C#. Zanim inne podsystemy będą mogły korzystać z automatu gry, należy go zainicjować wpisaniem do bazy wiedzy Prologa reguł wnioskowania zawartych w grze. 17

20 Następnie obliczanie odpowidzi na zapytanie np. o następników stanu s wymaga wgrania do bazy faktów prawdziwych w s. Za każdym razem jednak trzeba te fakty wymieniać tj. jeśli pytaliśmy o stan s 1, a chcemy zapytać o stan s 2 musimy usunać z bazy fakty prawdziwe w s 1, a następnie wgrać fakty prawdziwe w stanie s 2. Można uniknąć dodawania i usuwania faktów dodając dodatkowy argument oznaczający stan [7], co poprawia szybkość działąnia, ale zużywa też dużo więcej pamięci. Przykładem reguły GDL przekonwertowanej do postaci Prologowej jest: goal(player, 100, State) :- line(player, State) Poza mechaniczną zmianą wyrażeń potrzebne jest jeszcze zdefiniowanie kilku dodatkowych predykatów. GDL uwzględnia sprawdzenie czy dwa termy są różne, dlatego: distinct(x, Y) :- X \== Y Relacja true w GDL wyznacza zbiór faktów prawdziwych w danym stanie. Fakty te są zdefiniowane jako wyrażenia należące do opisu danego stanu: true(x, State) :- member(x, State) Ponad istnieje potrzeba zdefiniowania predykatów odpowiedzialnych za relacje odpowiedające spójnikom logicznym: not(x) :- \+ X or(a, B) :- A ; B Zaletą użycia Prologa z pewnością jest prostota implementacji i możliwość skorzystania z istniejących, przetestowanych elementów. Podejście to ma jednak przede wszystkim wady. Silniki wnioskowania Prologa są przystosowane do dowolnego zbioru predykatów, czyli w pewnym sensie są interpreterem przeszukującym zbiory stałych i reguł. W grze napisanej w GDL reguły są stałe, zmienia się tylko zbiór faktów. Zadajemy również tylko kilka rodzajów zapytań. Podsumowując: jest to sytuacja, w której do bardzo wyspecjalizowanych wnioskowań używamy bardzo ogólnego mechanizmu Kompilacja Na przeciw problemom wymienionym w poprzednim paragrafie wyszedł Kevin Waugh [12]. Idea jego rozwiązania jest następująca: reguły z opisu gry podane w GDL zamienić na kod źródłowy w C++, skompilować go, a następnie podająć zbiór faktów prawdziwych jako parametr metody dokonywać obliczeń. W zasadzie poza 18

21 mechaniczną generacją kodu i użyciem transpositions table do zapamiętywania pośrednich obliczeń praca nie przedstawia żadnych optymalizacji, wskazując poszukiwania takowych jako kierunek rozwoju. Wśród propozycji potencjalnych ulepszeń znajduję sie znalezienie heurystyki ulepszającej uszeregowanie poprzedników implikacji. Można znaleźć jeszcze jedną pracę w podobnym duchu [13], ale autorzy postanowili kompilować GDL do OCaml a co poskutkowało znacznie skromniejszym przyśpieszeniem. Kompilowanie GDL do kodu wykonywalnego oparte jest na spostrzeżeniu, że reguły wnioskowania są stałe i można algorytm rezolucji - dla danej gry - zapisać na stałe w kodzie maszynowym. Omawiany kompilator został przez twórcę nazwany gdlcc. Sam algorytm składa się z następujących faz: 1. Analiza leksykograficzna: usunięcie komentarzy, podział na tokeny. 2. Analiza syntaktyczna: z tokenów budowane są fakty i reguły. Każdy token ma przypisany identyfikator, dzięki czemu można operować na identyfikatorach zamiast napisów. 3. Odkrywanie zależności między regułami: przeszukiwanie grafu wszerz od podstawowych zapytań (np. o legalne ruchy ze stanu) w celu ustalenia zapytań pośrednich. 4. Generowanie kodu: na podstawie poprzedniego kroku generowany jest kod źródłowy z ustalonymi zapytaniami pośrednimi. Poniżej znajduje się przykładowy fragment wyniku działania algorytmu przepisany na język C#. Przetwarzane jest w nim zapytanie pośrednie z gry kółko i krzyżyk: (row?x a) W zasadach gry znajduje się tylko jedna reguła zawierająca predykat row w następniku implikacji: (<= (row?m?x) (true (cell?m 1?x)) (true (cell (?m 2?x)) (true (cell?m 3?x))) Dla każdego zapytania generowana jest metoda o odpowiedniej sygnaturze. Nazwa metody tworzona jest ze wględu na obliczany predykat oraz wektor bitowy odpowiadający ukonkretyzowaniu zmiennych. W powyższym przykładzie drugi argument jest ustalony jako a stąd odpowiadający mu wektor to 01. Wygenerowany kod wygląda następująco: 19

22 IList< Tuple<int> > EvaluateRow01(int a) { var results = new List<Tuple<int>>(); var b = EvaluateCell011(2,a); foreach(var argb in b) { var d = EvaluateCell111(argB[0], 4, a); foreach(var argd in d) { var f = EvaluateCell111(argB[0], 5, a); foreach(var argf in f) { results.add(new Tuple<int>(argF[0]); } } } return results.distinct(); } Kompilowanie gier pozwoliło uzyskać wyraźną poprawę wydajności w stosunku do rozwiązań opartych na Prologu. Testy przeprowadzone przez Kevina Waugh[12] polegały na przeprowadzaniu losowych przeszukiwań drzewa gry. Pierwszy z graczy korzystał z implementacji YAP Prolog, podczas gdy drugi gracz korzystał z kompilowanego źródła GDL. Oba programy były uruchamiane na jednym rdzeniu procesora o częstotliwości 2.4GHz. Poniżej znajduje się tabelka z uśrednionymi ilościami przejrzanych ruchów w czasie jednej sekundy. Różnica w wydajności jest Kółko i krzyżyk Szachy YAP gdlcc gdlcc tt Tabela 2.1: Ilość rozważanych ruchów w 1s czasu wyraźna, szczególnie w grze, której stan jest opisywany niewielką ilościa faktów. Rozmiar stanu gry ma też wpływ na przydatność transpositions table, w grze kółko i krzyżyk przyśpieszenie jest wyraźne, w szachach otrzymujemy wręcz zwolnienie Dekompozycja gier Rozważmy następującą sytuację: na stole znajdują się dwie plansze, każda do grania w niezależną grę. Dla uproszczenia przyjmijmy, że branching factor obu można 20

23 oszacować przez O(b), gdzie b jest pewną stałą. Rozpatrując dwie plansze jako całość otrzymujemy grę z branching factor równym O(b 2 ). Oznacza to, że mogąc rozpatrzyć w jednostce czasu dokładnie k stanów gry w istocie rozpatrujemy tylko O( k) niezależnych stanów każdej z podgier. Ponadto gdyby rozpatrywać każdą podgrę niezależnie, moglibyśmy rozpatrzyć O( k ) sytuacji dla każdej z nich. 2 Co w przypadku kiedy liczba niezależnych podgier równa się n? Branching factor całości w tym przypadku równy jest O(b n ) co oznacza, że sam poziom rozgałęzienia drzewa gry ulega kombinatorycznej eksplozji, chociaż rozpatrując podgry w sposób niezależny moglibyśmy rozpatrzyć dla każdej O( k ) sytuacji. Dokładnie n tak zachowałby się człowiek widząc, że sytuacja na jednej planszy nie ma wpływu na sytuację na drugiej. Podana tutaj sytuacja w grze napisanej w GDL zdażyła się podczas konkursu w roku 2008 roku, kiedy gracze walczyli w grze odpowiadającej dwóm jednoczesnym partiom w kółko i krzyżyk oraz w grze jednoosobowej składającej się z dwóch łamigłówek. Próbę rozwiązania tego problemu można znaleść w dwóch pracach: w opisie rozszerzenia do gracza Fluxplayer[23] oraz jako pracę teoretyczną grupy osób z Uniwersytetu Stanforda[26]. W drugiej części mojej pracy będzie szczegółowo omówione rozwiązanie zaproponowane na Stanfordzie - ma ono większy potencjał do optymalizacji Wykrywanie symetrii W wielu grach ważnym elementem służącym optymalizacji jest wykrywanie symetrii stanów gry. Stephan Schiffel w swojej pracy [15] zaproponował sposób na wygrywanie symetrii stanów w grach napisanych w GDL. Pierwszym problemem, który należało rozwiązać była sama definicja symetrii. W grze kółko i krzyżyk można dość łatwo zaobserwować, że stany gry mogą być symetryczne z dokładnością do odbić i obrotów. W grach definiowanych przez GDL Schiffel definiuje symetrię w następujący sposób (ujmując rzecz nieformalnie): Definicja 7 (Symetria w grze) Symetrią gry G nazywamy bijekcję σ działającą na obiektach opisu G w GDL w ten sposób, że zachowuje strukturę gry. Dwa stany s 1 i s 2 są symetryczne jeśli akcje możliwe w stanie s 1 mają swoje symetryczne odpowiedniki wśród akcji legalnych w stanie s 2. Dwie akcje są są symetryczne jeśli zaaplikowane prowadzą w jednym kroku do symetrycznego stanu. Powyższa definicja jest intuicyjnie łatwa do zrozumienia, chociaż do zastosowania jej potrzeba pewnych uściśleń i ograniczeń zawartych w pracy Schiffel a 21

24 [15]. Pierwszym problemem, który należy zauwazyć jest rekurencyjność definicji. Sprawdzając ją wprost, można teoretycznie sprawdzić czy funkcja σ jest symetrią, ale jest to zupełnie niepraktyczne. Istotą pracy Schiffel a jest wskazanie stosunkowo niewielkiego grafu, którego automorfizmy są równoważne symetriom. Budowę grafu można w szerszym spojrzeniu opisać następująco: zmienne w opisie gry przemianujemy tak, żeby się nie powtarzały w formułach. Następnie dla każdej zmiennej, stałej, predykatu, reguły wnioskowania czy termu występującego w opisie gry bez relacji init, ale z relacją true (graf jest różny dla poszczególnych stanów gry). Każdy z tych wierzchołków jest kolorowany w ten sposób, że możliwy jest tylko automorfizm przekształcający zmienne na zmienne, stałe na stałe etc. Krawędzie w grafie odzwierciedlają zależności między wierzchołkami i dodaje się je w 7 przypadkach opisanych dokładniej w pracy. Symetrię można wykorzystać przy odcinaniu pewnych gałęzi gry w przypadku, kiedy odwiedziliśmy już stan symetryczny, lub kiedy rozważamy wykonanie jednej akcji ze zbioru, w którym część akcji jest symetrycznych (wtedy warto sprawdzić tylko reprezentantów klas równoważności). Testy pokazały ze zaproponowana metoda potrafi w prostych grach taki jak kółko i krzyżyk odrzucić nawet 7 8 możliwych stanów, ale są też gry, w której zysk jest minimalny, lub też nawet występuje strata. Ostatni przypadek ma miejsce, kiedy zbiór faktów potrzebnych do opisu stanu jest spory, a symetrie występują rzadko. 2.2 Algorytmy przeszukiwania Drugim istotnym podsystemem jest jakaś forma przeszukiwania automatu,nawet jeśli miało to polegać tylko na przejrzeniu możliwych do wykonania ruchów z aktualnego stanu gry. W pierwszych systemach GGP stosowano rozwiązania z klasycznego Game Playing, takie jak algorytm MiniMax z istniejącymi usprawnieniami. Metody te zostały szybko wyparte przez nowsze, oparte na statystyce. Warto jednak omówić je wszystkie, zwracając szczególną uwagę na wady i zalety w kontekście grania w bardzo zróżnicowane gry szczególnie, że niezależnie od wybranego algorytmu zawsze pozostaje do rozwiązania problem modelowania zachowań przeciwników MiniMax MiniMax jest algorytmem, a właściwie teorią, która mówi o tym, że w skończonych grach dwuosowych sumy zerowej z naprzemiennymi ruchami możemy mechanicznie obliczyć gwarantowaną wypłatę dla gracza rozpoczynającego grę. W 22

25 grze bierze udział dwóch graczy: min i max. Pierwszy stara się zminimalizować wartość funkcji celu, drugi zachowuje się dokładnie odwrotnie. Grę rozpoczyna gracz max, który może wykonać jeden ze skończonego zbioru ruchów legalnych. Z każdym wyborem wiążą się pewne konsekwencje, w szczególności dla każdego wyboru gracza max gracz min może prowadzić dalej grę tak, żeby zagwarantować sobie jak najmniejszą wartość funkcji celu. Konsekwencją takiego rozumowania jest strategia optymalna dla gracza max, a mianowicie wykonanie takiego ruchu, który maksymalizuje minimalizowaną przez gracza min gwarantowaną wypłatę. Analogiczne rozumowanie można przeprowadzić z perspektywny gracza min. W konsekwencji możemy na problem spojrzeć, jak na drzewo drzewo gry, w którym wierzchołki mają przypisaną gwarantowaną wypłatę. Zaczynając od funkcji celu w liściach na parzystych poziomach drzewa, gracz max wybiera największą wartość wypłaty ze wszystkich wartości w bezpośrednich potomkach. Analogicznie gracz min na nieparzystych poziomach drzewa wybiera najmniejszą gwarantowaną wypłatę ze wszystkich wartości w bezpośrednich potomkach. Przykładowe drzewo gry znajduje się na Rysunku 2.1: liczby symbolizują gwarantowane wypłaty, czerwone strzałki oznaczają dokonane na poszczególnych poziomach drzewa wybory, a niebieska strzałka oznacza ruch wybrany przez gracza max po przeanalizowaniu całego drzewa. Rysunek 2.1: Przykładowe drzewo gry. Źródło: W przedstawionym rozumowanie istotnymi własnościami gry jest naprzemienność wykonywania ruchów oraz fakt, że funkcja wypłaty ma sumę zerową( w każdym stanie funkcje wypłaty dla gracza min i max sumują się do zera). W grach 23

Heurystyki. Strategie poszukiwań

Heurystyki. Strategie poszukiwań Sztuczna inteligencja Heurystyki. Strategie poszukiwań Jacek Bartman Zakład Elektrotechniki i Informatyki Instytut Techniki Uniwersytet Rzeszowski DLACZEGO METODY PRZESZUKIWANIA? Sztuczna Inteligencja

Bardziej szczegółowo

Wyznaczanie strategii w grach

Wyznaczanie strategii w grach Wyznaczanie strategii w grach Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Definicja gry Teoria gier i konstruowane na jej podstawie programy stanowią jeden z głównych

Bardziej szczegółowo

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ). Algorytm A* Opracowanie: Joanna Raczyńska 1.Wstęp Algorytm A* jest heurystycznym algorytmem służącym do znajdowania najkrótszej ścieżki w grafie. Jest to algorytm zupełny i optymalny, co oznacza, że zawsze

Bardziej szczegółowo

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Przeszukiwanie przestrzeni rozwiązań, szukanie na ślepo, wszerz, w głąb. Spis treści: 1. Wprowadzenie 3. str. 1.1 Krótki Wstęp

Bardziej szczegółowo

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych ELEMENTY SZTUCZNEJ INTELIGENCJI Laboratorium nr 9 PRZESZUKIWANIE GRAFÓW Z

Bardziej szczegółowo

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Paweł Szołtysek 12 czerwca 2008 Streszczenie Planowanie produkcji jest jednym z problemów optymalizacji dyskretnej,

Bardziej szczegółowo

MAGICIAN. czyli General Game Playing w praktyce. General Game Playing

MAGICIAN. czyli General Game Playing w praktyce. General Game Playing MAGICIAN czyli General Game Playing w praktyce General Game Playing 1 General Game Playing? Cel: stworzenie systemu umiejącego grać/nauczyć się grać we wszystkie gry Turniej w ramach AAAI National Conference

Bardziej szczegółowo

3. MINIMAX. Rysunek 1: Drzewo obrazujące przebieg gry.

3. MINIMAX. Rysunek 1: Drzewo obrazujące przebieg gry. 3. MINIMAX. Bardzo wygodną strukturą danych pozwalającą reprezentować stan i przebieg gry (szczególnie gier dwuosobowych) jest drzewo. Węzły drzewa reprezentują stan gry po wykonaniu ruchu przez jednego

Bardziej szczegółowo

Metody przeszukiwania

Metody przeszukiwania Metody przeszukiwania Co to jest przeszukiwanie Przeszukiwanie polega na odnajdywaniu rozwiązania w dyskretnej przestrzeni rozwiązao. Zwykle przeszukiwanie polega na znalezieniu określonego rozwiązania

Bardziej szczegółowo

Algorytmy sztucznej inteligencji

Algorytmy sztucznej inteligencji www.math.uni.lodz.pl/ radmat Przeszukiwanie z ograniczeniami Zagadnienie przeszukiwania z ograniczeniami stanowi grupę problemów przeszukiwania w przestrzeni stanów, które składa się ze: 1 skończonego

Bardziej szczegółowo

Partition Search i gry z niezupełną informacją

Partition Search i gry z niezupełną informacją MIMUW 21 stycznia 2010 1 Co to jest gra? Proste algorytmy 2 Pomysł Algorytm Przykład użycia 3 Monte Carlo Inne spojrzenie Definicja Co to jest gra? Proste algorytmy Grą o wartościach w przedziale [0, 1]

Bardziej szczegółowo

Zajęcia nr. 3 notatki

Zajęcia nr. 3 notatki Zajęcia nr. 3 notatki 22 kwietnia 2005 1 Funkcje liczbowe wprowadzenie Istnieje nieskończenie wiele funkcji w matematyce. W dodaktu nie wszystkie są liczbowe. Rozpatruje się funkcje które pobierają argumenty

Bardziej szczegółowo

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2 Metody teorii gier ALP520 - Wykład z Algorytmów Probabilistycznych p.2 Metody teorii gier Cel: Wyprowadzenie oszacowania dolnego na oczekiwany czas działania dowolnego algorytmu losowego dla danego problemu.

Bardziej szczegółowo

Maciej Piotr Jankowski

Maciej Piotr Jankowski Reduced Adder Graph Implementacja algorytmu RAG Maciej Piotr Jankowski 2005.12.22 Maciej Piotr Jankowski 1 Plan prezentacji 1. Wstęp 2. Implementacja 3. Usprawnienia optymalizacyjne 3.1. Tablica ekspansji

Bardziej szczegółowo

O badaniach nad SZTUCZNĄ INTELIGENCJĄ

O badaniach nad SZTUCZNĄ INTELIGENCJĄ O badaniach nad SZTUCZNĄ INTELIGENCJĄ Wykład 7. O badaniach nad sztuczną inteligencją Co nazywamy SZTUCZNĄ INTELIGENCJĄ? szczególny rodzaj programów komputerowych, a niekiedy maszyn. SI szczególną własność

Bardziej szczegółowo

Aproksymacja funkcji a regresja symboliczna

Aproksymacja funkcji a regresja symboliczna Aproksymacja funkcji a regresja symboliczna Problem aproksymacji funkcji polega na tym, że funkcję F(x), znaną lub określoną tablicą wartości, należy zastąpić inną funkcją, f(x), zwaną funkcją aproksymującą

Bardziej szczegółowo

Nierówność Krafta-McMillana, Kodowanie Huffmana

Nierówność Krafta-McMillana, Kodowanie Huffmana Nierówność Krafta-McMillana, Kodowanie Huffmana Kodowanie i kompresja informacji - Wykład 2 1 marca 2010 Test na jednoznaczna dekodowalność Kod a jest prefiksem kodu b jeśli b jest postaci ax. x nazywamy

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Tworzenie gier na urządzenia mobilne

Tworzenie gier na urządzenia mobilne Katedra Inżynierii Wiedzy Teoria podejmowania decyzji w grze Gry w postaci ekstensywnej Inaczej gry w postaci drzewiastej, gry w postaci rozwiniętej; formalny opis wszystkich możliwych przebiegów gry z

Bardziej szczegółowo

10. Wstęp do Teorii Gier

10. Wstęp do Teorii Gier 10. Wstęp do Teorii Gier Definicja Gry Matematycznej Gra matematyczna spełnia następujące warunki: a) Jest co najmniej dwóch racjonalnych graczy. b) Zbiór możliwych dezycji każdego gracza zawiera co najmniej

Bardziej szczegółowo

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa. Plan Procedura decyzyjna Reguły α i β - algorytm Plan Procedura decyzyjna Reguły α i β - algorytm Logika obliczeniowa Instytut Informatyki 1 Procedura decyzyjna Logiczna konsekwencja Teoria aksjomatyzowalna

Bardziej szczegółowo

AiSD zadanie trzecie

AiSD zadanie trzecie AiSD zadanie trzecie Gliwiński Jarosław Marek Kruczyński Konrad Marek Grupa dziekańska I5 5 czerwca 2008 1 Wstęp Celem postawionym przez zadanie trzecie było tzw. sortowanie topologiczne. Jest to typ sortowania

Bardziej szczegółowo

Metoda Tablic Semantycznych

Metoda Tablic Semantycznych Procedura Plan Reguły Algorytm Logika obliczeniowa Instytut Informatyki Plan Procedura Reguły 1 Procedura decyzyjna Logiczna równoważność formuł Logiczna konsekwencja Procedura decyzyjna 2 Reguły α, β,

Bardziej szczegółowo

O badaniach nad SZTUCZNĄ INTELIGENCJĄ

O badaniach nad SZTUCZNĄ INTELIGENCJĄ O badaniach nad SZTUCZNĄ INTELIGENCJĄ Jak określa się inteligencję naturalną? Jak określa się inteligencję naturalną? Inteligencja wg psychologów to: Przyrodzona, choć rozwijana w toku dojrzewania i uczenia

Bardziej szczegółowo

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych. Aproksymacja funkcji a regresja symboliczna Problem aproksymacji funkcji polega na tym, że funkcję F(), znaną lub określoną tablicą wartości, należy zastąpić inną funkcją, f(), zwaną funkcją aproksymującą

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je. Problem porządkowania zwanego również sortowaniem jest jednym z najważniejszych i najpopularniejszych zagadnień informatycznych. Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,, x n. Wynik: Uporządkowanie

Bardziej szczegółowo

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu. Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu. 1 Logika Klasyczna obejmuje dwie teorie:

Bardziej szczegółowo

Programowanie w języku C++ Grażyna Koba

Programowanie w języku C++ Grażyna Koba Programowanie w języku C++ Grażyna Koba Kilka definicji: Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i zasad

Bardziej szczegółowo

Luty 2001 Algorytmy (4) 2000/2001

Luty 2001 Algorytmy (4) 2000/2001 Mając dany zbiór elementów, chcemy znaleźć w nim element największy (maksimum), bądź najmniejszy (minimum). We wszystkich naturalnych metodach znajdywania najmniejszego i największego elementu obecne jest

Bardziej szczegółowo

Algorytmy dla gier dwuosobowych

Algorytmy dla gier dwuosobowych Algorytmy dla gier dwuosobowych Wojciech Dudek Seminarium Nowości Komputerowe 5 czerwca 2008 Plan prezentacji Pojęcia wstępne (gry dwuosobowe, stan gry, drzewo gry) Algorytm MiniMax Funkcje oceniające

Bardziej szczegółowo

Układy VLSI Bramki 1.0

Układy VLSI Bramki 1.0 Spis treści: 1. Wstęp... 2 2. Opis edytora schematów... 2 2.1 Dodawanie bramek do schematu:... 3 2.2 Łączenie bramek... 3 2.3 Usuwanie bramek... 3 2.4 Usuwanie pojedynczych połączeń... 4 2.5 Dodawanie

Bardziej szczegółowo

7. Pętle for. Przykłady

7. Pętle for. Przykłady . Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i

Bardziej szczegółowo

0 + 0 = 0, = 1, = 1, = 0.

0 + 0 = 0, = 1, = 1, = 0. 5 Kody liniowe Jak już wiemy, w celu przesłania zakodowanego tekstu dzielimy go na bloki i do każdego z bloków dodajemy tak zwane bity sprawdzające. Bity te są w ścisłej zależności z bitami informacyjnymi,

Bardziej szczegółowo

Metody numeryczne w przykładach

Metody numeryczne w przykładach Metody numeryczne w przykładach Bartosz Ziemkiewicz Wydział Matematyki i Informatyki UMK, Toruń Regionalne Koło Matematyczne 8 kwietnia 2010 r. Bartosz Ziemkiewicz (WMiI UMK) Metody numeryczne w przykładach

Bardziej szczegółowo

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Spacery losowe generowanie realizacji procesu losowego

Spacery losowe generowanie realizacji procesu losowego Spacery losowe generowanie realizacji procesu losowego Michał Krzemiński Streszczenie Omówimy metodę generowania trajektorii spacerów losowych (błądzenia losowego), tj. szczególnych procesów Markowa z

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

Bardziej szczegółowo

Metody Kompilacji Wykład 3

Metody Kompilacji Wykład 3 Metody Kompilacji Wykład 3 odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2 Na przykład, dla produkcji expr -> expr 1 + term możemy

Bardziej szczegółowo

METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ

METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ KONWERSATORIUM 6: REZOLUCJA V rok kognitywistyki UAM 1 Kilka uwag terminologicznych Słuchacze zapewne pamiętają z zajęć dotyczących PROLOGu poniższą

Bardziej szczegółowo

Rozwiązywanie problemów metodą przeszukiwania

Rozwiązywanie problemów metodą przeszukiwania Rozwiązywanie problemów metodą przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Reprezentacja problemu w przestrzeni stanów Jedną z ważniejszych metod sztucznej

Bardziej szczegółowo

Heurystyczne metody przeszukiwania

Heurystyczne metody przeszukiwania Heurystyczne metody przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Pojęcie heurystyki Metody heurystyczne są jednym z ważniejszych narzędzi sztucznej inteligencji.

Bardziej szczegółowo

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność Przy rozważaniu wydajności przetwarzania (obliczeń, komunikacji itp.) często pojawia się pojęcie skalowalności

Bardziej szczegółowo

Programowanie celowe #1

Programowanie celowe #1 Programowanie celowe #1 Problem programowania celowego (PC) jest przykładem problemu programowania matematycznego nieliniowego, który można skutecznie zlinearyzować, tzn. zapisać (i rozwiązać) jako problem

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Wyszukiwanie binarne

Wyszukiwanie binarne Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie

Bardziej szczegółowo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

Bardziej szczegółowo

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów Wykład 2. Reprezentacja komputerowa grafów 1 / 69 Macierz incydencji Niech graf G będzie grafem nieskierowanym bez pętli o n wierzchołkach (x 1, x 2,..., x n) i m krawędziach (e 1, e 2,..., e m). 2 / 69

Bardziej szczegółowo

Znajdowanie wyjścia z labiryntu

Znajdowanie wyjścia z labiryntu Znajdowanie wyjścia z labiryntu Zadanie to wraz z problemem pakowania najcenniejszego plecaka należy do problemów optymalizacji, które dotyczą znajdowania najlepszego rozwiązania wśród wielu możliwych

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

Instrukcje dla zawodników

Instrukcje dla zawodników Instrukcje dla zawodników Nie otwieraj arkusza z zadaniami dopóki nie zostaniesz o to poproszony. Instrukcje poniżej zostaną ci odczytane i wyjaśnione. 1. Arkusz składa się z 3 zadań. 2. Każde zadanie

Bardziej szczegółowo

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb. 1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb. Algorytmy przeszukiwania w głąb i wszerz są najczęściej stosowanymi algorytmami przeszukiwania. Wykorzystuje się je do zbadania istnienia połączenie

Bardziej szczegółowo

Obliczenia iteracyjne

Obliczenia iteracyjne Lekcja Strona z Obliczenia iteracyjne Zmienne iteracyjne (wyliczeniowe) Obliczenia iteracyjne wymagają zdefiniowania specjalnej zmiennej nazywanej iteracyjną lub wyliczeniową. Zmienną iteracyjną od zwykłej

Bardziej szczegółowo

Materiały dla finalistów

Materiały dla finalistów Materiały dla finalistów Malachoviacus Informaticus 2016 11 kwietnia 2016 Wprowadzenie Poniższy dokument zawiera opisy zagadnień, które będą niezbędne do rozwiązania zadań w drugim etapie konkursu. Polecamy

Bardziej szczegółowo

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby Scenariusz zajęć Moduł VI Projekt Gra logiczna zgadywanie liczby Moduł VI Projekt Gra logiczna zgadywanie liczby Cele ogólne: przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka

Bardziej szczegółowo

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015 1 Metody numeryczne Dział matematyki Metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach. Otrzymywane

Bardziej szczegółowo

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Drzewa: BST, kopce Letnie Warsztaty Matematyczno-Informatyczne Drzewa: BST, kopce Definicja drzewa Drzewo (ang. tree) to nieskierowany, acykliczny, spójny graf. Drzewo może

Bardziej szczegółowo

Wstęp do Sztucznej Inteligencji

Wstęp do Sztucznej Inteligencji Wstęp do Sztucznej Inteligencji Rozwiązywanie problemów-i Joanna Kołodziej Politechnika Krakowska Wydział Fizyki, Matematyki i Informatyki Rozwiązywanie problemów Podstawowe fazy: Sformułowanie celu -

Bardziej szczegółowo

SZTUCZNA INTELIGENCJA

SZTUCZNA INTELIGENCJA SZTUCZNA INTELIGENCJA WYKŁAD 12. PRZESZUKIWANIE Częstochowa 2014 Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska ROZWIĄZYWANIE PROBLEMÓW JAKO PRZESZUKIWANIE Istotną rolę podczas

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH LGORTM I STRUKTUR DNH Temat 6: Drzewa ST, VL Wykładowca: dr inż. bigniew TRPT e-mail: bigniew.tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Współautorami wykładu

Bardziej szczegółowo

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 Wykład 8 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 sformułowanie problemu przegląd drzewa poszukiwań przykłady problemów wybrane narzędzia programistyczne J. Cichoń, P. Kobylański

Bardziej szczegółowo

Złożoność informacyjna Kołmogorowa. Paweł Parys

Złożoność informacyjna Kołmogorowa. Paweł Parys Złożoność informacyjna Kołmogorowa Paweł Parys Serock 2012 niektóre liczby łatwiej zapamiętać niż inne... (to zależy nie tylko od wielkości liczby) 100...0 100 100... 100 100 100 25839496603316858921 31415926535897932384

Bardziej szczegółowo

Temat 1: Pojęcie gry, gry macierzowe: dominacje i punkty siodłowe

Temat 1: Pojęcie gry, gry macierzowe: dominacje i punkty siodłowe Temat 1: Pojęcie gry, gry macierzowe: dominacje i punkty siodłowe Teorię gier można określić jako teorię podejmowania decyzji w szczególnych warunkach. Zajmuje się ona logiczną analizą sytuacji konfliktu

Bardziej szczegółowo

Planowanie drogi robota, algorytm A*

Planowanie drogi robota, algorytm A* Planowanie drogi robota, algorytm A* Karol Sydor 13 maja 2008 Założenia Uproszczenie przestrzeni Założenia Problem planowania trasy jest bardzo złożony i trudny. W celu uproszczenia problemu przyjmujemy

Bardziej szczegółowo

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 16.01.2003 Algorytmy i Struktury Danych PIŁA ALGORYTMY ZACHŁANNE czas [ms] Porównanie Algorytmów Rozwiązyjących problem TSP 100 000 000 000,000 10 000 000

Bardziej szczegółowo

Ekonometria - ćwiczenia 10

Ekonometria - ćwiczenia 10 Ekonometria - ćwiczenia 10 Mateusz Myśliwski Zakład Ekonometrii Stosowanej Instytut Ekonometrii Kolegium Analiz Ekonomicznych Szkoła Główna Handlowa 14 grudnia 2012 Wprowadzenie Optymalizacja liniowa Na

Bardziej szczegółowo

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Zbiory, relacje i funkcje

Zbiory, relacje i funkcje Zbiory, relacje i funkcje Zbiory będziemy zazwyczaj oznaczać dużymi literami A, B, C, X, Y, Z, natomiast elementy zbiorów zazwyczaj małymi. Podstawą zależność między elementem zbioru a zbiorem, czyli relację

Bardziej szczegółowo

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ 1 Inferencyjna równoważność formuł Definicja 9.1. Formuła A jest

Bardziej szczegółowo

Optimizing Programs with Intended Semantics

Optimizing Programs with Intended Semantics Interaktywna optymalizacja programów 26 kwietnia 2010 Spis treści Spis treści Wstęp Omówienie zaproponowanego algorytmu na przykładzie Wewnętrzna reprezentacja reguł dotyczących optymalizacji Wybrane szczegóły

Bardziej szczegółowo

Algorytmy ewolucyjne (3)

Algorytmy ewolucyjne (3) Algorytmy ewolucyjne (3) http://zajecia.jakubw.pl/nai KODOWANIE PERMUTACJI W pewnych zastosowaniach kodowanie binarne jest mniej naturalne, niż inne sposoby kodowania. Na przykład, w problemie komiwojażera

Bardziej szczegółowo

166 Wstęp do statystyki matematycznej

166 Wstęp do statystyki matematycznej 166 Wstęp do statystyki matematycznej Etap trzeci realizacji procesu analizy danych statystycznych w zasadzie powinien rozwiązać nasz zasadniczy problem związany z identyfikacją cechy populacji generalnej

Bardziej szczegółowo

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Wykład 4. Określimy teraz pewną ważną klasę pierścieni. Wykład 4 Określimy teraz pewną ważną klasę pierścieni. Twierdzenie 1 Niech m, n Z. Jeśli n > 0 to istnieje dokładnie jedna para licz q, r, że: m = qn + r, 0 r < n. Liczbę r nazywamy resztą z dzielenia

Bardziej szczegółowo

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017 Logika Stosowana Wykład 1 - Logika zdaniowa Marcin Szczuka Instytut Informatyki UW Wykład monograficzny, semestr letni 2016/2017 Marcin Szczuka (MIMUW) Logika Stosowana 2017 1 / 30 Plan wykładu 1 Język

Bardziej szczegółowo

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Wykład 2. Drzewa zbalansowane AVL i 2-3-4 Wykład Drzewa zbalansowane AVL i -3-4 Drzewa AVL Wprowadzenie Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Drzewa -3-4 Definicja drzewa -3-4 Operacje wstawiania

Bardziej szczegółowo

Programowanie w Logice Struktury danych (Lista 2)

Programowanie w Logice Struktury danych (Lista 2) Programowanie w Logice Struktury danych (Lista 2) Przemysław Kobylański Wstęp Struktury danych wyraża się w Prologu w postaci termów, tj. symbolicznych wyrażeń. Dotychczas poznaliśmy proste termy takie

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu danych

Bardziej szczegółowo

9.9 Algorytmy przeglądu

9.9 Algorytmy przeglądu 14 9. PODSTAWOWE PROBLEMY JEDNOMASZYNOWE 9.9 Algorytmy przeglądu Metody przeglądu dla problemu 1 r j,q j C max były analizowane między innymi w pracach 25, 51, 129, 238. Jak dotychczas najbardziej elegancka

Bardziej szczegółowo

Maszyna Turinga języki

Maszyna Turinga języki Maszyna Turinga języki Teoria automatów i języków formalnych Dr inż. Janusz Majewski Katedra Informatyki Maszyna Turinga (1) b b b A B C B D A B C b b Q Zależnie od symbolu obserwowanego przez głowicę

Bardziej szczegółowo

Metoda Karnaugh. B A BC A

Metoda Karnaugh. B A BC A Metoda Karnaugh. Powszechnie uważa się, iż układ o mniejszej liczbie elementów jest tańszy i bardziej niezawodny, a spośród dwóch układów o takiej samej liczbie elementów logicznych lepszy jest ten, który

Bardziej szczegółowo

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Zadanie do wykonania 1) Utwórz na pulpicie katalog w formacie Imię nazwisko, w którym umieść wszystkie pliki związane z

Bardziej szczegółowo

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Politechnika Poznańska Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Joanna Józefowska POZNAŃ 2010/11 Spis treści Rozdział 1. Metoda programowania dynamicznego........... 5

Bardziej szczegółowo

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 > Typy indeksów Indeks jest zakładany na atrybucie relacji atrybucie indeksowym (ang. indexing field). Indeks zawiera wartości atrybutu indeksowego wraz ze wskaźnikami do wszystkich bloków dyskowych zawierających

Bardziej szczegółowo

Analiza wielokryterialna wstęp do zagadnienia

Analiza wielokryterialna wstęp do zagadnienia Organizacja, przebieg i zarządzanie inwestycją budowlaną Analiza wielokryterialna wstęp do zagadnienia dr hab. Mieczysław Połoński prof. SGGW 1 Wprowadzenie Jednym z podstawowych, a równocześnie najważniejszym

Bardziej szczegółowo

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH Jednym z zastosowań metod numerycznych jest wyznaczenie pierwiastka lub pierwiastków równania nieliniowego. W tym celu stosuje się szereg metod obliczeniowych np:

Bardziej szczegółowo

Optymalizacja systemów

Optymalizacja systemów Optymalizacja systemów Laboratorium Sudoku autor: A. Gonczarek Cel zadania Celem zadania jest napisanie programu rozwiązującego Sudoku, formułując problem optymalizacji jako zadanie programowania binarnego.

Bardziej szczegółowo

Temat: Algorytm kompresji plików metodą Huffmana

Temat: Algorytm kompresji plików metodą Huffmana Temat: Algorytm kompresji plików metodą Huffmana. Wymagania dotyczące kompresji danych Przez M oznaczmy zbiór wszystkich możliwych symboli występujących w pliku (alfabet pliku). Przykład M = 2, gdy plik

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

Bardziej szczegółowo

M T E O T D O ZI Z E E A LG L O G R O Y R TM

M T E O T D O ZI Z E E A LG L O G R O Y R TM O ALGORYTMACH I METODZIE ALGORYTMICZNEJ Czym jest algorytm? Czym jest algorytm? przepis schemat zestaw reguł [ ] program ALGORYTM (objaśnienie ogólne) Algorytm Pojęcie o rodowodzie matematycznym, oznaczające

Bardziej szczegółowo

OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI

OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI Autoreferat do rozprawy doktorskiej OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI Michał Mazur Gliwice 2016 1 2 Montaż samochodów na linii w

Bardziej szczegółowo

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Funkcja uwikłana (równanie nieliniowe) jest to funkcja, która nie jest przedstawiona jawnym przepisem, wzorem wyrażającym zależność wartości

Bardziej szczegółowo

6. Pętle while. Przykłady

6. Pętle while. Przykłady 6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!

Bardziej szczegółowo

D. Miszczyńska, M.Miszczyński KBO UŁ 1 GRY KONFLIKTOWE GRY 2-OSOBOWE O SUMIE WYPŁAT ZERO

D. Miszczyńska, M.Miszczyński KBO UŁ 1 GRY KONFLIKTOWE GRY 2-OSOBOWE O SUMIE WYPŁAT ZERO D. Miszczyńska, M.Miszczyński KBO UŁ GRY KONFLIKTOWE GRY 2-OSOBOWE O SUMIE WYPŁAT ZERO Gra w sensie niżej przedstawionym to zasady którymi kierują się decydenci. Zakładamy, że rezultatem gry jest wypłata,

Bardziej szczegółowo

========================= Zapisujemy naszą funkcję kwadratową w postaci kanonicznej: 2

========================= Zapisujemy naszą funkcję kwadratową w postaci kanonicznej: 2 Leszek Sochański Arkusz przykładowy, poziom podstawowy (A1) Zadanie 1. Wykresem funkcji kwadratowej f jest parabola o wierzchołku 5,7 Wówczas prawdziwa jest równość W. A. f 1 f 9 B. f 1 f 11 C. f 1 f 1

Bardziej szczegółowo

1 Metody rozwiązywania równań nieliniowych. Postawienie problemu

1 Metody rozwiązywania równań nieliniowych. Postawienie problemu 1 Metody rozwiązywania równań nieliniowych. Postawienie problemu Dla danej funkcji ciągłej f znaleźć wartości x, dla których f(x) = 0. (1) 2 Przedział izolacji pierwiastka Będziemy zakładać, że równanie

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo