• Nebyly nalezeny žádné výsledky

VYSOK ´E U ˇCEN´I TECHNICK ´E V BRN ˇE BRNO UNIVERSITY OF TECHNOLOGY

N/A
N/A
Protected

Academic year: 2022

Podíl "VYSOK ´E U ˇCEN´I TECHNICK ´E V BRN ˇE BRNO UNIVERSITY OF TECHNOLOGY"

Copied!
43
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

VYSOK ´ E U ˇ CEN´I TECHNICK ´ E V BRN ˇ E

BRNO UNIVERSITY OF TECHNOLOGY

FAKULTA INFORMA ˇ CN´ICH TECHNOLOGI´I USTAV INTELIGENTN´ICH SYST ´ ´ EM ˚ U

FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS

ALGORITMY PRO UM ˇ ELOU INTELIGENCI

DIPLOMOV ´ A PR ´ ACE

MASTER’S THESIS

AUTOR PR ´ ACE JAN PETR ˇ ZELKA

AUTHOR

BRNO 2007

(2)

VYSOK ´ E U ˇ CEN´I TECHNICK ´ E V BRN ˇ E

BRNO UNIVERSITY OF TECHNOLOGY

FAKULTA INFORMA ˇ CN´ICH TECHNOLOGI´I USTAV INTELIGENTN´ICH SYST ´ ´ EM ˚ U

FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS

ALGORITMY PRO UM ˇ ELOU INTELIGENCI

AI ALGORITHMS

DIPLOMOV ´ A PR ´ ACE

MASTER’S THESIS

AUTOR PR ´ ACE JAN PETR ˇ ZELKA

AUTHOR

VEDOUC´I PR ´ ACE Ing. VLADIM´IR JANOU ˇ SEK, Ph.D.

SUPERVISOR

BRNO 2007

(3)

Abstrakt

Tato diplomov´a pr´ace se zab´yv´a algoritmy pouˇz´ıvan´ymi v oblasti umˇel´e inteligence, konkr´etnˇe se jedn´a o algoritmy popsan´e v knize Artificial Inteligence: A Modern Approach autor˚u Russela a Norviga a jejich implementaci v jazyce Squeak Smalltalk. Je kladen d˚uraz na objektovˇe orientovan´y pˇr´ıstup, kter´y vypl´yv´a z podstaty jazyka Smalltalk. Zdrojem jsou kromˇe popis˚u algoritm˚u v pseudok´odu pˇr´ımo v knize tak´e existuj´ıc´ı implementace v jazyc´ıch Lisp, Python a Java. Tato pr´ace se vˇenuje algoritm˚um pro pr´aci s inteligentn´ımi agenty a prostˇred´ımi pro simulaci tˇechto agent˚u, prohled´av´an´ı stavov´eho prostoru, hran´ı her, pl´anov´an´ı, logice, pravdˇepodobnosti a uˇcen´ı.

Kl´ıˇ cov´ a slova

umˇel´a inteligence, algoritmy, smalltalk, squeak, AIMA, prohled´av´an´ı, hled´an´ı, pl´anov´an´ı, hran´ı her, logika, uˇcen´ı, pravdˇepodobnost, neurˇcitost, agent, prostˇred´ı, OOP

Abstract

This master’s thesis describes artificial intelligence algorithms based on the book Artifi- cial Inteligence: A Modern Approach by S. Russel and P. Norvig and implementation of the algorithms in the Squeak Smalltalk programming language with object oriented ap- proach. Algorithms are based on pseudocode in the book and existing implementations in Lisp, Python and Java language. Main concepts are intelligent agents, agent simulation environments, state space search, game playing, planning, uncertainty and learning.

Keywords

artificial intelligence, algorithms, smalltalk, squeak, AIMA, search, planning, game playing, logic, learning, probability, uncertainty, agent, environment, OOP

Citace

Jan Petrˇzelka: Algoritmy pro umˇelou inteligenci, diplomov´a pr´ace, Brno, FIT VUT v Brnˇe, 2007

(4)

Algoritmy pro umˇ elou inteligenci Prohl´ aˇ sen´ı

Prohlaˇsuji, ˇze jsem tuto diplomovou pr´aci vypracoval samostatnˇe pod veden´ım

Ing. Vladim´ıra Janouˇska. Uvedl jsem vˇsechny liter´arn´ı prameny a publikace, ze kter´ych jsem ˇcerpal.

. . . . Jan Petrˇzelka 21. kvˇetna 2007

Podˇ ekov´ an´ı

R´ad bych na tomto m´ıstˇe podˇekoval panu Ing. Vladim´ıru Janouˇskovi za odbornou pomoc poskytnutou pˇri ˇreˇsen´ı probl´em˚u spojen´ych s touto prac´ı a pˇredevˇs´ım za sezn´amen´ı s tak v´yjmeˇcn´ym programovac´ım jazykem, jak´ym bezesporu Squeak Smalltalk je.

c

Jan Petrˇzelka, 2007.

Tato pr´ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe in- formaˇcn´ıch technologi´ı. Pr´ace je chr´anˇena autorsk´ym z´akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´avnˇen´ı autorem je nez´akonn´e, s v´yjimkou z´akonem definovan´ych pˇr´ıpad˚u.

(5)

Obsah

1 Uvod´ 4

2 Agenti a prostˇred´ı 6

2.1 Co je to umˇel´a inteligence? . . . 6

2.2 Inteligentn´ı agent . . . 6

2.3 Prostˇred´ı . . . 6

2.3.1 Prostˇred´ı plnˇe nebo ˇc´astˇeˇcnˇe pozorovateln´e . . . 7

2.3.2 Prostˇred´ı deterministick´e nebo stochastick´e . . . 7

2.3.3 Prostˇred´ı epizodick´e nebo sekvenˇcn´ı . . . 7

2.3.4 Prostˇred´ı statick´e nebo dynamick´e . . . 7

2.3.5 Prostˇred´ı diskr´etn´ı nebo spojit´e . . . 7

2.3.6 Prostˇred´ı s jedn´ım nebo v´ıce agenty . . . 8

2.4 Implementace agent˚u a jejich prostˇred´ı . . . 8

2.4.1 Tˇr´ıda Environment . . . 8

2.4.2 Tˇr´ıda GridEnvironment . . . 9

2.4.3 Tˇr´ıda VacuumWorld . . . 9

2.4.4 Tˇr´ıda WumpusWorld . . . 9

2.4.5 Tˇr´ıda Agent . . . 9

2.4.6 Tˇr´ıda AskUserAgent . . . 10

2.4.7 Tˇr´ıdy RandomVacuumAgent a RandomWumpusAgent . . . 10

2.4.8 Tˇr´ıdy ReactiveVacuumAgent a ReactiveWumpusAgent . . . 10

2.4.9 Tˇr´ıda Object . . . 10

2.4.10 Tˇr´ıda ObstacleObject . . . 10

2.4.11 Tˇr´ıda DeadlyObject . . . 10

2.4.12 Tˇr´ıda AgentBodyObject . . . 10

2.4.13 Tˇr´ıda ObjectSpec . . . 11

3 Reˇˇ sen´ı probl´em˚u 12 3.1 Reˇˇ s´ıc´ı agent . . . 12

3.2 Hled´an´ı ˇreˇsen´ı . . . 13

3.3 Neinformovan´e metody hled´an´ı . . . 13

3.3.1 Breadth-first search . . . 13

3.3.2 Uniform-cost search . . . 14

3.3.3 Depth-first search . . . 14

3.3.4 Iterative deepening depth-first search . . . 14

3.4 Informovan´e metody hled´an´ı . . . 14

3.4.1 Best-first search . . . 15

3.4.2 Greedy best-first search . . . 15

(6)

3.4.3 A* search . . . 15

3.5 Hran´ı her . . . 15

3.5.1 Minimax . . . 16

3.5.2 Alpha-beta pruning . . . 16

3.6 Implementace . . . 16

3.6.1 Tˇr´ıda Problem . . . 16

3.6.2 Tˇr´ıda Node . . . 17

3.6.3 Tˇr´ıda Game . . . 17

3.6.4 Tˇr´ıda GameState . . . 17

3.6.5 Prostˇred´ı . . . 17

3.7 Pˇr´ıklady . . . 18

3.7.1 Mision´aˇri a kanibalov´e . . . 18

3.7.2 Piˇskvorky . . . 18

3.7.3 D´ama . . . 18

4 Logika 19 4.1 Uvod do logiky . . . .´ 19

4.2 V´yrokov´a logika . . . 20

4.2.1 Jazyk v´yrokov´e logiky . . . 20

4.2.2 Odvozov´an´ı . . . 20

4.3 Predik´atov´a logika . . . 21

4.3.1 Jazyk predik´atov´e logiky . . . 21

4.3.2 Odvozov´an´ı v predik´atov´e logice . . . 21

4.4 Implementace . . . 22

4.4.1 Tˇr´ıdy a algoritmy v´yrokov´e logiky . . . 22

4.4.2 Tˇr´ıdy a algoritmy predik´atov´e logiky . . . 22

5 Pl´anov´an´ı 24 5.1 Jazyk pl´anovac´ıch probl´em˚u . . . 24

5.2 Reˇˇ sen´ı pl´anovac´ıch probl´em˚u . . . 25

5.3 Implementace . . . 25

5.3.1 Objekty . . . 25

5.3.2 Prostˇred´ı . . . 26

5.3.3 Agent . . . 26

6 Neurˇcitost a pravdˇepodobnost 27 6.1 Neurˇcit´e znalosti . . . 27

6.2 Bayesovsk´e s´ıtˇe . . . 28

6.3 Statistick´e metody . . . 29

6.4 Implementace . . . 29

6.4.1 Tˇr´ıda EnumerateJointAsk . . . 29

6.4.2 Tˇr´ıda BayesNetNode . . . 30

6.4.3 Tˇr´ıda BayesNet . . . 30

7 Uˇcen´ı 32 7.1 Princip uˇcen´ı . . . 32

7.2 Rozhodovac´ı stromy . . . 33

7.3 Dalˇs´ı metody uˇcen´ı . . . 34

7.4 Implementace . . . 35

(7)

7.4.1 Tˇr´ıda DataSet . . . 35

7.4.2 Tˇr´ıda DecisionTreeLearner . . . 35

7.4.3 Tˇr´ıda AdaBoostLearner . . . 35

7.4.4 Tˇr´ıda DecisionListLearner . . . 36

8 Z´avˇer 37

(8)

Kapitola 1

Uvod ´

Objektem z´ajmu t´eto pr´ace je kniha Artificial Inteligence: A Modern Approach (Second Edition) autor˚u Stuarta Russela a Petera Norviga [1]. Tato kniha je prim´arnˇe urˇcena jako uˇcebnice pro studium umˇel´e inteligence.

Jelikoˇz umˇel´a inteligence je velmi ˇsirok´y pojem, popisuje i tato kniha mnoho pohled˚u na tuto problematiku: logiku, pravdˇepodobnost, vn´ım´an´ı, logick´e myˇslen´ı, uˇcen´ı a mnoho jin´ych. Vˇsechny tyto oblasti spojuje jeden pojem – inteligentn´ı agent. Umˇel´a inteligence je zde definov´ana jako studium agent˚u, kteˇr´ı pˇrij´ımaj´ı vjemy z prostˇred´ı a na jejich z´akladˇe konaj´ı akce. Kaˇzd´y takov´y agent obsahuje funkci, kter´a pˇriˇrazuje ke vjemu posloupnost akc´ı, pˇriˇcemˇz existuje mnoho zp˚usob˚u jak tuto funkci reprezentovat. Pro lepˇs´ı n´azornost obsahuje kniha ˇradu algoritm˚u v pseudok´odu, kter´e pˇredstavuj´ı ˇreˇsen´ı vybran´ych probl´em˚u z t´eto oblasti. Aby bylo moˇzn´e pouˇz´ıt tyto algoritmy v praxi, existuj´ı v souˇcasn´e dobˇe jejich implementace ve tˇrech jazyc´ıch, v Lispu, Pythonu a Javˇe.

C´ılem t´eto pr´ace je vytvoˇrit podobnou implementaci v jazyce Squeak Smalltalk a popsat tyto algoritmy jak po teoretick´e str´ance, tak i po str´ance implementaˇcn´ı. Smalltalk, jakoˇzto ˇ

cistˇe objektovˇe orientovan´y jazyk, poskytuje, d´ıky zapouzdˇren´ı, vysokou ´uroveˇn abstrakce a to pˇrisp´ıv´a k pˇrehlednosti v´ysledn´eho k´odu. Ten m´a b´yt urˇcen pˇredevˇs´ım pro v´yukov´e

´

uˇcely, kde pˇrehlednost a ˇcistota k´odu je jedn´ım ze stˇeˇzejn´ıch faktor˚u. Squeak je open source prostˇred´ı zaloˇzen´e na Smalltalku-80, kter´e se sv´ym grafick´ym uˇzivatelsk´ym rozhran´ım Mor- phic je vhodn´e pro v´yuku, nav´ıc pro tento jazyk zat´ım neexistuje ˇz´adn´a v´yznamn´a knihovna algoritm˚u pro umˇelou inteligenci.

