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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego Piotr Rybak Koło naukowe fizyków Migacz, Uniwersytet Wrocławski Piotr Rybak (Migacz UWr) Odkrywanie algorytmów kwantowych 1 / 17 Spis

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

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

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

Ć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

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

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

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny, Politechnika Śląska www.imio.polsl.pl METODY HEURYSTYCZNE ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe opracował:

Bardziej szczegółowo

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

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

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 genetyczne

Algorytmy genetyczne Algorytmy genetyczne Motto: Zamiast pracowicie poszukiwać najlepszego rozwiązania problemu informatycznego lepiej pozwolić, żeby komputer sam sobie to rozwiązanie wyhodował! Algorytmy genetyczne służą

Bardziej szczegółowo

METODY SZTUCZNEJ INTELIGENCJI 2 Opis projektu

METODY SZTUCZNEJ INTELIGENCJI 2 Opis projektu Kamil Figura Krzysztof Kaliński Bartek Kutera METODY SZTUCZNEJ INTELIGENCJI 2 Opis projektu Porównanie metod uczenia z rodziny TD z algorytmem Layered Learning na przykładzie gry w warcaby i gry w anty-warcaby

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

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

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

Optymalizacja systemów

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

Bardziej szczegółowo

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH Transport, studia I stopnia Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Ewa Pabisek Adam Wosatko Postać ogólna równania nieliniowego Często występującym, ważnym problemem obliczeniowym

Bardziej szczegółowo

Wykład 1. Systemy przekazywania wiadomości z założeniem bezbłędności działania

Wykład 1. Systemy przekazywania wiadomości z założeniem bezbłędności działania Mariusz Juszczyk 16 marca 2010 Seminarium badawcze Wykład 1. Systemy przekazywania wiadomości z założeniem bezbłędności działania Wstęp Systemy przekazywania wiadomości wymagają wprowadzenia pewnych podstawowych

Bardziej szczegółowo

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

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

Przykładowe rozwiązania

Przykładowe rozwiązania Przykładowe rozwiązania Poniższy dokument zawiera przykładowe rozwiązania zadań z I etapu I edycji konkursu (2014 r.). Rozwiązania w formie takiej jak przedstawiona niżej uzyskałyby pełną liczbę punktów

Bardziej szczegółowo

Wstęp do Techniki Cyfrowej... Teoria automatów

Wstęp do Techniki Cyfrowej... Teoria automatów Wstęp do Techniki Cyfrowej... Teoria automatów Alfabety i litery Układ logiczny opisywany jest przez wektory, których wartości reprezentowane są przez ciągi kombinacji zerojedynkowych. Zwiększenie stopnia

Bardziej szczegółowo

Algorytmiczna teoria grafów

Algorytmiczna teoria grafów Przedmiot fakultatywny 20h wykładu + 20h ćwiczeń 21 lutego 2014 Zasady zaliczenia 1 ćwiczenia (ocena): kolokwium, zadania programistyczne (implementacje algorytmów), praca na ćwiczeniach. 2 Wykład (egzamin)

Bardziej szczegółowo

Weryfikacja hipotez statystycznych

Weryfikacja hipotez statystycznych Weryfikacja hipotez statystycznych Hipoteza Test statystyczny Poziom istotności Testy jednostronne i dwustronne Testowanie równości wariancji test F-Fishera Testowanie równości wartości średnich test t-studenta

Bardziej szczegółowo

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Modelowanie hierarchicznych struktur w relacyjnych bazach danych Modelowanie hierarchicznych struktur w relacyjnych bazach danych Wiktor Warmus (wiktorwarmus@gmail.com) Kamil Witecki (kamil@witecki.net.pl) 5 maja 2010 Motywacje Teoria relacyjnych baz danych Do czego

Bardziej szczegółowo

Teoria gier. wstęp. 2011-12-07 Teoria gier Zdzisław Dzedzej 1

Teoria gier. wstęp. 2011-12-07 Teoria gier Zdzisław Dzedzej 1 Teoria gier wstęp 2011-12-07 Teoria gier Zdzisław Dzedzej 1 Teoria gier zajmuje się logiczną analizą sytuacji, gdzie występują konflikty interesów, a także istnieje możliwość kooperacji. Zakładamy zwykle,

