Informatyka Systemów Autonomicznych
Transkrypt
Informatyka Systemów Autonomicznych
Grzegorz Bartoszek 148326 Informatyka Systemów Autonomicznych „Systemy informatyczne działające w świecie statycznym, quasi-statycznym i dynamicznym” Prowadzący: dr inż. Marek Piasecki 1.Wstęp Systemy komputerowe odgrywają bardzo dużą rolę w wielu dziedzinach we współczesnym świecie. Co raz większa liczba czynności jest automatyzowana lub też wspomagana przez komputery. W zależności od funkcji danego programu lub systemu komputerowego różne jest jego otoczenie. Poprzez pojęcie otoczenia lub środowiska rozumiemy dane jakie docierają do danego systemu, i na które musi on reagować, lub na podstawie których musi on uzyskać określony wynik swojej pracy. Rodzaj otoczenia decyduje też o tym jaki wpływ może mieć na nie program komputerowy. Środowisko w jakim działa system informatyczny w istotny sposób wpływa na wymagania stawiane wobec tego systemu oraz na sposób jego tworzenia. Środowisko statyczne Można wyróżnić kilka sposobów klasyfikacji środowisk, w których działają programy komputerowe. Środowisko statyczne to takie, w którym jedyne zmiany zachodzą na skutek działań wykonanych przez nasz program. Nie ma żadnych ingerencji z zewnątrz. Środowisko takie często może być także deterministyczne, tzn. znając jego stan w danej chwili można określić jego stany w przyszłości. Środowisko takie gwarantuje stuprocentową pewność co do przetwarzanych informacji. Środowisko dynamiczne Przeciwieństwem środowiska statycznego jest środowisko dynamiczne. Niezależnie od działania danego systemu informatycznego zachodzą w nim nieustanne zmienny. Wobec takiego świata możemy użyć określenie „niedeterministyczny” - nie możemy przewidzieć stanu w jakim znajdzie się świat w przyszłości na podstawie bieżących obserwacji. Środowisko takie generuje niepewność pozyskiwanych z niego informacji. System informatyczny działający w takim otoczeniu musi być na te niepewności przygotowany. Środowisko quasi-statyczne Wymienione wyżej przypadki to przypadki skrajne. W rzeczywistości można zdefiniować również środowiska pośrednie, które łączą w sobie cechy świata statycznego i dynamicznego. W środowisku quasi-statycznym zmiany zachodzące niezależnie od działającego w nim systemu są niewielkie lub też bardzo powolne. Dzięki temu z pozoru statyczny świat może generować niepewność co do uzyskanych na jego temat danych. Z drugiej strony świat dynamiczny w pewnych okolicznościach może być rozpatrywany jako świat statyczny. 2.Wybrane przykłady systemów komputerowych działających w różnych rodzajach środowisk Systemy bazodanowe Dobrym przykładem programu działającego w świecie statycznym są wszelkiego rodzaju aplikacje bazodanowe: programy 'magazynowe', kartoteki, programy biblioteczne, programy bankowe. Twórca takiego programu już na etapie projektowania aplikacji ma dostęp do wszelkich niezbędnych mu informacji: • • • Dane, na których będzie operował dany program są precyzyjnie określone. Znane są oczekiwania co do efektów działania danego programu. Znane są ograniczenia czasowe i wydajnościowe. Dzięki wyżej wymienionym łatwo jest zaprojektować odpowiednie algorytmy przetwarzające dane. Z poprawność informacji wprowadzanych do takiego systemu odpowiadają z reguły jego użytkownicy (dane te mogą być dodatkowo weryfikowane) przez co z perspektywy systemu można je uznać za pewne. Systemy tego typu mają też dosyć często dosyć ograniczoną funkcjonalność, skupioną wokół konkretnego zastosowania danej aplikacji. Działanie tego typu programów jest w pełni deterministyczne – mamy do dyspozycji konkretną liczbę operacji nad konkretnym zbiorem danych, a operacje te wykonują się w sposób pewny i możemy przewidzieć ich efekt. Szachy Szczególnym „podgatunkiem” programów komputerowych, które w wyrazisty sposób obrazują zagadnienie dynamiki otoczenia są wszelkiego rodzaju gry komputerowe oraz zaimplementowana w nich sztuczna inteligencja. Klasycznym przykładem są szachy – gra w pełni deterministyczna, w której gracz dysponuje pełną informacją na temat aktualnej sytuacji w grze. W przypadku tej gry możemy mówić o quasi-statyczności świata gry, ponieważ mimo wyżej wymienionych faktów, zachodzą w nim zmiany zależne nie tylko od gracza ale także od jego przeciwnika. Z drugiej strony na pewno nie można środowiska, w którym toczy się mecz szachowy nazwać dynamicznym. Historia pojedynków szachowych pomiędzy człowiekiem a komputerem jest bardzo długa: • • • • • Charles Babbage rozważał możliwość nauczenia swojej niedokończonej maszyny „Analitical Engine” gry w szachy (1846 r.) Teoretyczna podstawa pod szachową „sztuczną inteligencję”, algorytm min-max, pojawiła się w latach 40 XX w. 1958 r. - pierwszy program grający w szachy. W 1983 r. pierwszy program komputerowy osiągnął poziom mistrza szachowego. 1997 r. Deep Blue wygrywa z Garym Kasparovem Podstawa programów grających w szachy jest algorytm min-max, którego idea opiera się na maksymalizowaniu zysków i minimalizowaniu strat. W przypadku szachów algorytm min-max używany jest podczas analizowania możliwych posunięć. W najprostszym przypadku tworzone jest drzewo możliwych ruchów, które następnie są oceniane i wybierany jest najlepszy. Ponieważ w chwili obecnej nie istnieje komputer który byłby w stanie przeanalizować wszystkie możliwe ruchy w relatywnie krótkim czasie, istnieją różne bardzo zaawansowane techniki pozwalające ograniczać drzewo przeszukiwań oraz określać, które ruchy są korzystne, a które nie. Jednak świat, w którym toczy się pojedynek szachowy jest w gruncie rzeczy statyczny i deterministyczny, dlatego główna idea tworzenia programów szachowych jest stosunkowo prosta: należy jak największą moc obliczeniową skupić na tym aby przeanalizować więcej możliwych posunięć niż przeciwnik. Poker Kolejnym o wiele ciekawszym i nieco młodszym przykładem gry jest bijąca w ostatnich latach rekordy popularności odmiana pokera „Texas Hold'em”. Ta pochodząca ze Stanów Zjednoczonych gra karciana zdobyła ogromną popularność na całym świecie między innymi za sprawą wielu serwisów internetowych umożliwiających grę online. Fakt, że można grać w pokera przez internet w sposób niemal anonimowy, kusi aby spróbować stworzyć program komputerowy grający w pokera (tzw. poker-bot), który automatycznie generowałby zyski (oczywiście jest to niedozwolone i nielegalne). Popularne stają się także zwykłe gry komputerowe poruszające tą tematykę. O tym, że temat pokerowej sztucznej inteligencji jest ciekawy, świadczy również to, że na amerykańskim University of Alberta istnieje specjalny zespół naukowców zajmujący się tym zagadnieniem. Organizowane są również turnieje w których rywalizują ze sobą pokerowe programy komputerowe. W „Texas Hold'em” każdy z graczy dostaje dwie karty, oprócz których na stół wykładane jest jeszcze pięć kart wspólnych dla wszystkich graczy (wszyscy je widzą). W międzyczasie odbywają się trzy rundy licytacji. Na końcu każdy gracz ma do dyspozycji dwie swoje karty i pięć wspólnych dla wszystkich. Spośród tych siedmiu kart wybiera najlepszy możliwy pięciokartowy układ, i w przypadku gdy jest on lepszy niż układy przeciwników – wygrywa pule. Szczegółowe zasady znaleźć można w internecie – są one stosunkowo proste. Natomiast jeśli chodzi o dynamikę świata gry sytuacja jest trochę bardziej skomplikowana niż to miało miejsce w przypadku szachów. W dalszym ciągu nie mamy tu do czynienia z w pełni dynamicznym światem gry, jednak posiadane przez nas informacje są niepewne a gra jest niedeterministyczna. Poker jest to tzw. gra z niepełną informacją: • • • • • • • • • Część kart jest wspólna dla wszystkich graczy W każdej chwili możemy stwierdzić jaki jest najwyższy możliwy układ Wiemy jaki my mamy układ Znamy ilość kart w talii Możemy obliczyć prawdopodobieństwo, że kolejna wyłożona karta da nam wygraną. Znamy też ilość przeciwników i ilość posiadanych przez nich żetonów. Działania wykonywane przez graczy są jawne. Nie znamy tylko kart posiadanych przez przeciwników. Specyfika gry wymaga aby na wszelkie sposoby starać się wprowadzić przeciwnika w błąd. Tak więc wiedza gracza na temat świata gry jest połowiczna. Wszystkie te czynniki (i wiele innych) należy brać pod uwagę przy projektowaniu pokerowej sztucznej inteligencji. Program pokerowy powinien radzić sobie z następującymi zagadnieniami: • • • • • Prawdopodobieństwo Ocena ryzyka „Zwodzenie przeciwników” Gromadzenie informacji o przeciwnikach (opponent modelling) Różne rodzaje strategii Pewne podstawowe wartości pomagające podjąć decyzje mogą zostać po prostu wyliczone. Jednak gra oparta jedynie na rachunku prawdopodobieństwa staje się przewidywalna. Dodatkowo program pokerowy powinien gromadzić informacje dotyczące przeciwników tak aby można było przewidzieć ich zagrania na podstawie ich dotychczasowej gry. Program „Poki” Stworzony przez pracowników Uniwersytetu Alberta jest jednym z najlepszych (najlepszym?) programów grających w pokera. Wykorzystuje on bardzo zaawansowane algorytmy uczące, np. statystyczną analizę zachowań graczy czy też sieci neuronowe. Podobnie jak w przypadku szachów odbywały się pojedynki zawodowych pokerzystów i wspomnianego programu. Póki co zakończone remisem. Gry komputerowe czasu rzeczywistego Najpowszechniejszą gałąź przemysłu elektronicznej rozrywki stanowią gry komputerowe, których akcja rozgrywa się w czasie rzeczywistym. Mogą to być np. wszelkiego rodzaju trójwymiarowe strzelaniny czy też strategie czasu rzeczywistego. W tego typu grach mamy do czynienie z w pełni dynamicznym światem, w którym odbywa się rozgrywka. W każdej chwili w środowisku gry znajduje się wiele jednostek/postaci realizujących zadania wynikających ze specyfiki gry. Komputerowy przeciwnik musi w każdej chwili reagować na działania jego ludzkich lub komputerowych oponentów. Zmiany te są niedeterministyczne, nie można ich przewidzieć. Zagadnienie sztucznej inteligencji we współczesnych grach jest bardzo skomplikowane. Istniej szeroka gama różnego rodzaju algorytmów mających zastosowanie w tej dziedzinie. Podstawowe mechanizmy to: • • • Automaty stanów Systemy wieloagentowe Algorytmy grafowe Jednym z przykładowych algorytmów mających zastosowanie w grach jest algorytm stadny. Jego działanie dotyczy grupy agentów działających w świecie gry. Algorytm stadny po raz pierwszy został przedstawiony w 1987 r. roku przez Craiga Reynoldsa. Reynolds zaproponował w swoim artykule trzy zasady, które po połączeniu umożliwiały grupie agentów realistyczne zbiorowe zachowanie przypominające zachowania ławicy ryb, roju pszczół albo stada ptaków. Te trzy zasady Reynolds nazwał sterowaniem zachowaniem, a są nimi: • • • rozdzielczość – sterowanie zapobiegające tworzeniu tłumu w jednym miejscu, które polega na tym, że agenci muszą zachowywać pewną odległość od siebie, wyrównywanie – sterowanie dające możliwość agentowi zmiany kierunki prędkości swego przemieszczania, dzięki czemu agent może dostosowywać te parametry do innych agentów przebywających w jego pobliżu,spójność – sterowanie odpowiedzialne za zbieranie się agentów przebywających blisko siebie w lokalne grupy. Z czasem Reynolds dodał czwartą zasadę, którą określił mianem „unikania”. Jej zadaniem jest sterowanie zapobiegające zderzeniom agentów z przeszkodami. Między poszczególnymi cyklami (uaktualnieniami) – po których agenci za każdym razem sprawdzają środowisko, w jakim w danej chwili przebywają. Kolejnym powszechnym rozwiązaniem stosowanym w grach są automaty stanów skończonych. Już w grach z lat 90. technika ta była wykorzystywana do kontrolowania agentów, ale i w najnowszych produkcjach automaty stanów skończonych są używane do sterowania AI gry. Również w większości gier typu cRPG automaty skończone wykorzystuje się do sterowania dialogami gracza z agentami. Stanowią one także w wielu grach podstawę zarządzania światem, przechowują stan gry, przetwarzają polecenia od gracza lub zarządzają stanem obiektu. Automat stanów skończonych zbudowany jest z pewnej ściśle określonej liczby stanów znajdujących się w danej przestrzeni rozwiązań. Gdy pojawia się nowe zdarzenie, następuje przejście w inny stan. Prowadzi to do sytuacji pozwalającej podjąć jedno lub kilka różnych działań. Określenie najlepszej drogi poruszania z punktu A do B na mapie to problem pojawiający się w większości gier komputerowych. Na bazie techniki AI rozwiązującej to zagadnienie często tworzone są bardzo skomplikowane i złożone zachowania, takie jak planowanie strategiczne czy poruszanie się jednostek w formacjach. Sztandarowym rozwiązaniem dla tego problemu jest heurystyczny algorytm A*. Algorytm ten podczas określania trasy nie szuka drogi „na ślepo”, ale szacuje najlepszy kierunek eksploracji. Internet Sieć internet jest potężnym medium a także ogromnym dynamicznym środowiskiem, w którym działają setki tysięcy różnego rodzaju systemów informatycznych realizujących powierzone im zadania. Jednym z takich systemów jest największa (i prawdopodobnie najlepsza) wyszukiwarka Google. Aby możliwe było wyszukiwanie w internecie treści przy jej pomocy, musi ona posiadać informacja na temat stron internetowych. Treść tych stron i ich dostępność ulega nieustannym zmianom a ich ilość jest ogromna. Proces gromadzenia informacji na temat stron internetowych nazywany jest indeksowaniem. W przypadku Google zajmuje się tym program nazywany Googlebot. Program ten przegląda strony internetowe w ogromnym tempie (w praktyce wiele stron jednocześnie) i gromadzi informacje na temat ich zawartości. Algorytmy przeszukujące sieć internet muszą radzić sobie z wieloma problemami. Część tych problemów wynika z dynamiki środowiska, w którym pracują. Mogą to być np. nie działające linki. Kolejnym problemem są ludzie, którzy próbują oszukać mechanizmy wyszukujące w celu umieszczenia swoich stron na wysokich pozycjach list wyszukiwania. Google zawiera wiele mechanizmów mających na celu eliminowanie tego typu oszustw. 3.Podsumowanie Środowisko w jakim ma działać dany system informatyczny wywiera istotny wpływ na sposób jego tworzenia oraz jego ostateczny kształt. Twórca może mieć, w zależności od danego otoczenie, pełną lub częściową informację na temat danych przetwarzanych przez program. Musi brać pod uwagę wszystkie sytuacje, w które mogą wyniknąć, jednak nie zawsze da się je przewidzieć. W zależności od danego środowiska działanie programu może polegać na prostym przetworzeniu danych przy pomocy zaprojektowanego algorytmu lub też na reagowaniu na nieprzewidywalne zdarzenia, o których system ma niepełną i niepewną wiedzę 4.Literatura • • • • • • Materiały dydaktyczne: http://marek.piasecki.staff.iiar.pwr.wroc.pl/dydaktyka/ Wikipedia: www.wikipedia.pl Włodzisław Duch „Gry i programy oparte na szukaniu” Krzysztof Wardziński: „Przegląd algorytmów sztucznej inteligencji stosowanych w grach komputerowych” http://www.hc.amu.edu.pl/numery/5/wardzinski.pdf „The Challenge of Poker” http://poker.cs.ualberta.ca/papers/Papers/AIJ02.pdf „How Google Works”: http://www.googleguide.com/google_works.html