Pro porozumnˇen´ı k´odu se pˇredpokl´adaj´ı z´akladn´ı znalosti v oblasti informatiky (algo- ritmy, datov´e struktury) a jazyka Smalltalk (napˇr. seri´al Pavla Kˇriv´anka na serveru root.cz [2] je dobr´ym ´uvodem do tohoto jazyka).

Tato pr´ace navazuje na m˚uj roˇcn´ıkov´y projekt, ve kter´em jsem zaˇcal s implementac´ı d´ale popsan´ych algoritm˚u, konkr´etnˇe z kapitol 2, 3 a 5, a v r´amci semestr´aln´ıho projektu jsem pˇridal k´od ze zb´yvaj´ıc´ıch kapitol. Souhrn implementovan´eho k´odu pro Smalltalk a jeho um´ıstˇen´ı v knize je seps´an v pˇr´ıloze A.

N´asleduj´ıc´ı kapitoly obsahuj´ı vˇzdy teoretick´y popis dan´e oblasti umˇel´e inteligence a principy ˇreˇsen´ı probl´em˚u s nimi spojen´ych, slouˇz´ıc´ı jako ´uvod do problematiky a pro lepˇs´ı porozumˇen´ı vytvoˇren´eho k´odu, a d´ale konkr´etn´ı popis implementace vytvoˇren´ych tˇr´ıd a metod ve Squeaku.

(9)

Kapitola 2 seznamuje se stˇeˇzejn´ı ˇc´ast´ı k´odu, inteligentn´ımi agenty

Kapitola 3 popisuje ˇreˇsen´ı probl´em˚u a algoritmy pro hled´an´ı ve stavov´em prostoru Kapitola 4 pˇredstavuje z´aklady v´yrokov´e a predik´atov´e logiky

Kapitola 5 se zab´yv´a pl´anov´an´ım

Kapitola 6 vysvˇetluje prinicipy neurˇcitosti a pravdˇepodobnosti pˇri ˇreˇsen´ı probl´em˚u Kapitola 7 je zamˇeˇrena na uˇcen´ı

Kapitola 8 shrnuje a vyhodnocuje dosaˇzen´e v´ysledky

(10)

Kapitola 2

Agenti a prostˇ red´ı

2.1 Co je to umˇ el´ a inteligence?

Existuje nˇekolik definic toho pojmu, kter´e se odliˇsuj´ı pˇredevˇs´ım pohledem na toto t´ema.

Prvn´ı pohled rozliˇsuje zda jsou pˇredmˇetem z´ajmu myˇslenkov´e procesy a uvaˇzov´an´ı nebo naopak zda jde pˇredevˇs´ım o chov´an´ı subjektu. Z druh´e strany lze posuzovat m´ıru lidskosti ˇ

ci naopak m´ıru inteligence. Syst´em je inteligentn´ı, pokud za dan´ych okolnost´ı udˇel´a

”tu spr´avnou vˇec“.

V´yˇse zm´ınˇen´a kniha se vˇenuje pˇr´ıstupu inteligentn´ıho chov´an´ı, protoˇze inteligentn´ı pˇr´ıstup je v´ıce obecn´y a pˇredevˇs´ım v´ıce vˇedeck´y neˇz pˇr´ıstup odv´ıjej´ıc´ı se z myˇslenkov´ych pochod˚u ˇci lidsk´eho chov´an´ı.

2.2 Inteligentn´ı agent

Jak jiˇz bylo zm´ınˇeno v ´uvodu, agent je entita, kter´a pˇrij´ım´a vjemy ze sv´eho prostˇred´ı pomoc´ı senzor˚u a prov´ad´ı akce v tomto prostˇred´ı. Matematicky vzato je chov´an´ı kaˇzd´eho agenta pops´ano funkc´ı, kter´a kaˇzd´emu vjemu pˇriˇrad´ı nˇejakou akci.

Inteligentn´ı agent je nov´y pojem specifikuj´ıc´ı subjekt, kter´y se chov´a tak, aby dos´ahl nejlepˇs´ıho v´ysledku. Abychom mohli urˇcit, kter´y v´ysledek je ten nejlepˇs´ı, mus´ıme ohodnotit jeho ˇcinnost. Ohodnocen´ı je vˇzdy z´avisl´e na dan´e situaci, nicm´enˇe z´akladn´ı pravidlo je, ˇze by mˇelo b´yt urˇceno podle toho, ˇceho chceme v prostˇred´ı dos´ahnout, a ne podle toho, jak si mysl´ıme, ˇze by se agent mˇel chovat. Jako pˇr´ıklad je moˇzno uv´est prostˇred´ı z knihy AIMA VacuumWorld, kde agent-vysavaˇc ukl´ız´ı smet´ı na podlaze. Pokud by tento agent byl ohodnocen za kaˇzd´e uklizen´ı nˇejak´eho mnoˇzstv´ı smet´ı, nejlepˇs´ı sk´ore by z´ıskal tak, ˇze vˇse uklid´ı, vysype zpˇet na podlahu a ukl´ız´ı znovu. Mnohem lepˇs´ı zp˚usob ohodnocen´ı by tedy byl za ˇcistou podlahu.

Inteligentn´ı agent by mˇel pro kaˇzdou posloupnost vjem˚u zvolit takovou akci, kter´a podle pˇredpokladu maximalizuje jeho ohodnocen´ı v souladu s tˇemito vjemy a jak´ymikoli dalˇs´ımi znalostmi, kter´e agent m´a.

2.3 Prostˇ red´ı

Nejprve bychom mˇeli definovat pojemprostˇred´ı ´ulohy. To bychom mohli nazvat

”probl´emem“, ke kter´emu je inteligentn´ı agent

”ˇreˇsen´ım“. Prostˇred´ı ´ulohy je mnoˇzina skl´adaj´ıc´ı se z ohod- nocen´ı, prostˇred´ı, agentov´ych senzor˚u a jeho zaˇr´ızen´ı konaj´ıc´ıch akce. V n´avrhu agenta je

(11)

nutn´e jako prvn´ı krok specifikovat prostˇred´ı ´ulohy co nejpˇresnˇeji.

Protoˇze v oblasti umˇel´e inteligence je mnoho r˚uzn´ych moˇznost´ı specifikace prostˇred´ı

´

ulohy, je vhodn´e jej klasifikovat podle nˇekolika faktor˚u. To n´am umoˇzn´ı pˇresnˇejˇs´ı a jednoduˇsˇs´ı n´avrh agenta.

2.3.1 Prostˇred´ı plnˇe nebo ˇc´astˇeˇcnˇe pozorovateln´e

Plnˇe pozorovateln´e prostˇred´ı je takov´e, kdy senzory agenta maj´ı pˇr´ıstup k ´upln´emu stavu prostˇred´ı v kaˇzd´em okamˇziku. Takov´e prostˇred´ı je v´yhodn´e, protoˇze agent nepotˇrebuje internˇe udrˇzovat informace o aktu´aln´ım stavu okol´ı. Prostˇred´ı m˚uˇze b´yt ˇc´asteˇcnˇe po- zorovateln´e napˇr´ıklad protoˇze nˇekter´e ´udaje senzory neposkytuj´ı, jako v pˇr´ıpadˇe Vacu- umWorld, kdy agent-vysavaˇc m´a informaci o smet´ı pouze na m´ıstˇe, kde se pr´avˇe vyskytuje, a nev´ı, jestli je smet´ı i jinde.

2.3.2 Prostˇred´ı deterministick´e nebo stochastick´e

Pokud n´asleduj´ıc´ı stav prostˇred´ı je pˇresnˇe urˇcen stavem souˇcasn´ym a akc´ı konanou agen- tem, je toto prostˇred´ı deterministick´e, v opaˇcn´em pˇr´ıpadˇe stochastick´e. V podstatˇe by- chom mohli ˇr´ıct, ˇze agent se v deterministick´em a plnˇe pozorovateln´em prostˇred´ı nemus´ı zab´yvat pravdˇepodobnost´ı. Pokud je prostˇred´ı pozorovateln´e ˇc´asteˇcnˇe, m˚uˇze se jevit jako stochastick´e, zejm´ena pokud je sloˇzit´e a nen´ı moˇzn´e uchovat informace o nepozorovan´ych objektech. Proto je lepˇs´ı o tomto rozdˇelen´ı pˇrem´yˇslet z pohledu agenta. Pokud je prostˇred´ı deterministick´e kromˇe akc´ı ostatn´ıch agent˚u, naz´yv´a se strategick´e.

2.3.3 Prostˇred´ı epizodick´e nebo sekvenˇcn´ı

V epizodick´em prostˇred´ı jsou agentovy zkuˇsenosti rozdˇeleny do atomick´ych epizod, v kaˇzd´e agent vn´ım´a a n´aslednˇe provede jednu akci. Podstatn´e je, ˇze dalˇs´ı epizoda nijak nez´avis´ı na t´e pˇredchoz´ı. Typick´y pˇr´ıklad je agent zkoumaj´ıc´ı vadn´e v´yrobky na mont´aˇzn´ı lince, kde kaˇzd´e jeho rozhodnut´ı nem´a vliv na ostatn´ı v´yrobky. V sekvenˇcn´ım prostˇred´ı, na druhou stranu, aktu´aln´ı rozhodnut´ı m˚uˇze m´ıt vliv na vˇsechna dalˇs´ı rozhodnut´ı. Epizodick´a prostˇred´ı jsou mnohem jednoduˇsˇs´ı, protoˇze agent nemus´ı pˇrem´yˇslet dopˇredu.

2.3.4 Prostˇred´ı statick´e nebo dynamick´e

Pokud se prostˇred´ı m˚uˇze zmˇenit zat´ımco agent uvaˇzuje, je pro agenta dynamick´e, v opaˇcn´em pˇr´ıpadˇe statick´e. Se statick´ymi prostˇred´ımi se jednoduˇseji pracuje, protoˇze agent nemus´ı sledovat okoln´ı svˇet ve chv´ıli, kdy uvaˇzuje nad akc´ı, ani si nemus´ı dˇelat starosti s plynut´ım ˇ

casu. Dynamick´a prostˇred´ı neust´ale po agentovi vyˇzaduj´ı nˇejakou akci a pokud se jeˇstˇe nerozhodl, nedˇel´a nic. Pokud se s plynut´ım ˇcasu nemˇen´ı prostˇred´ı ale agentovo sk´ore, je takov´e prostˇred´ı semidynamick´e, pˇr´ıkladem takov´eho prostˇred´ı jsou ˇsachy.

2.3.5 Prostˇred´ı diskr´etn´ı nebo spojit´e

Rozdˇelen´ı na diskr´etn´ı nebo spojit´e m˚uˇze b´yt pouˇzito na stav prostˇred´ı, zp˚usob jak je vn´ım´an ˇcas nebo na agentovy vjemy a akce. Napˇr´ıklad ˇsachov´a partie m´a koneˇcn´y poˇcet diskr´etn´ıch stav˚u, stejnˇe jako vjem˚u a akc´ı, narozd´ıl od ˇr´ızen´ı auta, kde rychlost i pozice jsou spojit´e veliˇciny. Vstup z digit´aln´ı kamery je pˇresnˇe vzato diskr´etn´ı, ale typicky je vn´ım´an spojitˇe jako sled promˇenliv´ych intenzit a pozic.

(12)

2.3.6 Prostˇred´ı s jedn´ım nebo v´ıce agenty

Zd´a se, ˇze je velmi jednoduch´e klasifikovat prostˇred´ı jako single- nebo multi-agentn´ı, nicm´enˇe je potˇreba urˇcit, zda ostatn´ı objekty v dan´em prostˇred´ı je nutn´e povaˇzovat za agenty, nebo stochasticky chovaj´ıc´ı-se objekty. V prostˇred´ı s agentem A a objektem B m˚uˇzeme ˇr´ıct, ˇze B je agent, pokud by se jeho chov´an´ı dalo popsat jako maximalizace ohodnocen´ı, jehoˇz hodnota z´avis´ı na chov´an´ı agenta A. V partii ˇsachu, napˇr´ıklad, se entita B snaˇz´ı zv´yˇsit svoje ohodnocen´ı, a to, podle pravidel hry, sniˇzuje ohodnocen´ı agenta A. Takov´e prostˇred´ı je konkurenˇcn´ı multiagentn´ı. Naopak pˇri ˇr´ızen´ı vozidla, vyh´yb´an´ı se sr´aˇzk´am vz´ajemnˇe sk´ore zvyˇsuje, proto je to ˇc´asteˇcnˇe kooperativn´ı multiagentn´ı prostˇred´ı. ˇC´asteˇcnˇe je to i konkurenˇcn´ı prostˇred´ı nebot’ napˇr. na jednom parkovac´ım m´ıstˇe m˚uˇze st´at pouze jedno auto. V multiagentn´ıch prostˇred´ıch vyvst´avaj´ı probl´emy s designem agent˚u, napˇr´ıklad pˇri komunikaci mezi nimi.