Bardziej szczegółowo

Narzędzia AI. Jakub Wróblewski jakubw@pjwstk.edu.pl Pokój 312. http://zajecia.jakubw.pl SZTUCZNA INTELIGENCJA (ARTIFICIAL INTELLIGENCE)

Narzędzia AI. Jakub Wróblewski jakubw@pjwstk.edu.pl Pokój 312. http://zajecia.jakubw.pl SZTUCZNA INTELIGENCJA (ARTIFICIAL INTELLIGENCE) Narzędzia AI Jakub Wróblewski jakubw@pjwstk.edu.pl Pokój 312 http://zajecia.jakubw.pl SZTUCZNA INTELIGENCJA (ARTIFICIAL INTELLIGENCE) Nauka o maszynach realizujących zadania, które wymagają inteligencji

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

III. ZMIENNE LOSOWE JEDNOWYMIAROWE

III. ZMIENNE LOSOWE JEDNOWYMIAROWE III. ZMIENNE LOSOWE JEDNOWYMIAROWE.. Zmienna losowa i pojęcie rozkładu prawdopodobieństwa W dotychczas rozpatrywanych przykładach każdemu zdarzeniu była przyporządkowana odpowiednia wartość liczbowa. Ta

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Algorytmy i struktury danych Laboratorium Drzewa poszukiwań binarnych 1 Cel ćwiczenia Ćwiczenie ma na celu zapoznanie studentów

Bardziej szczegółowo

Metody Programowania

Metody Programowania POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Metody Programowania www.pk.edu.pl/~zk/mp_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 8: Wyszukiwanie

Bardziej szczegółowo

Sztuczna Inteligencja i Systemy Doradcze

Sztuczna Inteligencja i Systemy Doradcze Sztuczna Inteligencja i Systemy Doradcze Przeszukiwanie przestrzeni stanów gry Przeszukiwanie przestrzeni stanów gry 1 Gry a problemy przeszukiwania Nieprzewidywalny przeciwnik rozwiązanie jest strategią

Bardziej szczegółowo

5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH

5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH 5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH Temat, którym mamy się tu zająć, jest nudny i żmudny będziemy się uczyć techniki obliczania wartości logicznej zdań dowolnie złożonych. Po co? możecie zapytać.

Bardziej szczegółowo

Adam Meissner. SZTUCZNA INTELIGENCJA Gry dwuosobowe

Adam Meissner. SZTUCZNA INTELIGENCJA Gry dwuosobowe Instytut Automatyki i Inżynierii Informatycznej Politechniki Poznańskiej Adam Meissner Adam.Meissner@put.poznan.pl http://www.man.poznan.pl/~ameis SZTUCZNA INTELIGENCJA Gry dwuosobowe Literatura [1] Sterling

Bardziej szczegółowo

Wykład 4: Wnioskowanie statystyczne. Podstawowe informacje oraz implementacja przykładowego testu w programie STATISTICA

Wykład 4: Wnioskowanie statystyczne. Podstawowe informacje oraz implementacja przykładowego testu w programie STATISTICA Wykład 4: Wnioskowanie statystyczne Podstawowe informacje oraz implementacja przykładowego testu w programie STATISTICA Idea wnioskowania statystycznego Celem analizy statystycznej nie jest zwykle tylko

Bardziej szczegółowo

Jak oceniać, gdy nic nie wiemy?

Jak oceniać, gdy nic nie wiemy? Jak oceniać, gdy nic nie wiemy? Jasiek Marcinkowski II UWr 25 października 2012 Jasiek Marcinkowski (II UWr) Jak oceniać, gdy nic nie wiemy? 25 października 2012 1 / 10 Jak się gra w gry, o których dużo

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i struktury danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 5: Algorytmy

Bardziej szczegółowo

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych 1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie

Bardziej szczegółowo