2.4 Implementace agent˚ u a jejich prostˇ red´ı

Vˇetˇsina k´odu je postavena na principu agent˚u, kteˇr´ı konaj´ı akce na z´akladˇe vjem˚u pˇrijat´ych z prostˇred´ı, a prostˇred´ı, kter´e reflektuje tyto akce zmˇenami stavu. Vˇsechny dalˇs´ı algo- ritmy jsou odvozeny nebo pˇripojeny k tomuto z´akladn´ımu principu. Ten tud´ıˇz pˇr´ımo vede k objektovˇe orientovan´e implementaci, kde lze s ´uspˇechem vyuˇz´ıt abstrakci a pˇredevˇs´ım dˇediˇcnost. Pokud je napˇr´ıklad potˇreba pouˇz´ıt vyhled´avac´ı algoritmus, je vytvoˇreno obecn´e prostˇred´ı, jeho poˇc´ateˇcn´ı stav je nastaven na poˇc´ateˇcn´ı stav ze kter´eho se vyhled´av´a, do tohoto prostˇred´ı je um´ıstˇen obecn´y agent a program tohoto agenta vol´a zvolen´y vyhled´avac´ı algoritmus. Agent pot´e prov´ad´ı akce, postupnˇe podle vygenerovan´e posloupnosti, vedouc´ı k c´ılov´emu stavu. Ve Smalltalku lze toto prov´est na ´urovni jiˇz existuj´ıcich tˇr´ıd pouze zmˇenou jejich instanc´ı, nicm´enˇe ˇcistˇs´ı cesta je vytvoˇren´ı nov´e tˇr´ıdy pro prostˇred´ı, kter´e je jiˇz pevnˇe sv´az´ano s dan´ym probl´emem, tzn. potomka tˇr´ıdy obecn´e prostˇred´ı a vytvoˇren´ı potomka tˇr´ıdy obecn´y agent, kter´y je pˇr´ımo usp˚usoben k vyhled´av´an´ı ve stavov´em prostoru. A pˇresnˇe t´ımto zp˚usobem je vytvoˇren k´od tohoto projektu. Zde jsou podrobnˇe pops´any tˇr´ıdy tvoˇr´ıc´ı z´aklady k´odu projektu. Vzhledem k tomu, ˇze Squeak nem´a jmenn´e prostory, jsou jm´ena vˇsech tˇr´ıd tohoto projektu doplnˇena prefixem

”AIMA“, aby nedoˇslo k moˇzn´emu konfliktu s jiˇz existuj´ıc´ımi tˇr´ıdami syst´emu. Tento prefix zde nen´ı uveden nebot’ zbyteˇcnˇe vede ke ztr´atˇe pˇrehlednosti. Toto plat´ı i pro n´asleduj´ıc´ı kapitoly.

2.4.1 Tˇr´ıda Environment

V hierarchii tˇr´ıd reprezentuj´ıc´ıch prostˇred´ı je nejv´yˇse Environment. Tato tˇr´ıda poskytuje mechanizmy pro bˇeh prostˇred´ı, obsluhuje sv´e agenty, pˇred´av´a jim vjemy, spouˇst´ı jejich programy a prov´ad´ı jejich akce. Rovnˇeˇz zaznamen´av´a sk´ore jednotliv´ych agent˚u. Kaˇzd´a instance t´eto tˇr´ıdy v sobˇe uchov´av´a kolekci agent˚u agents, kteˇr´ı v prostˇred´ı p˚usob´ı, ˇc´ıtaˇc krok˚usteps, maxim´aln´ı poˇcet krok˚umaxSteps, po dosaˇzen´ı tohoto poˇctu krok˚u je prostˇred´ı ukonˇceno, a sv˚uj aktu´aln´ı stavstate. Z´akladn´ı metoda t´eto tˇr´ıdy jerun, kter´a spust´ı proces obslouˇzen´ı jednotliv´ych agent˚u dokud nen´ı dosaˇzeno maxim´aln´ıho poˇctu krok˚u maxSteps nebo ukonˇcen´ı simulace testem isTermination. V kaˇzd´em kroku metody run je kaˇzd´emu agentovi pˇred´an jeho vjem pomoc´ı metody getPercept a n´aslednˇe od nˇej vyˇz´ad´ana akce, ta je ve formˇe symbolu. Mnoˇzinu vˇsech moˇzn´ych akc´ı v dan´em prostˇred´ı vrac´ı metoda legalActions. Potomci t´eto tˇr´ıdy pak implementuj´ı jednotliv´e akce jako metody (zpr´avy) a pomoc´ı Smalltalkovsk´e metodyperform: aSymbol je tato akce provedena. Akce vˇsech agent˚u

(13)

se prov´adˇej´ı aˇz po vyhodnocen´ı vjem˚u vˇsech agent˚u v metodˇe executeAgentActions, ta je vol´ana zupdate, kde se rovnˇeˇz prov´adˇej´ı zmˇeny prostˇred´ı pro kaˇzd´y krok. N´aslednˇe je vˇsem agent˚um vyhodnoceno sk´ore pomoc´ı metody performanceMeasure. T´ım konˇc´ı cyklus krok˚u a pokud nen´ı kladnˇe vyhodnocena metodaisTermination, pokraˇcuje cyklus dalˇs´ım krokem.

2.4.2 Tˇr´ıda GridEnvironment

GridEnvironment je potomek obecn´eho prostˇred´ı a reprezentuje prostˇred´ı s prostorem, kter´y lze adresovat pomoc´ı souˇradnic x,y. Obecn´e prostˇred´ı v˚ubec pojem prostoru nezav´ad´ı.

Na kaˇzd´e pozici v prostoru se m˚uˇze vyskytovat nˇekolik objekt˚u, ty jsou podrobnˇeji pops´any n´ıˇze. V mnoˇzinˇe legalActions t´eto tˇr´ıdy jsou akce turn, forward, grab a release, kter´e umoˇzˇnuj´ı agentovi otoˇcit se, j´ıt dopˇredu a zvednout nebo pustit objekt vyskytuj´ıc´ı se na stejn´em m´ıstˇe jako agent, resp. v jeho kontejneru. Vzhledem k tomu, ˇze se zde pouˇz´ıv´a prostor, je tˇreba tak´e vytvoˇrit metody pro pohyb v nˇem, a to gridAt:, kter´a vrac´ı kolekci objekt˚u na dan´e pozici, gridAt:put:, jeˇz um´ıst´ı objekt na danou pozici, a gridAt:remove:, kter´a dan´y objekt ze zvolen´e pozice odebere. D´ale je potˇreba metoda, kter´a hled´a objekt na dan´e pozicifindObjectIf:at:a tak´e na sousedn´ıch pozic´ıchfindNeighborIf:at:. Jejich spojen´ım je pak metodafindObjectOrNeighborIf:at:. Pˇri vytvoˇren´ı instance t´eto tˇr´ıdy je nastavena ve- likost prostˇred´ı, souˇradnice poˇc´ateˇcn´ıho bodu a vytvoˇreny objekty pomoc´ı tˇr´ıdyObjectSpec, kter´a je pops´ana n´ıˇze.

2.4.3 Tˇr´ıda VacuumWorld

VacuumWorld je uk´azkov´e prostˇred´ı pro agenta-vysavaˇce, kter´y se pohybuje v prostoru a vys´av´a smet´ı, jeho sk´ore poˇc´ıt´a metoda performanceMeasure v z´avislosti na poˇctu sesb´ıran´ych objekt˚u - prachov´ych ˇc´astic. Pˇri inicializaci je n´ahodnˇe vytvoˇren prach na vˇsech m´ıstech s pravdˇepodobnost´ı 25%. Mezi povolen´e akce patˇr´ı kromˇeturn aforward tak´esuck, kter´a vysaje prach na pozici agenta, ashutOff, kter´a agenta ukonˇc´ı.

2.4.4 Tˇr´ıda WumpusWorld

WumpusWorld je rovnˇeˇz uk´azkov´e prostˇred´ı, tentokr´at vˇsak jde o jeskyni obsahuj´ıc´ı kromˇe agenta tak´e zlato, j´amy a pˇr´ıˇseru zvanou Wumpus. Agent mus´ı na z´akladˇe vjem˚u dos´ahnout nejvˇetˇs´ıho sk´ore, v tomto pˇr´ıpadˇe to znamen´a naj´ıt zlato, nespadnout do j´amy a nenechat se seˇzrat. V pˇredefinovan´e metodˇegetPercept je agentovi vr´acen vjem na z´akladˇe jeho okol´ı, pokud je v jeho sousedstv´ı Wumpus, obdrˇz´ı symbol#stench, pokud je vedle j´amy, dostane

#breeze v pˇr´ıpadˇe, ˇze na stejn´e pozici jako on je zlato, dostane#glitter, kdyˇz naraz´ı do zdi, je mu pˇred´ano #bump a pokud nˇekter´y objekt v jeskyni vyd´a nˇejak´y zvuk, dostane se mu

#sound. Agentovi je pˇred´ana kolekce vˇsech symbol˚u, kter´e jsou v danou chv´ıli pravdiv´e, a na jejich z´akladˇe zvol´ı nˇejakou akci.

2.4.5 Tˇr´ıda Agent

Jako z´akladn´ı tˇr´ıda pro agenty slouˇz´ıAgent. Obsahuje instanˇcn´ı promˇennou program, do kter´e se ukl´ad´a blok s agentov´ym programem. Jeho nepovinn´ym parametrem je kolekce vjem˚u a vrac´ı symbol akce. Rovnˇeˇz je moˇzn´e pˇr´ımo pˇret´ıˇzit metodu runProgram, kter´a tento blok vyhodnocuje, v pˇr´ıpadn´ych potomc´ıch se sloˇzitˇejˇs´ımi programy. D´ale kaˇzd´a in- stance uchov´av´a v promˇenn´ych svoje sk´ore, jm´eno, aktu´aln´ı vjem, akci, kter´a je naplnˇena programem a sv´e tˇelo, coˇz je jeden z objekt˚u vGridEnvironment a potomc´ıch.

(14)

2.4.6 Tˇr´ıda AskUserAgent

AskUserAgent je potomek tˇr´ıdyAgent, kter´y m´ısto proveden´ı sv´eho programu vˇzdy vyvol´a dotaz na uˇzivatele, zobraz´ı aktu´aln´ı vjem a ˇcek´a na vloˇzen´ı akce, kterou m´a prov´est.

2.4.7 Tˇr´ıdy RandomVacuumAgent a RandomWumpusAgent

Tito potomci tˇr´ıdy Agent slouˇz´ı k testovac´ım ´uˇcel˚um pro VacuumWorld resp. Wumpus- World. Jejich program pouze n´ahodnˇe vyb´ır´a akci z mnoˇziny vˇsech moˇzn´ych akc´ı pro dan´e prostˇred´ı.

2.4.8 Tˇr´ıdy ReactiveVacuumAgent a ReactiveWumpusAgent

Tyto tˇr´ıdy agent˚u slouˇz´ı k uk´azce pr´ace agenta ve VacuumWorld resp. WumpusWorld.

Jejich program je v podstatˇe mapovac´ı funkce, kter´a na z´akladˇe vjem˚u zvol´ı vhodnou akci za

´

uˇcelem z´ısk´an´ı nejvˇetˇs´ıho moˇzn´eho poˇctu bod˚u. Hlavn´ı ´ukol agenta ReactiveVacuumAgent je vys´avat smet´ı, ˇcili pokud na nˇej naraz´ı, vysaje jej. Pokud naraz´ı do stˇeny, otoˇc´ı se.

V ostatn´ıch pˇr´ıpadech n´ahodnˇe zvol´ı, jestli p˚ujde dopˇredu nebo se otoˇc´ı. Program agenta ReactiveWumpusAgent je trochu sloˇzitˇejˇs´ı, a to zejm´ena z d˚uvodu pl´anu akc´ı, kter´y si agent internˇe uchov´av´a. Pokud napˇr´ıklad naraz´ı do stˇeny, otoˇc´ı se dvakr´at doprava a jde kupˇredu, ˇ

cili se pohybuje od zdi pryˇc. Pl´an je ˇreˇsen jako kolekce akc´ı, a pokud program hled´a vhodnou akci a pl´an nen´ı pr´azdn´y, vr´at´ı prvn´ı akci z fronty. Pokud najde zlato, sebere jej. Vzhledem k tomu, ˇze v prostˇred´ıWumpusWorld vyd´a zvuk pouze um´ıraj´ıc´ı Wumpus, pamatuje si agent tak´e, jestli je Wumpus jeˇstˇe naˇzivu.

2.4.9 Tˇr´ıda Object

Object je z´akladn´ı tˇr´ıdou pro v´yskyt jak´ehokoli objektu v prostoru prostˇred´ı. Kaˇzd´y objekt m´a definovan´y tvar, barvu, velikost, kontejner pro dalˇs´ı objekty, smˇer jak´ym je otoˇcen a nˇekolik dalˇs´ıch atribut˚u. Jsou nad n´ım definov´any metody pro um´ıstˇen´ı v prostoru. Ob- sahuje tak´e metodyisObstacle, isGrabable a isDeadly, kter´e vracej´ı pouze true nebo false, a slouˇz´ı k jednoduch´e definici, co je objekt zaˇc, zda je pˇrek´aˇzkou, jestli se d´a zvednout, ˇ

ci je-li pro agenta smrt´ıc´ı. V n´asleduj´ıc´ıch potomc´ıch tˇr´ıdy jsou tyto metody jednoduˇse pˇredefinov´any.

2.4.10 Tˇr´ıda ObstacleObject

ObstacleObject je tˇr´ıda reprezentuj´ıc´ı pˇrek´aˇzku, konkr´etnˇe to m˚uˇze b´yt napˇr. zed’. Agent, kter´y se pokus´ı pˇrem´ıstit na pozici s pˇrek´aˇzkou, obdrˇz´ı vjem n´araz (#bump).

2.4.11 Tˇr´ıda DeadlyObject

DeadlyObject je napˇr. j´ama nebo Wumpus a pokud se agent ocitne na pozici spoleˇcnˇe s objektem t´eto tˇr´ıdy, je ukonˇcen.

2.4.12 Tˇr´ıda AgentBodyObject

Protoˇze i agent se mus´ı vyskytovat na nˇejak´e pozici v prostoru, je mu vytvoˇreno tˇelo, kter´e je instanc´ı t´eto tˇr´ıdy. Toto tˇelo je pˇri inicializaci pˇridˇeleno agentovi do instanˇcn´ı promˇenn´e body.

(15)

2.4.13 Tˇr´ıda ObjectSpec

Ponˇevadˇz je potˇreba pro kaˇzd´e prostˇred´ı s prostorem vytv´aˇret urˇcitou sadu objekt˚u, je vhodn´e vytvoˇrit tˇr´ıdu, kter´a schopna tuto operaci nˇejak´ym zp˚usobem usnadnit. Proto je tˇr´ıda GridEnvironment vytvoˇrena tak, aby pˇri inicializaci obdrˇzela kolekci objekt˚u typu ObjectSpec a tyto specifikace postupnˇe aplikovala na sama sebe. Tˇr´ıda ObjectSpec oˇcek´av´a vloˇzen´ı typu objektu, kter´y m´a reprezentovat pomoc´ı metodywhat. Jako nepovinn´e ´udaje je moˇzno vloˇzit poˇcet, pozici ˇci pravdˇepodobnost vytvoˇren´ı objektu pomoc´ı metodcount,at aprobability. Pro zad´an´ı pozice obsahuje i speci´aln´ı metody, kter´e dok´aˇz´ı vytvoˇrit objekt na vˇsech pozic´ıch prostoru, po okraj´ıch, ˇci n´ahodnˇe: atAll,atEdge a atFree. Je tedy pomˇernˇe snadn´e vytvoˇrit specifikaci pro zed’ po okraj´ıch prostoru, nebo prach vˇsude s 25 procentn´ı pravdˇepodobnost´ı. Pˇri inicializaci prostˇred´ı je vˇsem instanc´ım tˇr´ıdy ObjectSpec zasl´ana zpr´avaapplyTo s parametrem prostˇred´ı a ta pomoc´ı metodymakeObject a dˇr´ıve zadan´ych specifikac´ı vytvoˇr´ı dan´y objekt. Tˇr´ıda zn´a pouze symbol tohoto objektu, samotn´e vytvoˇren´ı instance zajist´ı tˇr´ıdn´ı metoda dan´eho prostˇred´ı, kter´a je zavol´ana pomoc´ıperform. Pokud je specifikov´ano, ˇze objekt nen´ı lok´aln´ı (metodou isLocal), ˇcili nepatˇr´ı-li pˇr´ımo k dan´emu prostˇred´ı, pak nen´ı vol´ana tˇr´ıdn´ı metoda prostˇred´ı, ale symbol je pˇr´ımo nalezen v glob´aln´ım slovn´ıkuSmalltalk a je vytvoˇrena instance t´eto tˇr´ıdy.

(16)

Kapitola 3

Reˇ ˇ sen´ı probl´ em˚ u

V pˇredchoz´ı kapitole byl uk´az´an inteligentn´ı agent, kter´y jednal na principu pˇr´ım´eho pˇriˇrazen´ı akce k urˇcit´emu stavu. Takov´ı agenti nefunguj´ı pˇr´ıliˇs dobˇre v rozs´ahl´ych prostˇred´ıch, kde takov´e pˇriˇrazen´ı akc´ı ke vjem˚um by bylo pˇr´ıliˇs sloˇzit´e a robustn´ı. Na druhou stranu, agenti, kteˇr´ı jsou zamˇeˇren´ı na c´ıl m´ısto konkr´etn´ıho vjemu, mohou uspˇet d´ıky zvaˇzov´an´ı budouc´ıch moˇzn´ych akc´ı a vhodnosti v´ysledku tˇechto akc´ı.

3.1 Reˇ ˇ s´ıc´ı agent

Jeden druh takov´eho agenta se naz´yv´aˇreˇs´ıc´ı agent a ten je pˇredmˇetem z´ajmu t´eto kapitoly.

Reˇˇ s´ıc´ı agenti se rozhoduj´ı co provedou na z´akladˇe nalezen´ı posloupnosti akc´ı, kter´e vedou k ˇz´adan´ym stav˚um. Prvn´ım krokem pˇri tvorbˇe takov´eho agenta je spr´avn´a formulace c´ıle, kter´y pom´ah´a agentovi hledat spr´avnou cestu, vylouˇc´ı ostatn´ı moˇznosti a t´ım znaˇcnˇe z´uˇz´ı mnoˇzinu stav˚u, do kter´ych agent m˚uˇze prostˇred´ı dostat. Za c´ıl m˚uˇzeme povaˇzovat mnoˇzinu stav˚u, kde kaˇzd´y stav splˇnuje podm´ınku, ˇze probl´em je vyˇreˇsen. Protoˇze agent˚uv ´ukol je nal´ezt posloupnost akc´ı, kter´e vedou k c´ılov´emu stavu, je nutn´e rozhodnout, s jak´ymi akcemi a stavy m˚uˇze agent pracovat. To je d˚uleˇzit´e pro formulaci probl´emu, zvolit urˇcitou ´uroveˇn abstrakce, aby poˇcet krok˚u k dosaˇzen´ı c´ıle nebyl pˇr´ıliˇs velk´y a bylo moˇzn´e nal´ezt ˇreˇsen´ı.

Proces hled´an´ı posloupnosti akc´ı vedouc´ıch k c´ıli nen´ı pˇr´ım´y, existuje mnoho stav˚u, kde agent nev´ı jak si vede, a proto je jeho ´ukolem vyzkouˇset r˚uzn´e moˇzn´e akce, kter´e z dan´eho stavu vedou, aˇz do chv´ıle, kdy se dostane do stavu zn´am´eho. Potom pˇrehodnot´ı nalezen´e cesty a vybere tu nejlepˇs´ı. Vyhled´avac´ı algoritmus obdrˇz´ı probl´em na vstupu a jako v´ystup vrac´ı ˇreˇsen´ı ve formˇe posloupnosti akc´ı. Jakmile je ˇreˇsen´ı nalezeno, nast´av´a f´aze proveden´ı tˇechto akc´ı. Po formulaci c´ıle a ˇreˇsen´eho probl´emu, agent tedy zavol´a vyhled´avac´ı algo- rtimus, a pot´e prov´ad´ı akce podle navr´acen´eho ˇreˇsen´ı, vˇetˇsinou to znamen´a, ˇze provede prvn´ı akci z posloupnosti a odstran´ı ji. Takto pokraˇcuje dokud jsou ve frontˇe dalˇs´ı akce. To samozˇrejmˇe znamen´a, ˇze prostˇred´ı mus´ı splˇnovat urˇcit´a krit´eria. Pˇredevˇs´ım mus´ı b´yt stat- ick´e, ponˇevadˇz agent pˇri hled´an´ı cesty ani pˇri prov´adˇen´ı akc´ı jiˇz nebere ohled na prostˇred´ı.

Jelikoˇz se pˇredpokl´ad´a, ˇze poˇc´ateˇcn´ı stav je zn´am, prostˇred´ı mus´ı b´yt pozorovateln´e. Pˇri hled´an´ı je nutn´e vyˇc´ıslit vˇsechny stavy, prostˇred´ı tedy mus´ı b´yt diskr´etn´ı. Nejd˚uleˇzitˇejˇs´ım faktorem je, ˇze prostˇred´ı mus´ı b´yt deterministick´e, protoˇze agent pˇri prov´adˇen´ı akc´ı ignoruje vjemy, nem˚uˇze tedy zpracov´avat nepˇredv´ıdan´e ud´alosti.

Spr´avn´a definice probl´emu se skl´ad´a ze ˇctyˇr ˇc´ast´ı. Prvn´ı je poˇc´ateˇcn´ı stav, tj. stav prostˇred´ı, ve kter´em agent zaˇc´ın´a ˇreˇsit probl´em. Dalˇs´ı je popis moˇzn´ych agentov´ych akc´ı, kter´y je nejˇcastˇeji vyj´adˇren funkc´ı n´asledovn´ıka. Tato funkce vrac´ı pro kaˇzd´y stav mnoˇzinu

(17)

dvojic akce a n´asledovn´ıka, kde kaˇzd´a akce je jedna z pˇr´ıpustn´ych akc´ı v tomto stavu a n´asledovn´ık je stav, do kter´eho se prostˇred´ı dostane po proveden´ı akce. Poˇc´ateˇcn´ı stav a funkce n´asledovn´ıka dohromady definuj´ı stavov´y prostor probl´emu, mnoˇzinu vˇsech stav˚u dosaˇziteln´ych z poˇc´ateˇcn´ıho stavu. Tˇret´ı ˇc´ast definice probl´emu je c´ılov´y test, kter´y urˇc´ı, zda dan´y stav je c´ılov´ym stavem. Nˇekdy je c´ılov´ych stav˚u v´ıce a tento test jednoduˇse urˇc´ı, jestli se prostˇred´ı nach´az´ı v jednom z nich. Ne vˇzdy je c´ıl vyj´adˇren jako vyjmenovan´a mnoˇzina stav˚u, napˇr´ıklad v ˇsachov´e partii nastane c´ılov´y stav vˇzdy kdyˇz kr´al je ohroˇzen a nem´a kam se schovat. Posledn´ı ˇc´ast´ı definice je funkce urˇcuj´ıc´ı cenu cesty. ˇReˇs´ıc´ı agent m´a obvykle funkci ceny zaloˇzenou na jeho vlastn´ım ohodnocen´ı. M˚uˇzeme pˇredpokl´adat, ˇze cena cesty je souˇctem cen jednotliv´ych krok˚u, a funkci ceny kroku m˚uˇzeme definovat jako c(x,a,y), kter´a vrac´ı cenu proveden´ı akcea ze stavux do stavuy. Tyto ˇc´asti definice m˚uˇzeme uloˇzit do jedn´e datove struktury a pˇredat je jako parametr algoritmu ˇreˇs´ıc´ımu dan´y probl´em.

V´ysledkem je pak cesta z poˇc´ateˇcn´ıho do c´ılov´eho stavu. Kvalita ˇreˇsen´ı je mˇeˇrena pomoc´ı funkce ceny cesty a ˇreˇsen´ı s nejniˇzˇs´ı cenou je ˇreˇsen´ım optim´aln´ım.

3.2 Hled´ an´ı ˇ reˇ sen´ı

Jakmile m´ame probl´em formulov´an, potˇrebujeme jej vyˇreˇsit. To je provedeno prohled´an´ım stavov´eho prostoru. N´asleduj´ıc´ı zp˚usoby hled´an´ı vyuˇz´ıvaj´ı vyhled´avac´ı strom nebo vyh- led´avac´ı graf, pokud je moˇzn´e dos´ahnout stejn´eho stavu nˇekolika cestami. Koˇrenem to- hoto stromu je uzel odpov´ıdaj´ıc´ı poˇc´ateˇcn´ımu stavu. Prvn´ım krokem je kontrola, zda nejde o c´ılov´y stav, protoˇze je nutn´e oˇsetˇrit i takov´e pˇr´ıpady. V naprost´e vˇetˇsinˇe pˇr´ıpad˚u tomu tak nen´ı, a proto se pokraˇcuje rozˇs´ıˇren´ım aktu´aln´ıho stavu aplikov´an´ım funkce n´asledn´ıka na tento stav a t´ım vygenerov´an´ım nov´e mnoˇziny stav˚u. T´ımto jsme z´ıskali nˇekolik cest a mus´ıme zvolit, kterou cestou se budeme nad´ale ub´ırat. Tato volba z´avis´ı na metodˇe hled´an´ı, jednotliv´e zp˚usoby budou pops´any d´ale. Takto by se dal popsat obecn´y algoritmus pro prohled´av´an´ı stavov´eho prostoru. Jednotliv´e uzly vyhled´avac´ıho stromu uchov´avaj´ı tyto informace: stav, jeden z mnoˇziny stavov´eho prostoru probl´emu, rodiˇcovsk´y uzel, ze kter´eho byl tento uzel vygenerov´an, akce, kter´a byla aplikov´ana na rodiˇce a vedla k vytvoˇren´ı tohoto uzlu, cena cesty z poˇc´ateˇcn´ıho stavu aˇz do tohoto uzlu a hloubka zanoˇren´ı, tj. poˇcet krok˚u z poˇc´ateˇcn´ıho stavu. V´ysledkem algoritmu pro ˇreˇsen´ı probl´em˚u je bud’ ˇreˇsen´ı nebo chyba, ˇze ˇreˇsen´ı nebylo nalezeno, nˇekter´e algoritmy mohou tak´e skonˇcit v nekoneˇcn´e smyˇcˇce a v˚ubec nevr´atit v´ysledek. Hodnocen´ı algoritmu lze rozdˇelit do ˇctyˇr krit´eri´ı: ´uplnost, ˇcili jestli algo- ritmus najde ˇreˇsen´ı pokud nˇejak´e existuje, optim´alnost, jestli najde nejlepˇs´ı ˇreˇsen´ı, ˇcasov´a sloˇzitost a pamˇet’ov´a n´aroˇcnost.

3.3 Neinformovan´ e metody hled´ an´ı

Neinformovan´e metody, nebo tak´e slep´e metody hled´an´ı, nemaj´ı o stavech ˇz´adn´e dalˇs´ı in- formace, kromˇe zad´an´ı probl´emu. Jedin´e co vˇed´ı o kaˇzd´em stavu je to, zda je ˇci nen´ı c´ılov´y.

3.3.1 Breadth-first search

Breadth-first search (BFS), neboli slep´e prohled´av´an´ı do ˇs´ıˇrky, je jednoduch´a metoda, pracuj´ıc´ı na principu expandov´an´ı stromu postupnˇe po ´urovn´ıch, ˇcili vˇsechny uzly v dan´e hloubce jsou expandov´any dˇr´ıve, neˇz uzly dalˇs´ı ´urovnˇe. Je zˇrejm´e, ˇze tato metoda je ´upln´a, optim´aln´ı pouze v pˇr´ıpadˇe, ˇze s nar˚ustaj´ıc´ı hloubkou se nesniˇzuje cena kroku (napˇr´ıklad pˇri

(18)

stejn´ych cen´ach krok˚u), avˇsak je dost n´aroˇcn´a na pamˇet nebot’ mus´ı uchov´avat mnoˇzinu uzl˚u, ketr´e je tˇreba expandovat.

3.3.2 Uniform-cost search

Uniform-cost search (UCS)je narozd´ıl od pˇredchoz´ı metody optim´aln´ı vˇzdy, protoˇze neex- panduje uzly v poˇrad´ı podle jejich hloubky, n´ybrˇz podle nejniˇzˇs´ı ceny cesty. Z toho vypl´yv´a, ˇ

ze pˇr´ıpadˇe stejn´e ceny kroku u vˇsech krok˚u je tato metoda identick´a s pˇredchoz´ı metodou.

V pˇr´ıpadˇe, ˇze by nˇejak´y krok mˇel nulovou cenu, skonˇcil by tento algoritmus v nekoneˇcn´e smyˇcˇce. Nev´yhoda t´eto metody je, ˇze ˇcasto nejdˇr´ıve expanduje mnoho uzl˚u s mal´ymi ce- nami pˇred prozkoum´an´ım ostatn´ıch cest s vˇetˇs´ı cenou, kter´e mohou v´est k ˇreˇsen´ı, coˇz se odr´aˇz´ı ve velk´e pamˇet’ov´e n´aroˇcnosti.

3.3.3 Depth-first search

Depth-first search (DFS), neboli slep´e prohled´av´an´ı do hloubky, vˇzdy expanduje nejhloubˇeji postaven´y uzel tak dlouho, dokud takov´y uzel nem´a ˇz´adn´eho n´asledn´ıka. Potom se metoda vr´at´ı zpˇet ke druh´emu nejhlubˇs´ımu uzlu. Z toho vypl´yvaj´ı nev´yhody t´eto metody, m˚uˇze expandovat pˇr´ıliˇs hluboko, nebo i nekoneˇcnˇe hluboko, i kdyˇz ˇreˇsen´ı se nal´ez´a mnohem v´yˇse ve stromu v jin´e vˇetvi. Metoda tedy nen´ı ´upln´a ani optim´aln´ı. M´a vˇsak velmi skromn´e pamˇet’ov´e n´aroky. Jej´ı variantaDepth-limited search (DLS) je zaloˇzena na stejn´em pricipu, akor´at obshauje omezen´ı pro expanzi jen do urˇcit´e hloubky. To znamen´a, ˇze pokud je ˇreˇsen´ı n´ıˇze, v˚ubec jej nenalezne. Obvykle se vˇsak d´a urˇcit kolik krok˚u je maxim´alnˇe potˇreba, a zamez´ı se t´ım moˇznost nekoneˇcn´eho expandov´an´ı nˇekter´e vˇetve vyhled´avac´ıho stromu.

3.3.4 Iterative deepening depth-first search

Iterative deepening depth-first search (IDS) je metoda postupn´eho zanoˇrov´an´ı zaloˇzena na slep´em prohled´av´an´ı do hloubky. Pracuje na principu postupn´eho zvyˇsov´an´ı limitu zanoˇren´ı a uˇzit´ıDLS, kombinuje v´yhody slep´eho prohled´av´an´ı do hloubky i do ˇs´ıˇrky, nen´ı pˇr´ıliˇs pamˇet’ovˇe n´aroˇcn´a, je ´upln´a a za stejn´ych podm´ınek jako BFS je i optim´aln´ı. Vzhledem k tomu, ˇze st´ale postupnˇe vol´a DLS pro st´ale vˇetˇs´ı limit hloubky zanoˇren´ı, zd´a se, ˇze nen´ı pˇr´ıliˇs efektivn´ı z d˚uvodu neust´al´eho opakov´an´ı expanze vyˇsˇs´ıch uzl˚u, pravda je ovˇsem takov´a, ˇze ˇcasov´a sloˇzitostIDS je menˇs´ı neˇzBFS, je tedy mnohem rychlejˇs´ı. Obecnˇe plat´ı, ˇ

ze tato metoda je pro ´ulohy s velk´ym stavov´ym prostorem a nezn´amou hloubkou ˇreˇsen´ı ze vˇsech neinformovan´ych metod nejlepˇs´ı volbou.

Vˇsechny tyto metody mohou pˇri hled´an´ı narazit na v´yznamnou komplikaci - pl´ytv´an´ı ˇ

casu nal´ez´an´ım jiˇz zn´am´ych stav˚u. V nˇekter´ych probl´emech tato moˇznost nikdy nenastane, ale v ˇradˇe pˇr´ıpad˚u jsou akce vratn´e, jako napˇr´ıklad pˇri hled´an´ı trasy. Stavov´e stromy jsou v tˇechto pˇr´ıpadech nekoneˇcn´e, ale pokud budeme ignorovat jiˇz jednou expandovan´e stavy, m˚uˇzeme je zmˇenˇsit na koneˇcnou velikost. To ovˇsem znamen´a uchovat vˇsechny jiˇz navˇst´ıven´e stavy v pamˇeti, abychom je mohli porovnat s aktu´aln´ım stavem prostˇred´ı.

3.4 Informovan´ e metody hled´ an´ı

Narozd´ıl od slep´ych metod prohled´av´an´ı stavov´eho prostoru, informovan´e metody pouˇz´ıvaj´ı znalosti, kter´e nejsou v definici probl´emu, a mohou nal´ezt ˇreˇsen´ı mnohem efektivnˇeji.

(19)

3.4.1 Best-first search

Best-first search (BestFS) je obecn´a metoda, kter´a vyb´ır´a uzel pro expanzi na z´akladˇe evaluaˇcn´ı funkcef(n). Obvykle je vybr´an uzel s nejniˇzˇs´ı hodnotou, protoˇze evaluaˇcn´ı funkce vyjadˇruje vzd´alenost od c´ıle. Aˇckoli je v n´azvu slovo best, nevyb´ır´a vˇzdy ten nejlepˇs´ı uzel, pokud by to tak bylo, nebylo by to hled´an´ı, ale pˇr´ım´a cesta k c´ıli. Ovˇsem ne vˇzdy je evaluaˇcn´ı funkce pˇresn´a, a tak je vˇzdy vybr´an ten uzel, o kter´em se pˇredpokl´ad´a, ˇze je nejlepˇs´ı. Z´akladem metody je heuristick´a funkce h(n), kter´a vrac´ı onu pˇredpokl´adanou vzd´alenost od c´ıle. Pokud jen c´ılov´y stav, pakh(n) = 0.

3.4.2 Greedy best-first search

Prvn´ı variantou t´eto metody je metodagreedy best-first search. Ta expanduje uzly pouze na z´akladˇe jejich vzd´alenosti od c´ıle, ohodnocuje tedy uzly pouze pomoc´ı heuristick´e funkce, ˇ

cili f(n) = h(n). Aˇckoli tato metoda ve vˇetˇsinˇe pˇr´ıpad˚u pouˇz´ıv´a pouze minim´aln´ı velikost vyhled´avac´ıho stromu, nen´ı optim´aln´ı ani ´upln´a.

3.4.3 A* search

Nejzn´amˇejˇs´ı variantouBestFS metodou jeA* search, kter´a ohodnocuje uzly kombinac´ıg(n), ceny cesty k uzlu, sh(n), pˇredpokl´adan´e ceny cesty z uzlu do c´ıle. Znamen´a to, ˇzef(n)= g(n) + h(n)a evaluaˇcn´ı funkce vrac´ı pˇredpokl´adanou cenu ˇreˇsen´ı proch´azej´ıc´ıho uzlemn. Pokud heuristick´a funkce nikdy nepˇrecen´ı cestu k c´ıli, nalezne tato metoda vˇzdy optim´aln´ı ˇreˇsen´ı.

Jej´ı ˇcasov´a sloˇzitost nen´ı pˇr´ıliˇs velk´a, ale klade velk´e n´aroky na pamˇet nebot’ si uchov´av´a vˇsechny uzly, nehod´ı se proto pro ˇreˇsen´ı probl´em˚u pˇr´ıliˇs velk´ych rozmˇer˚u.

3.5 Hran´ı her

V minul´e kapitole byla zm´ınˇena multiagentn´ı prostˇred´ı, ve kter´ych kaˇzd´y agent mus´ı zv´aˇzit akce ostatn´ıch agent˚u a jak tyto akce ovlivn´ı jeho hodnocen´ı. V oblasti hran´ı her se pˇrev´aˇznˇe jedn´a o deterministick´e, plnˇe pozorovateln´e, konkurenˇcn´ı prostˇred´ı, kde se dva agenti stˇr´ıdaj´ı ve sv´ych akc´ıch, a v´ysledn´e ohodnocen´ı jednoho je opaˇcn´e k hodnocen´ı druh´eho agenta.

Napˇr´ıklad, pokud prvn´ı hr´aˇc vyhraje partii ˇsachu, druh´y nutnˇe prohr´al. Hru jako takovou lze form´alnˇe definovat jako druh probl´emu s n´asleduj´ıc´ımi prvky: poˇc´ateˇcn´ı stav, kter´y ud´av´a stav hrac´ı desky a kter´y hr´aˇc je na tahu; funkci n´asledn´ıka, kter´a vrac´ı seznam p´ar˚u [tah, stav], kde kaˇzd´y p´ar vyjadˇruje jeden z moˇzn´ych tah˚u a v´ysledn´y stav; test na konec hry a hodnot´ıc´ı funkce, kter´a vrac´ı ˇc´ıseln´e vyj´adˇren´ı koncov´eho stavu. V ˇsachu napˇr´ıklad tato funkce pro v´yhru, prohru nebo rem´ızu vrac´ı hodnoty +1, -1 nebo 0. V kla- sick´em probl´emu zaloˇzen´em na prohled´av´an´ı stavov´eho prostoru by optim´aln´ım ˇreˇsen´ım byla posloupnost tah˚u vedouc´ıch k c´ılov´emu stavu, nicm´enˇe pˇri hˇre m´a k tomu co ˇr´ıct i druh´y hr´aˇc. Hr´aˇc A tedy mus´ı naj´ıt strategii, kter´a urˇcuje jeho tah z poˇc´ateˇcn´ıho stavu, pak tahy ze vˇsech stav˚u, kter´e mohly vzniknout tahem hr´aˇce B, d´ale tahy ze vˇsech stav˚u, kter´e mohly vzniknout tahem B na kaˇzd´y moˇzn´y pˇredchoz´ı tah, a tak d´ale. Jin´ymi slovy, optim´aln´ı strategie vede k v´ysledk˚um ne horˇs´ım neˇz jak´akoli jin´a strategie, pˇri kter´e hr´aˇc hraje proti dokonal´emu protivn´ıkovi.

(20)

3.5.1 Minimax

Metoda minimax vyb´ır´a nejlepˇs´ı tah podle hern´ıho stromu, vytvoˇren´eho v´yˇse zm´ınˇen´ym hled´an´ım vˇsech moˇzn´ych tah˚u hr´aˇce i soupeˇre. Listy tohoto stromu jsou c´ılov´e stavy a kaˇzd´y je ohodnocen hodnot´ıc´ı funkc´ı. Potom je kaˇzd´y uzel stromu ohodnocen podle pravidla, ˇze pokud se jedn´a o uzel hr´aˇce A, je mu pˇriˇrazena nejvyˇsˇs´ı hodnota z ohodnocen´ı n´asledn´ych uzl˚u, v pˇr´ıpadˇe uzlu soupeˇre B je to hodnota minim´aln´ı, ponˇevadˇz plat´ı, ˇze ˇc´ım vyˇsˇs´ı ohodnocen´ı, t´ım l´ıp pro A, a naopak, ˇc´ım niˇzˇs´ı, t´ım l´ıp je na tom B. T´ım se ohodnocen´ı dostane aˇz ke koˇrenu stromu a podle nˇej hr´aˇc rozhodne, kter´y tah provede. Jelikoˇz je tˇreba vytvoˇrit strom pro celou hru, je pro jin´e neˇz ty nejjednoduˇsˇs´ı hry obrovsk´y a tato metoda prakticky nepouˇziteln´a, nicm´enˇe slouˇz´ı jako analytick´y z´aklad pro pouˇzitelnˇejˇs´ı algoritmy.

3.5.2 Alpha-beta pruning

Metoda alfa-beta ˇrezu dok´aˇze eliminovat nˇekter´e vˇetve stromu a je tedy podstatnˇe efek- tivnˇejˇs´ı neˇz pˇredchoz´ı algoritmus. Vych´az´ı pˇr´ımo z nˇej, nicm´enˇe vˇetve, kter´e nemohou ovlivnit ohodnocen´ı uzlu, jsou z v´ypoˇctu vypuˇstˇeny. Pokud ve stromu existuje uzelntakov´y, ˇ

ze hr´aˇc m˚uˇze t´ahnout na tento uzel, a z´aroveˇn existuje lepˇs´ı volba m bud’ u pˇredka uzlu n nebo kdekoli v´yˇse ve stromu, pak uzlu n nebude pˇri hˇre nikdy dos´ahnuto. Metoda z´ıskala jm´eno podle dvou promˇenn´ych,alfa a beta, kter´e uchov´av´aj´ı hodnoty doposud nalezen´ych nejlepˇs´ıch hodnot, alfa obsahuje pro hr´aˇce A nejvyˇsˇs´ı hodnotu a beta nejlepˇs´ı pro hr´aˇce B, ˇcili nejniˇzˇs´ı. Metoda postupnˇe upravuje hodnoty alfa a beta jak proch´az´ı stromem a odˇreˇze zb´yvaj´ıc´ı vˇetve uzlu pokud zjist´ı, ˇze ohodnocen´ı aktu´aln´ıho uzlu je horˇs´ı, neˇz aktu´aln´ı alfa resp. beta pro hr´aˇce A resp. B. Efektivita metody je znaˇcnˇe z´avisl´a na poˇrad´ı prohled´av´an´ı jednotliv´ych uzl˚u. Pokud jsou nejdˇr´ıve vyhodnoceny cesty, kter´e se zdaj´ı b´yt dobr´ym tahem, m˚uˇze tato metoda ve srovn´an´ı s minimaxem za stejn´y ˇcas dos´ahnout aˇz dvojn´asobn´e hloubky stromu.

3.6 Implementace

3.6.1 Tˇr´ıda Problem

Z´akladn´ı tˇr´ıdou pro ˇreˇsen´ı probl´em˚u pomoc´ı prohled´av´an´ı stavov´eho prostoru je Problem.

Obsahuje instanˇcn´ı promˇenn´e initialState, ve kter´e je uloˇzen poˇc´ateˇcn´ı stav, a goal, ve kter´e je uloˇzen stav c´ılov´y. Probl´em je vyˇreˇsen, pokud metoda goalTest vrac´ıtrue, coˇz je pˇri shodnosti pˇred´avan´eho a c´ılov´eho stavu. Pokud nelze pˇresnˇe definovat c´ılov´y stav je moˇzn´e tuto metodu pˇret´ıˇzit v potomku tˇr´ıdy. Tˇr´ıda sama o sobˇe je v podstatˇe abstraktn´ı, protoˇze nem´a definovanou metodu successors, kter´a vrac´ı n´asledn´e moˇzn´e stavy ve dvojici s akc´ı. Tuto metodu si mus´ı kaˇzd´y konkr´etn´ı probl´em, potomek t´eto tˇr´ıdy, pˇredefinovat.

Reˇˇ sen´ı probl´emu se spouˇst´ı vol´an´ım metodysolve. Tato tˇr´ıda rovnˇeˇz obsahuje prohled´avac´ı algoritmy. Ty jsou implementov´any pomoc´ı kolekce uzl˚u, instanc´ı tˇr´ıdy Node, ke kter´e je pˇristupov´ano jako ke frontˇe, a kaˇzd´y algoritmus pˇredepisuje v jak´em poˇrad´ı je k uzl˚um ve frontˇe pˇristupov´ano. Tˇr´ıda zn´a n´asleduj´ıc´ı algoritmy.

Slep´e prohled´av´an´ı do ˇs´ıˇrky prov´ad´ı metoda breadthFirstSearch, kter´a pouˇz´ıv´a frontu typu FIFO. Stejn´y algoritmus, kter´y ale nav´ıc eliminuje n´avraty do pˇredchoz´ıho stavu, je naps´an pod n´azvem noReturnsBreadthFirstSearch. Test na opakov´an´ı pˇredchoz´ıho stavu zajiˇst’uje tˇr´ıda Node metodou isReturning. Pro vynech´an´ı nejen opakuj´ıc´ıch se stav˚u, ale

´

uplnˇe vˇsech duplicitn´ıch stav˚u ve vyhled´avac´ım stromu slouˇz´ı metodanoDuplicatesBreadth- FirstSearch. Slep´e prohled´av´an´ı do hloubky zajiˇst’uje metodadepthFirstSearch, ta vyuˇz´ıv´a

(21)

fronty s uzly jako z´asobn´ıku - LIFO. Jelikoˇz se m˚uˇze snadno zacyklit, existuje jej´ı varianta s eliminac´ı vˇsech cykl˚u, kter´a podobnˇe jako v pˇredchoz´ım pˇr´ıpadˇe vyuˇz´ıv´a funkˇcnosti tˇr´ıdy Node, ale metodyisLooping, kter´a kontroluje nejen pˇredchoz´ı na stav, ale vˇsechny pˇredchoz´ı stavy a t´ım bezpeˇcnˇe detekuje jak´ykoli cyklus. Tato metoda m´a n´azev noCyclesDepthFirst- Search. Jako z´aklad informovan´ych algoritm˚u vyhled´av´an´ı je metodabestFirstSearch, kter´a pˇrij´ım´a jako parametr blok s evaluaˇcn´ı funkc´ı. AˇckoliuniformCostSearch patˇr´ı mezi nein- formovan´e algorimy, vyuˇz´ıv´abestFirstSearch tak, ˇze j´ı pˇred´av´a funkci vracej´ıc´ı cenu kroku.

MetodagreedySearch vyb´ır´a uzly na z´akladˇe pˇredpokl´adan´e ceny cesty k c´ıli, pˇred´av´a tedy bestFirstSearch jako parametr heuristickou funkci. AlgoritmusaStarSearch je na b´azibest- FirstSearch, kde evaluaˇcn´ı funkce sˇc´ıt´a aktu´aln´ı cenu cesty a pˇredpokl´adanou cenu do c´ıle.

3.6.2 Tˇr´ıda Node

Jednotliv´e uzly jsou z´akladn´ımi prvky pro uchov´an´ı stavov´eho prostoru a jeho proch´azen´ı.

Kaˇzd´y uzel pˇredstavuje stav a m´a metoduexpand, kter´a vygeneruje uzly, ke kter´ym lze doj´ıt z jeho stavu. Uchov´av´a rovnˇeˇz cenu aktu´aln´ı cesty, pˇrepokl´adanou cenu do c´ıle, aktu´aln´ı hloubku zanoˇren´ı a odkazy na n´asleduj´ıc´ı uzly. Instance t´eto tˇr´ıdy tvoˇr´ı vyhled´avac´ı strom.

3.6.3 Tˇr´ıda Game

Game je tˇr´ıda urˇcen´a pro popis a nalezen´ı ˇreˇsen´ı pˇri hran´ı her. Podobnˇe jako pro probl´em, pro konkr´etn´ı hru je nutn´e vytvoˇrit potomka a nadefinovat metody makeMove,legalMoves aisGameOver. Prvn´ı z nich urˇcuje jak se urˇcit´ym tahem zmˇen´ı stav hry, druh´a vrac´ı kolekci povolen´ych tah˚u pro dan´y stav a tˇret´ı testuje zda existuje v´ıtˇez nebo je rem´ıza. S touto tˇr´ıdou je pevnˇe sv´az´ana tˇr´ıda GameState urˇcuj´ıc´ı stav hry. Sama tˇr´ıda Game obsahuje implementaci nˇekolika algoritm˚u pro hran´ı her. N´asleduj´ı n´azvy jejich metod.

Metoda minimaxDecision je z´akladn´ı algoritmus, kter´y prohled´av´a postupnˇe vˇsechny stavy dokud nedojde k c´ıli a podle tˇechto informac´ı vybere nejlepˇs´ı tah. Aˇckoli dojde vˇzdy k nejlepˇs´ımu v´ysledku, vzhledem k jeho neefektivnosti je pro netrivi´aln´ı hry nepouˇziteln´y.

Metoda minimaxCutoffDecision prohled´av´a stavov´y prostor podobnˇe jako minimax ale pouze do n ´urovn´ı, pot´e na koncov´e stavy aplikuje evaluaˇcn´ı funkci a na z´akladˇe tˇechto informac´ı rozhodne, jak t´ahnout. Podobnˇe jako omezen´y minimax prohled´av´a metoda al- phaBetaDecision jen do urˇcen´e ´urovnˇe a vr´at´ı tak´e stejn´y v´ysledek, ale prohled´a m´enˇe uzl˚u, je tud´ıˇz efektivnˇejˇs´ı. N´ahodn´y v´ybˇer z mnoˇziny moˇzn´ych tah˚u prov´ad´ı metodapickRandom- Move. Aby mohl do hry zasahovat i uˇzivatel, existuje metoda askGameUser, kter´a vyzve uˇzivatele, aby vybral jeden z mnoˇziny moˇzn´ych tah˚u.

3.6.4 Tˇr´ıda GameState

Tˇr´ıda GameState je urˇcena pro uloˇzen´ı aktu´aln´ıho stavu hry. Ve sv´ych instanˇcn´ıch promˇenn´ych uchov´av´a hrac´ı desku, seznam hr´aˇc˚u, jejich sk´ore a tah, kter´y tento stav vytvoˇril. Seznam hr´aˇc˚u obsahuje na prvn´ım m´ıstˇe vˇzdy aktu´aln´ıho hr´aˇce, tud´ıˇz postupnˇe rotuje doleva jak se hr´aˇci stˇr´ıdaj´ı.

3.6.5 Prostˇred´ı

ProblemSolvingEnvironment je tˇr´ıda urˇcen´a k ˇreˇsen´ı probl´em˚u. Kaˇzd´y probl´em m´a metodu asEnvironment, kter´a vytvoˇr´ı instanci tohoto prostˇred´ı. ProblemSolvingAgent je urˇcen pro pr´aci v prostˇred´ı pro ˇreˇsen´ı probl´em˚u, vlastn´ı promˇennou algorithm a pˇri inicializaci

(22)

prostˇred´ı je jeho program definov´an tak, aby nejprve nalezl ˇreˇsen´ı dan´eho probl´emu a pot´e vykon´aval krok po kroku aˇz do c´ılov´eho stavu. Tˇr´ıdaGameEnvironment je vytvoˇrena jako prostˇred´ı pro hran´ı her. Kaˇzd´a hra m´a metoduasEnvironment, kter´a vytvoˇr´ı instanci tohoto prostˇred´ı. GameAgent je urˇcen pro hran´ı her, vlastn´ı promˇennou algorithm a pˇret´ıˇzenou metodurunProgram, kter´a je upravena pro komunikaci s hrou a pˇr´ım´e vol´an´ı algoritmu pro v´ypoˇcet tahu podle agenta.HumanGameAgent a RandomGameAgent jsou tˇr´ıdy odvozen´e odGameAgent, pouˇz´ıvaj´ıc´ı algoritmus pro v´ybˇer tahu podle volby uˇzivatele resp. n´ahodn´e volby.

3.7 Pˇ r´ıklady

3.7.1 Mision´aˇri a kanibalov´e

Pro uk´azku ˇreˇsen´ı probl´em˚u byla zvolena klasick´a ´uloha, ve kter´e je nutn´e pˇrepravit z jedno bˇrehu na druh´y 3 mision´aˇre a 3 kanibaly, pˇriˇcemˇz lod’ka unese 2 osoby a na ˇz´adn´em bˇrehu nesm´ı kanibalov´e nikdy pˇreˇc´ıslit mision´aˇre. Pro tento probl´em byla vytvoˇrena tˇr´ıda Can- nibalProblem, kter´a je potomkem tˇr´ıdy Problem. Pro jednoduˇsˇs´ı reprezentaci stav˚u byla vytvoˇrena tˇr´ıdaCannibalState, kter´a popisuje poˇcet jednotliv´ych osob na obou bˇrez´ıch.

3.7.2 Piˇskvorky

Jako uk´azka hran´ı her byly zvoleny piˇskvorky (Tic-Tac-Toe). Tˇr´ıda TTTGame definuje potˇrebn´e funkce pro zjiˇstˇen´ı moˇzn´ych tah˚u, vykon´an´ı tahu a testu na konec hry, rovnˇeˇz evaluaˇcn´ı funkci pro algoritmus alfa-beta. AlphaBetaTTTAgent vyuˇz´ıv´a tohoto algoritmu pro v´ybˇer tahu.

3.7.3 D´ama

Dalˇs´ı uk´azkou hry vyuˇz´ıvaj´ıc´ı tento k´od je D´ama (Checkers). Hra vyuˇz´ıv´a alfa-beta ˇrezu a je schopn´a hledat aˇz 10 p˚ultah˚u dopˇredu bez v´yrazn´eho zpomalen´ı hry. Kaˇzd´y stav ˇsachovnice je ohodnocen podle poˇctu a polohy b´ıl´ych a ˇcern´ych kamen˚u a dam, nebot’ hern´ı strom nen´ı dopoˇc´ıt´an aˇz do konce hry a je tedy nezbytn´e listy omezen´eho stromu nˇejak ohodnotit. Hra obsahuje pomˇernˇe vydaˇren´e grafick´e prostˇred´ı, inspirovan´e ˇsachy, kter´e jsou ve Squeaku standardnˇe. Z´akladn´ı funkˇcnost zajiˇst’uje tˇr´ıdaCheckers, hra se spouˇst´ı proveden´ım v´yrazu Checkers new.

(23)

Kapitola 4

Logika

Tato kapitola se zab´yv´a reprezentac´ı znalost´ı a logick´ym myˇslen´ım, coˇz jsou nezbytn´e souˇc´asti umˇel´e inteligence. Agent, kter´y vyuˇz´ıv´a znalost´ı, je schopen dos´ahnout sv´eho c´ıle i v komplexn´ıch prostˇred´ıch. ˇReˇs´ıc´ı agenti sice znaj´ı v´ysledek sv´ych akc´ı a d´ıky nˇemu hledaj´ı ˇreˇsen´ı, ovˇsem takov´e znalosti jsou velmi specifick´e. ˇSachov´y program dok´aˇze spoˇc´ıtat moˇzn´e tahy kr´ale, nicm´enˇe nem´a ani ponˇet´ı o tom, ˇze ˇz´adn´a figurka nem˚uˇze b´yt na dvou m´ıstech z´aroveˇn. Oproti tomulogick´y agent m˚uˇze tˇeˇzit ze sv´ych znalost´ı mnohem obecnˇeji. Znalosti tak´e hraj´ı velkou roli v ˇc´asteˇcnˇe pozorovateln´ych prostˇred´ıch, kde je agent m˚uˇze kombino- vat s aktu´aln´ımi vjemy a odvodit tak nˇekter´e skryt´e aspekty souˇcasn´eho stavu okol´ı pˇred volbou sv´e akce.

4.1 Uvod do logiky ´

Z´akladn´ı souˇc´ast´ı logick´eho agenta je b´aze znalost´ı, coˇz je mnoˇzina vˇet, kter´e jsou vyj´adˇreny v jazyce pro reprezentaci znalost´ı a obsahuj´ı nˇejak´e tvrzen´ı o okoln´ım svˇetˇe. Jelikoˇz potˇrebujeme zp˚usob, jak do b´aze znalost´ı pˇrid´avat vˇety a jak z n´ı zjiˇst’ovat, co je zn´amo, existuj´ı metody tell a ask. Obˇe tyto metody mohou vyuˇz´ıt odvozen´ı pro vytvoˇren´ı nov´ych vˇet z jiˇz existuj´ıc´ıch v b´azi znalost´ı. Logick´y agent mus´ı pˇri odvozov´an´ı dodrˇzet pravidlo, ˇ

ze jak´akoli odpovˇed’ na ot´azku mus´ı logicky vypl´yvat z toho, co bylo do b´aze znalost´ı vloˇzeno dˇr´ıve. Kdykoli agent odvod´ı z´avˇer z dostupn´ych informac´ı, je zaruˇceno, ˇze tento z´avˇer je spr´avn´y, pokud jsou spr´avn´e dostupn´e infomace. To je stˇeˇzejn´ı vlastnost logick´eho myˇslen´ı. Obecn´y program logick´eho agenta je zaloˇzen na n´asleduj´ıc´ım principu. Jako kaˇzd´y jin´y agent pˇrij´ım´a vjem na vstupu a jeho v´ystupem je akce. Vjem je nejprve uloˇzen do b´aze znalost´ı metodoutell. N´aslednˇe je proveden dotaz do b´aze (ask) a po vyhodnocen´ı dotazu je navr´acena akce. Tato akce je pˇred proveden´ım uloˇzena do b´aze znalost´ı, jelikoˇz je nutn´e zaz- namenat, ˇze tato akce skuteˇcnˇe byla provedena. Z uveden´eho postupu vypl´yv´a, ˇze je moˇzn´e vytvoˇrit agenta pouze vloˇzen´ım vˇet do b´aze znalost´ı, coˇz pˇri vhodn´em reprezentaˇcn´ım jazyce m˚uˇze velmi zjednoduˇsit n´avrh syst´emu. Takov´y pˇr´ıstup se naz´yv´a deklarativn´ı. Oproti tomu procedur´aln´ı pˇr´ıstup pˇr´ımo ukl´ad´a poˇzadovan´e chov´an´ı agenta jako k´od programu, coˇz m˚uˇze podstatnˇe zlepˇsit efektivitu syst´emu. V souˇcasn´e dobˇe je zˇrejm´e, ˇze n´avrh ´uspˇeˇsn´eho agenta mus´ı kombinovat oba tyto pˇr´ıstupy.

Jak jiˇz bylo ˇreˇceno, b´aze znalost´ı je mnoˇzina vˇet. Kaˇzd´a vˇeta mus´ı b´yt ve spr´avn´em tvaru, kter´y je urˇcen syntax´ı reprezentaˇcn´ıho jazyka. Logika tak´e definuje s´ematiku jazyka, tj. v´yznam kaˇzd´e vˇety. Podle definice, s´emantika jazyka definuje pravdivost kaˇzd´e vˇety pro kaˇzd´e moˇzn´e prostˇred´ı. Napˇr´ıklad v aritmetice je vˇeta x+y= 4 pravdiv´a v prostˇred´ı, kde

(24)

x je 2 a y je 2, ale nen´ı pravdiv´a v prostˇred´ı s x= 1 a y = 1. To znamen´a, ˇze kaˇzd´a vˇeta v logice mus´ı b´yt pro jak´ekoli prostˇred´ı pravdiv´a ˇci nepravdiv´a. Logick´e myˇslen´ı agenta je zaloˇzeno na logick´ych d˚usledc´ıch. Z vˇety A logicky vypl´yv´a vˇeta B, coˇz znamen´a, ˇze pro kaˇzd´y model (prostˇred´ı), ve kter´em je A pravdiv´a, je B rovnˇeˇz pravdiv´a. Nejjednoduˇsˇs´ım algoritmem pro odvozov´an´ı je kontrola model˚u, coˇz je vlastnˇe vyj´adˇren´ı vˇsech moˇzn´ych model˚u a porovn´an´ı, zda vˇetaAje pravdiv´a ve vˇsech modelech, ve kter´ych je pravdiv´a b´aze znalost´ı. Odvozovac´ı algoritmus je bezesporn´y (sound), jestliˇze odvozen´e vˇety jsou vˇzdy logick´ym d˚usledkem jiˇz zn´am´e vˇety, a ´upln´y (complete), pokud dok´aˇze odvodit kaˇzdou logicky vypl´yvaj´ıc´ı vˇetu z jiˇz zn´am´ych vˇet v b´azi znalost´ı.

4.2 V´ yrokov´ a logika

4.2.1 Jazyk v´yrokov´e logiky

V´yrokov´a logika je velmi jednoduch´a, poslouˇz´ı tedy dobˇre k vysvˇetlen´ı z´akladn´ıch prvk˚u t´eto oblasti. Jako prvn´ı bude pops´an jazyk v´yrokov´e logiky.

Syntaxe tohoto jazyka definuje spr´avn´y tvar vˇet - formul´ı v´yrokov´e logiky. Nejmenˇs´ı element jazyka je atomick´a formule (atom), coˇz je v´yrokov´y symbol, kter´y je bud’ pravdiv´y nebo nepravdiv´y. Existuj´ı dva symboly se zvl´aˇstn´ım v´yznamem, vˇzdy pravdiv´y - True a vˇzdy nepravdiv´y - False. Formule se skl´adaj´ı z atomick´ych formul´ı a logick´ych spojek (negace, konjunkce, disjunkce, implikace a ekvivalence).

S´emantika jazyka definuje pravidla pro urˇcen´ı pravdivosti formule pro dan´y model, tj.

nastav´ı hodnotu pravdivosti pro kaˇzd´y v´yrokov´y symbol. Hodnota prvotn´ıch formul´ı je d´ana modelem, jednoduch´e formule jsou vyhodnoceny podle pravdivostn´ı tabulky a komplexn´ı formule jsou pomoc´ı rekurze rozloˇzeny na jednoduch´e a vyhodnoceny podle pˇredchoz´ıch pravidel.

P Q ¬P P∧Q P∨Q P ⇒Q P ⇔Q

f alse f alse true f alse f alse true true f alse true true f alse true true f alse

true f alse f alse f alse true f alse f alse true true f alse true true true true

Tabulka 4.1: Pravdivostn´ı tabulka

B´aze znalost´ı obsahuje formule, kter´e urˇcuj´ı pravdivost b´aze pro dan´y model. Jelikoˇz je nutn´e, aby vˇsechny formule byly splnˇeny, m˚uˇzeme b´azi br´at jako jedinou formuli, kter´a je konjunkc´ı formul´ı v b´azi obsaˇzen´ych.

4.2.2 Odvozov´an´ı

C´ılem odvozen´ı je zjistit, zda dan´a formule logicky vypl´yv´a z b´aze znalost´ı. Nejjednoduˇsˇs´ı algoritmus vych´az´ı pˇr´ımo z principu logick´eho d˚usledku, vyˇc´ıslen´ı vˇsech moˇzn´ych model˚u a n´asledn´a kontrola, jestli dan´a formule je platn´a v kaˇzd´em modelu, ve kter´em je platn´a b´aze znalost´ı. Ve v´yrokov´e logice lze model vyj´adˇrit jako pˇriˇrazen´ı hodnoty pravda nebo nepravda pro kaˇzd´y v´yrokov´y symbol vyskytuj´ıc´ı se v b´azi znalost´ı. Algoritmus pro kontrolu model˚u tedy rekurzivnˇe vyˇc´ısl´ı vˇsechna moˇzn´a pˇriˇrazen´ı hodnot k promˇenn´ym a pro kaˇzdou variantu zkontroluje platnost formule a b´aze znalost´ı. Tento algoritmus je bezesporn´y, jelikoˇz je

(25)

zaloˇzen pˇr´ımo na definici logick´eho d˚usledku, a ´upln´y, protoˇze vˇzdy skonˇc´ı, model˚u je vˇzdy koneˇcn´y poˇcet.

V´yrokov´a logika je pro mnoho ´uloh pouˇziteln´a, n´ıcm´enˇe nen´ı optim´aln´ı pro prostˇred´ı neomezen´e velikosti, protoˇze postr´ad´a v´yrazov´e schopnosti pro vyj´adˇren´ı ˇcasu, prostoru a vztah˚u mezi objekty. V takov´ych pˇr´ıpadech je vhodn´e vyuˇz´ıt logiku prvn´ıho ˇr´adu (logiku predik´atovou).

4.3 Predik´ atov´ a logika

4.3.1 Jazyk predik´atov´e logiky

V´yrazov´e prostˇredky v´yrokov´e logiky, jak jiˇz bylo ˇreˇceno, nejsou bohat´e natolik, aby s je- jich pomoc´ı bylo moˇzno vyj´adˇrit znalosti o komplexn´ıch prostˇred´ıch. Jazyk predik´atov´e logiky n´am vˇsak umoˇzˇnuje reprezentaci fakt˚u ve srozumitelnˇejˇs´ı a mnohdy pˇresnˇejˇs´ı podobˇe.

Narozd´ıl od modelu ve v´yrokov´e logice, kter´y je mnoˇzinou pravdivostn´ıch hodnot kaˇzd´eho v´yrokov´eho symbolu, obsahuje model predik´atov´e logiky objekty. Tyto objekty mohou m´ıt mezi sebou r˚uzn´e vztahy, nˇekter´e z tˇechto vztah˚u jsou funkcemi, takov´e, kde existuje pouze jedna

”hodnota“ pro dan´y

”vstup“. Tyto relace mezi objekty jsou vlastnˇe jen mnoˇziny n-tic objekt˚u, kter´e maj´ı mezi sebou nˇejak´y vztah. Z´akladn´ı sloˇzkou jazyka jsou symboly reprezentuj´ıc´ı objekty, vztahy a funkce. Tyto symboly jsou tedy rozdˇeleny na individuov´e konstanty, predik´atov´e a funkˇcn´ı symboly. Dalˇs´ı souˇc´ast´ı jazyka jsou termy, kaˇzd´y term je logick´y v´yraz pro urˇcit´y objekt. Kaˇzd´a individuov´a konstanta je tedy term, nicm´enˇe ne vˇzdy m´ame zvl´aˇstn´ı symbol pro kaˇzd´y objekt, a proto je term moˇzn´e vyj´adˇrit funkˇcn´ım sym- bolem n´asledovan´ym mnoˇzinou term˚u v z´avorce, coˇz jsou argumenty dan´e funkce. Narozd´ıl od procedur´aln´ıch programovac´ıch jazyk˚u, fuknˇcn´ı symbol neznamen´a ˇz´adn´e vol´an´ı pod- programu, kter´y pˇred´av´a n´avratovou hodnotu, je to pouze komplikovan´y n´azev pro objekt a umoˇzˇnuje n´am odvozovat fakta aniˇz bychom nˇejakou funkci definovali. Termy, kter´e od- kazuj´ı na objekty, a predik´atov´e symboly, kter´e znaˇc´ı relace, tvoˇr´ı atomick´e formule, vy- jadˇruj´ıc´ı fakta. Atomick´a formule je pravdiv´a v dan´em modelu, pokud relace, ke kter´e se vztahuje predik´atov´y symbol, obsahuje objekty, ke kter´ym se vztahuj´ı argumenty tohoto symbolu. Stejnˇe jako ve v´yrokov´e logice, sloˇzitˇejˇs´ı formule lze vytvoˇrit pomoc´ı logick´ych spojek (negace, konjunkce, disjunkce, implikace a ekvivalence). Abychom mohli vyjadˇrovat vlastnosti nejen jednotliv´ych objekt˚u, ale i kolekc´ı objekt˚u, potˇrebujeme kvantifik´atory. Uni- verz´aln´ı kvantifik´ator∀xuplatˇnuje dan´y v´yrok pro kaˇzd´y objekt v b´azi znalost´ı nahrazen´ım promˇenn´exve formuli za jednotliv´e objekty. Umoˇzn´ı tak vyj´adˇrit obecn´a fakta o prostˇred´ı, jako napˇr.∀x(medved(x)∧bily(x))⇒lednimedved(x). Podobnˇe tak lze pomoc´ı existenˇcn´ıho kvantifik´atoru∃xuˇcinit tvrzen´ı o nˇejak´em objektu aniˇz bychom jej jmenovali. Toto tvrzen´ı je pak pravdiv´e, pokud v dan´em modelu existuje alespoˇn jeden objekt, po jehoˇz pˇriˇrazen´ı do promˇenn´e x je formule kvantifik´atoru platn´a.

4.3.2 Odvozov´an´ı v predik´atov´e logice

Prvn´ı moˇznost´ı, jak vyhodnotit v´yraz predik´atov´e logiky, je pˇrev´est jej na v´yraz v´yrokov´e logiky. K tomu je zapotˇreb´ı pravidel pro odstranˇen´ı kvantifik´ator˚u a predik´atov´ych symbol˚u.

Univerz´aln´ı kvantifik´ator m˚uˇzeme odstranit tak, ˇze z dan´e formule substituc´ı voln´eho termu za promˇennou z´ısk´ame mnoˇzinu formul´ı logicky vypl´yvaj´ıch z kvanfitifikovan´e formule. Ex- istenˇcn´ı kvantifik´ator odstran´ıme nahrazen´ım promˇenn´e za symbol, kter´y se doposud v b´azi znalost´ı nevyskytuje. Posledn´ım rozd´ılem od formul´ı v´yrokov´e logiky jsou predik´atov´e sym-

(26)

boly, ty vˇsak m˚uˇzeme br´at jako obyˇcejn´e v´yrokov´e symboly. Nyn´ı jiˇz staˇc´ı nˇekter´a z metod pro ˇreˇsen´ı v´yraz˚u v´yrokov´e logiky.

Tento pˇr´ıstup je vˇsak neefektivn´ı, a proto jsou ˇcastˇeji pouˇz´ıv´ana pˇr´ımo pravidla pro odvozen´ı v´yraz˚u predik´atov´e logiky. Jedn´ım z nejd˚uleˇzitˇejˇs´ıch je unifikace, coˇz je vlastnˇe nalezen´ı a substituce term˚u za promˇenn´e. Vstupem algoritmu jsou dvˇe klauzule a ´ukolem je naj´ıt substituci takovou, aby po jej´ım proveden´ı byly klauzule shodn´e. Pokud je nen´ı moˇzn´e unifikovat, vrac´ı metoda pr´azdn´y v´ysledek.

Jednoduchou a ´uˇcinnou metodou jak ˇreˇsit v´yrazy predik´atov´e logiky je algoritmus forward-chaining. Tato metoda je schopna efektivnˇe vyhodnotit syst´em sloˇzen´y z Hornov´ych klauzul´ı, coˇz jsou disjunkce liter´al˚u, kter´e obsahuj´ı nejv´yˇse jeden pozitivn´ı liter´al. Tyto liter´aly mohou obsahovat promˇenn´e, v tom pˇr´ıpadˇe jsou povaˇzov´any za univerz´alnˇe kvan- tifikovn´e. Algoritmus pracuje na principu postupn´eho vytv´aˇren´ı nov´ych fakt˚u v b´azi znalost´ı. Nejprve proch´az´ı vˇsechny zn´am´a pravidla a pokud jsou jejich premisy splnˇeny, je pˇrid´an nov´y fakt, kter´y je v´ysledkem dan´eho pravidla. Takto se pokraˇcuje dokud nen´ı dotaz zodpovˇezen nebo dokud jiˇz nelze pˇridat nov´y fakt.

4.4 Implementace

4.4.1 Tˇr´ıdy a algoritmy v´yrokov´e logiky

Z´akladn´ı prvek v´yrokov´e logiky – b´aze znalost´ı, je zastoupen tˇr´ıdou KnowledgeBase. Ob- sahuje kolekci vˇet, kter´e jsou vkl´ad´any metodou tell:. Jelikoˇz jsou vˇety vkl´ad´any ve formˇe ˇretˇezc˚u, je tˇreba je zpracovat, aby byly pouˇziteln´e v implementovan´ych algoritmech. To prov´ad´ı lexik´aln´ı analyz´ator Lexer ve spojen´ı se syntaktick´ym analyz´atorem Parser. Pro v´yrokovou logiku se pouˇz´ıvaj´ı potomci tˇechto tˇr´ıdPELexer aPEParser. V´ystupem parseru je instance tˇr´ıdySentencenebo nˇekter´y z jej´ıch potomk˚u. Jsou toTrueSentence aFalseSen- tence pro vˇzdy pravdiv´e a vˇzdy nepravdiv´e formule, AtomicSentence pro atomick´e for- mule,UnarySentencepro un´arn´ı v´yrazy (negace) aBinarySentence pro reprezenci formul´ı s bin´arn´ım oper´atorem. V pˇr´ıpadˇeUnarySentenceaBinarySentencejsou jejich operandy opˇet instancemi nˇekter´e z potomk˚u Sentence a t´ımto zp˚usobem je sloˇzena jak´akoli komplexn´ı formule v´yrokov´e logiky. Abychom mohli b´azi znalost´ı vyuˇz´ıt pro z´ısk´av´an´ı fakt˚u, je im- plementov´ana metoda askWithTTEntails:, kter´a vyhodnot´ı zadan´y v´yraz pomoc´ı kontroly model˚u na z´akladˇe pravdivostn´ı tabulky. Samotn´y algoritmus implementuje tˇr´ıdaTTEntails a jej´ı rekurzivn´ı metoda ttCheckAll:querySentence:symList:model:, kter´a vytvoˇr´ı vˇsechny kombinace hodnot vˇsech symbol˚u b´aze znalost´ı a ty postupnˇe testuje, zda zadan´a formule je platn´a v modelu, ve kter´em je z´aroveˇn platn´a b´aze znalost´ı. Pˇr´ıklad vyhodnocen´ı formule v´yrokov´e logiky pomoc´ı t´eto metody lze spustit tˇr´ıdn´ı metodouLogicDemo ttEntailsDemo.

4.4.2 Tˇr´ıdy a algoritmy predik´atov´e logiky

Pro pˇrid´av´an´ı fakt˚u do b´aze znalost´ı predik´atov´e logiky DLKnowledgeBase metodou add:

je nejprve nutn´e nadefinovat symboly, kter´e se b´azi budou vyskytovat, prostˇrednictv´ım tˇr´ıdy FOLDomain a jejich metod addConstant:, addFunction: a addPredicate:. Kolekce tˇechto symbol˚u pak vyuˇz´ıv´a lexik´aln´ı analyz´ator FOLLexer pro spr´avn´e rozpozn´an´ı jed- notliv´ych token˚u, syntaktick´y analyz´ator FOLParser pak podle tˇechto token˚u zpracuje zadan´y v´yraz jako instanciFOLSentence nebo jej´ıho potomka. Stejnˇe jako ve v´yrokov´e log- ice, existuj´ı zde tˇr´ıdy pro jednotliv´e typy v´yraz˚u (nebo jejich ˇc´asti): FOLPredicate,FOL- NotSentence,FOLParanthizedSentence,FOLConnectedSentence,FOLQuantifiedSentence a

(27)

FOLTermEquality. Algoritmus pro vyhodnocen´ı v´yrazu dopˇredn´ym ˇretˇezen´ım je implemen- tov´an jako metodaforwardChain:na tˇr´ıdˇe b´aze znalost´ıDLKnowledgeBase, kter´a postupnˇe odvozuje nov´a fakta z jiˇz existuj´ıch pravidel a vyuˇz´ıv´a pomoci unifik´atoruUnifier. Pˇr´ıklady obsaˇzen´e v knize AIMA [1] je moˇzn´e spustit pomoc´ı tˇr´ıdn´ıch metodFOLDemo kingsDemo a FOLDemo weaponsDemo.

Odkazy

Související dokumenty

Co se t´ yˇ ce pˇ resnosti doporuˇ cen´ı algoritmu, spoˇ c´ıtala jsem RMSE stejnˇ e, jako jej poˇ c´ıtali ˇ reˇ sitel´ e Netflix Prize (porovn´ an´ı skuteˇ cn´ e a

Vazba mezi Anonymizaˇ cn´ı tˇ r´ıdou a Anonymizaˇ cn´ı funkc´ı bude tedy tak´ e potˇ reba odliˇ sit na z´ akladˇ e prostˇ red´ı, e kter´ em bude nastaven´ a, aby bylo

Na vstupu je matice soustavy, vektor prav´ e strany, poˇ c´ ateˇ cn´ı odhad, relativn´ı pˇ resnost tol a maxim´ aln´ı poˇ cet iterac´ı.. (b) Pomoc´ı t´ eto matice a

2 Jsou-li zad´ any poˇ c´ ateˇ cn´ı podm´ınky: nakonec urˇ c´ıme koeficienty line´ arn´ı kombinace fundament´ aln´ıho syst´

Ergodick´ y Markov˚ uv ˇ retˇ ezec m´ a jedin´ e stacion´ arn´ı rozdˇ elen´ı pravdˇ epodobnost´ı; k tomu konverguje pˇ ri libovoln´ em poˇ c´ ateˇ cn´ım

ˇ Retˇ ezce jsou ergodick´ e, maj´ı tedy jedin´ e stacion´ arn´ı rozdˇ elen´ı pravdˇ epodobnost´ı, ke kter´ emu konverguj´ı z libovoln´ eho poˇ c´ ateˇ cn´ıho stavu...

ˇ Retˇ ezce jsou ergodick´ e, maj´ı tedy jedin´ e stacion´ arn´ı rozdˇ elen´ı pravdˇ epodob- nost´ı, ke kter´ emu konverguj´ı z libovoln´ eho poˇ c´ ateˇ cn´ıho

Pro model z pˇ redchoz´ıho pˇ r´ıkladu vyberte z n´ asleduj´ıc´ıch moˇ znost´ı nej- pravdˇ epodobnˇ ejˇ s´ı pokraˇ cov´ an´ı z poˇ c´ ateˇ cn´ıho stavu