Specyfikacja dodatkowa. Wersja <1.0>

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0> Wersja [Uwaga: Niniejszy wzór dostarczony jest w celu użytkowania z Unified Process for EDUcation. Tekst zawarty w nawiasach kwadratowych i napisany błękitną kursywą

Bardziej szczegółowo

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0, 2 Arytmetyka Niech b = d r d r 1 d 1 d 0 będzie zapisem liczby w systemie dwójkowym Zamiana zapisu liczby b na system dziesiętny odbywa się poprzez wykonanie dodawania d r 2 r + d r 1 2 r 1 d 1 2 1 + d

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Teoria gier. Wykład7,31III2010,str.1. Gry dzielimy

Teoria gier. Wykład7,31III2010,str.1. Gry dzielimy Wykład7,31III2010,str.1 Gry dzielimy Wykład7,31III2010,str.1 Gry dzielimy ze względu na: liczbę graczy: 1-osobowe, bez przeciwników(np. pasjanse, 15-tka, gra w życie, itp.), Wykład7,31III2010,str.1 Gry

Bardziej szczegółowo

Zasady gry. Zawartosc pudełka. Przygotowanie do gry

Zasady gry. Zawartosc pudełka. Przygotowanie do gry Zasady gry Cel gry Po przegranym wyścigu zając zażądał rewanżu, a żółw przyjął wyzwanie. Wieść o zbliżającym się wyścigu rozeszła się po całej krainie. Na starcie zebrali się wszyscy uczestnicy: zając,

Bardziej szczegółowo

Teoria gier. Teoria gier. Odróżniać losowość od wiedzy graczy o stanie!

Teoria gier. Teoria gier. Odróżniać losowość od wiedzy graczy o stanie! Gry dzielimy ze względu na: liczbę graczy: 1-osobowe, bez przeciwników(np. pasjanse, 15-tka, gra w życie, itp.), 2-osobowe(np. szachy, warcaby, go, itp.), wieloosobowe(np. brydż, giełda, itp.); wygraną/przegraną:

Bardziej szczegółowo

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski : idea Indeksowanie: Drzewo decyzyjne, przeszukiwania binarnego: F = {5, 7, 10, 12, 13, 15, 17, 30, 34, 35, 37, 40, 45, 50, 60} 30 12 40 7 15 35 50 Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski

Bardziej szczegółowo

ZAGADNIENIA PROGRAMOWANIA LINIOWEGO

ZAGADNIENIA PROGRAMOWANIA LINIOWEGO ZAGADNIENIA PROGRAMOWANIA LINIOWEGO Maciej Patan Uniwersytet Zielonogórski WSTĘP często spotykane w życiu codziennym wybór asortymentu produkcji jakie wyroby i w jakich ilościach powinno produkować przedsiębiorstwo

Bardziej szczegółowo

Algorytm. Krótka historia algorytmów

Algorytm. Krótka historia algorytmów Algorytm znaczenie cybernetyczne Jest to dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie zbliżonych do siebie klas problemów. znaczenie matematyczne

Bardziej szczegółowo

Wprowadzenie do złożoności obliczeniowej

Wprowadzenie do złożoności obliczeniowej problemów Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów

Bardziej szczegółowo

16MB - 2GB 2MB - 128MB

16MB - 2GB 2MB - 128MB FAT Wprowadzenie Historia FAT jest jednym z najstarszych spośród obecnie jeszcze używanych systemów plików. Pierwsza wersja (FAT12) powstała w 1980 roku. Wraz z wzrostem rozmiaru dysków i nowymi wymaganiami

Bardziej szczegółowo

Podstawy Sztucznej Inteligencji (PSZT)

Podstawy Sztucznej Inteligencji (PSZT) Podstawy Sztucznej Inteligencji (PSZT) Paweł Wawrzyński Przeszukiwanie Przeszukiwanie przestrzeni stanów Motywacja Rozwiązywanie problemów: poszukiwanie sekwencji operacji prowadzącej do celu poszukiwanie

Bardziej szczegółowo

Metody Optymalizacji: Przeszukiwanie z listą tabu

Metody Optymalizacji: Przeszukiwanie z listą tabu Metody Optymalizacji: Przeszukiwanie z listą tabu Wojciech Kotłowski Instytut Informatyki Politechniki Poznańskiej email: imię.nazwisko@cs.put.poznan.pl pok. 2 (CW) tel. (61)665-2936 konsultacje: wtorek

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F KODY SYMBOLI Kod Shannona-Fano KODOWANIE DANYCH, A.Przelaskowski Metoda S-F Kod Huffmana Adaptacyjne drzewo Huffmana Problemy implementacji Kod Golomba Podsumowanie Kod drzewa binarnego Na wejściu rozkład:

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

TEORIA GIER W EKONOMII WYKŁAD 2: GRY DWUOSOBOWE O SUMIE ZEROWEJ. dr Robert Kowalczyk Katedra Analizy Nieliniowej Wydział Matematyki i Informatyki UŁ

TEORIA GIER W EKONOMII WYKŁAD 2: GRY DWUOSOBOWE O SUMIE ZEROWEJ. dr Robert Kowalczyk Katedra Analizy Nieliniowej Wydział Matematyki i Informatyki UŁ TEORIA GIER W EKONOMII WYKŁAD 2: GRY DWUOSOBOWE O SUMIE ZEROWEJ dr Robert Kowalczyk Katedra Analizy Nieliniowej Wydział Matematyki i Informatyki UŁ Definicja gry o sumie zerowej Powiemy, że jest grą o

Bardziej szczegółowo

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania 2/32 Cel analizy Celem fazy określania wymagań jest udzielenie odpowiedzi na pytanie:

Bardziej szczegółowo

2012-01-16 PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

2012-01-16 PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew 0-0-6 PLAN WYKŁADU Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew BAZY DANYCH Wykład 9 dr inż. Agnieszka Bołtuć INDEKSY - DEFINICJE Indeksy to pomocnicze struktury

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykłady 12 i 13. Dowód i dowodzenie w KRP. Tezy KRP

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykłady 12 i 13. Dowód i dowodzenie w KRP. Tezy KRP Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykłady 12 i 13. Dowód i dowodzenie w KRP. Tezy KRP 1 Pojęcie dowodu w KRP Pojęcia: formuły zdaniowej języka Klasycznego Rachunku

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36 Bazy danych wykład dwunasty Wykonywanie i optymalizacja zapytań SQL Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36 Model kosztów

Bardziej szczegółowo

MODELOWANIE RZECZYWISTOŚCI

MODELOWANIE RZECZYWISTOŚCI MODELOWANIE RZECZYWISTOŚCI Daniel Wójcik Instytut Biologii Doświadczalnej PAN Szkoła Wyższa Psychologii Społecznej d.wojcik@nencki.gov.pl dwojcik@swps.edu.pl tel. 022 5892 424 http://www.neuroinf.pl/members/danek/swps/

Bardziej szczegółowo

QUERY język zapytań do tworzenia raportów w AS/400

QUERY język zapytań do tworzenia raportów w AS/400 QUERY język zapytań do tworzenia raportów w AS/400 Dariusz Bober Katedra Informatyki Politechniki Lubelskiej Streszczenie: W artykule przedstawiony został język QUERY, standardowe narzędzie pracy administratora

Bardziej szczegółowo

Metoda podziału i ograniczeń

Metoda podziału i ograniczeń Seminarium: Algorytmy heurystyczne Metoda podziału i ograniczeń Mateusz Łyczek Wrocław, 16 marca 011 r. 1 Metoda podziału i ograniczeń Metoda podziału i ograniczeń służy do rozwiązywania problemów optymalizacyjnych.

Bardziej szczegółowo

Odwrotna analiza wartości brzegowych przy zaokrąglaniu wartości

Odwrotna analiza wartości brzegowych przy zaokrąglaniu wartości Odwrotna analiza wartości brzegowych przy zaokrąglaniu wartości W systemach informatycznych istnieje duże prawdopodobieństwo, że oprogramowanie będzie się błędnie zachowywać dla wartości na krawędziach

Bardziej szczegółowo

MATeMAtyka 3. Propozycja przedmiotowego systemu oceniania wraz z określeniem wymagań edukacyjnych. Zakres podstawowy i rozszerzony

MATeMAtyka 3. Propozycja przedmiotowego systemu oceniania wraz z określeniem wymagań edukacyjnych. Zakres podstawowy i rozszerzony Agnieszka Kamińska, Dorota Ponczek MATeMAtyka 3 Propozycja przedmiotowego systemu oceniania wraz z określeniem wymagań edukacyjnych Zakres podstawowy i rozszerzony Wyróżnione zostały następujące wymagania

Bardziej szczegółowo

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA DRZEWA i LASY Drzewem nazywamy graf spójny nie zawierający cykli elementarnych. Lasem nazywamy graf nie zawierający cykli elementarnych. Przykłady drzew i lasów takie krawędzie są wykluczone drzewo las

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 006 Wydajność systemu 2 SO i SK/WIN Najprostszym sposobem na poprawienie wydajności systemu, jeżeli dysponujemy zbyt małą ilością pamięci RAM

Bardziej szczegółowo

LEKCJA 4. Gry dynamiczne z pełną (kompletną) i doskonałą informacją. Grą dynamiczną jest każda gra w której gracze wykonują ruchy w pewnej kolejności.

LEKCJA 4. Gry dynamiczne z pełną (kompletną) i doskonałą informacją. Grą dynamiczną jest każda gra w której gracze wykonują ruchy w pewnej kolejności. LEKCJA 4 Gry dynamiczne z pełną (kompletną) i doskonałą informacją Grą dynamiczną jest każda gra w której gracze wykonują ruchy w pewnej kolejności. Czy w dowolnej grze dynamicznej lepiej być graczem,

Bardziej szczegółowo

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD Dr inż. Jacek WARCHULSKI Dr inż. Marcin WARCHULSKI Mgr inż. Witold BUŻANTOWICZ Wojskowa Akademia Techniczna SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD Streszczenie: W referacie przedstawiono możliwości

Bardziej szczegółowo

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Oficjalna strona wykładu http://www.kaims.pl/

Bardziej szczegółowo

8. Neuron z ciągłą funkcją aktywacji.

8. Neuron z ciągłą funkcją aktywacji. 8. Neuron z ciągłą funkcją aktywacji. W tym ćwiczeniu zapoznamy się z modelem sztucznego neuronu oraz przykładem jego wykorzystania do rozwiązywanie prostego zadania klasyfikacji. Neuron biologiczny i

Bardziej szczegółowo

Obliczanie procentu danej liczby i liczby na podstawie jej. procentu jako umiejętności kluczowe w pracy doradcy. inwestycyjnego.

Obliczanie procentu danej liczby i liczby na podstawie jej. procentu jako umiejętności kluczowe w pracy doradcy. inwestycyjnego. 1 Obliczanie procentu danej liczby i liczby na podstawie jej procentu jako umiejętności kluczowe w pracy doradcy inwestycyjnego. Czas trwania zajęć: ok. 40 minut Kontekst w jakim wprowadzono doświadczenie:

Bardziej szczegółowo

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 5.0

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 5.0 ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 5.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu ECDL/ICDL Użytkowanie baz danych. Sylabus opisuje zakres wiedzy

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Polcode Code Contest PHP-10.09

Polcode Code Contest PHP-10.09 Polcode Code Contest PHP-10.09 Przedmiotem konkursu jest napisanie w języku PHP programu, którego wykonanie spowoduje rozwiązanie zadanego problemu i wyświetlenie rezultatu. Zadanie konkursowe Celem zadania

Bardziej szczegółowo

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH PROPORCJONALNOŚĆ PROSTA Proporcjonalnością prostą nazywamy zależność między dwoma wielkościami zmiennymi x i y, określoną wzorem: y = a x Gdzie a jest

Bardziej szczegółowo

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych 1 Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych 1. Podstawowe operacje logiczne dla cyfr binarnych Jeśli cyfry 0 i 1 potraktujemy tak, jak wartości logiczne fałsz i prawda, to działanie

Bardziej szczegółowo