PB016 Úvod do umělé inteligence
01. 20.09.2013
Poznámky od Maki
Organisace¶
Co je UMI?¶
- systém, který se chová jako člověk
- Turingův test
- rozšířený TT - zahrnuje pohyb s předměty na hrací ploše (schopnost robotické manipulace a počítačového vidění)
- systém, který se chová rozumně vzhledem k nějakému účelu - inteligentní agent
- jedná samostatně - sám si zjišťuje data
Prolog¶
- vymezení proti stávajícím logickým systémům (výroková logika, predikátová logika, …)
- deklarativní - říká, jaká je logika programu, ne jak se to má provést (implementaci si řeší každý interpret sám)
- nedefinuje uživatelské napojení, grafický výpis apod. → řeší interprety Prologu, ale každý to interpretuje jinak
- spouštění programu - ptáme se přímo v programu výzvou ?-
- odpovědi formou True a False + případné přidané dotazy na Proměnné
- ; znamená OR (vypisování dalších možných odpovědí)
Unifikace¶
- proces substituce proměnných a faktů
- jdou na sebe napasovat na sebe dvě Proměnné, jedna je volná proměnná a druhá konstanta, nebo jsou obě volné Proměnné
- značí se =
- princip jediného přirazení
- když se volná proměnná zunifikuje, nejde to znovu
Backtracking¶
- metoda prohledávání stavového prostoru (stromu řešení) a nalezení některých nebo všech řešení - jakmile narazí na větev, která nemůže být platným řešením, vrací se k nejbližšímu minulému bodu, odkud lze pokračovat na jiné řešení
- vyhodnocování dotazu - stromové procházení, když se najde slepý konec, vrátí se zpátky k nebližší „odbočce“
Rekurze¶
- opakované volání funkce, fce volá sama sebe
- logika: cíl je dokázán, unifikuje-li se s hlavou nějaké klauzule; když všechny podcíle v těle této klauzule → také dokázány
- strategie výběru podcíle - shora dolů, zleva doprava
- nahrazuje všechny způsoby, kterými se dělá cyklus, podmínka (neexistuje žádný if, while, …)
- syntax ve slidech
Konec poznámek od Maki
je_auto(X) :- ma_motor(X), ma_ctyri_kola(X).
# X je auto pokud X ma motor a zaroven X ma ctyri kola.
- "je_auto" - jméno vztahu
- "X" - argumenty vztahu
Klauzule¶
- seznam literálů
- definuje vztah mezi termy
- literály před :- jsou hlava, zbytek tělo (
hlava :- telo1, telo2
)
- klauzule je implikace: tělo → hlava (
if true(telo1 && telo2 && …) then hlava is True
)
- fakt: hlava bez těla
otec(X, Y).
- vždy pravdivé (definice)
- pravidlo: hlava i tělo
je_auto(X) :- ma_motor(X).
- pravdivé, pokud splněny podmínky
- cíl: tělo bez hlavy
Term¶
- základní datový typ Prologu
- dělí se na
- atom - obecný string bez inherentního významu ("auto"); musí začínat malým písmenem; odpovídá syntakticky složenému termu
- string
- symbol (třeba funktor)
- prázdný seznam
- číslo
- proměnná - začíná velkým písmenem
- složený term - skládá se z funktoru a argumentů: funktor(argument1, argument2, …)
- počet argumentů: arita; značí se číslem za lomítkem: funktor/arita
- atom je složený term bez arity
- např.
persons_relations(mrakoplas,[babi,starenka_ogg,margata]) # example absurdity intended
- predikát - klauzule se stejným funktorem a stejnou aritou v hlavovém literálu (před ":-")
- literál: atom (prostě string)
02. 27.09.2013 12:06:10
Datove struktury¶
Seznam¶
- vsechny operace nad seznamem jsou rekursivni
- zapisuje se v [], interne s teckou
- Hlava - 1. prvek seznamu, Telo - zbytek seznamu
- [first,second,third] = [A|B] → A = first, B = [second,third]
- struktura na ukladani nejakych veci v danem poradi (nemusi byt homogenni, …)
- seznam konci prazdnym seznamem jako konstantou (kdesi hluboko zanoreny v tom seznamu)
- http://www.doc.gold.ac.uk/~mas02gw/prolog_tutorial/prologpages/lists.html
Operace nad seznamy¶
Vyhledani¶
member(+Prvek,+Seznam)
- vrati true, kdyz prvek je v seznam
- znaky + se do kodu nepisou - plus znamena, ze to je mineno jako vstupni argument, minus je mineny jako vystupni
- ukonceni rekurse (podminka, ze jsme nasli prvek)
- ze seznamu umime vytahnout jen 1. prvek - hlavu
member(X,[_|T]) :- member[X,T] # do volne promenne se unifikuje 1. prvek seznamu, kdyz je unifikovatelny → TRUE
Mazani, pridavani¶
- predikaty del a insert
del(+A, +L, -Vysl)
- dva vstupni argumenty, jeden vystupni, seznam vraci v jine promenne nez ho dostal (nelze prepisovat promenne)
del1(+A,+L,-Vysl)
- smaze jeden a vrati seznam bez toho prvku, kdyz je jich vic, dotaze se na dalsi mazani
- nedeterministický, smaže jakýkoliv jeden výskyt daného prvku
- insert vklada postupne na vsechny posice seznamu, insert1 vlozi jednou na začátek seznamu
Permutace¶
- postupné vrácení všech uspořádání prvků tak, že se v něm vyskytuje jen jednou
- nezáleží na pořadí (u variací ano)
- pomoci insertu:
- rozdeli se na hlavu zbytek, hlava se vklada na dalsi mista
perm1([],[])
perm1([H|T],L):-perm1(T,V), insert(H,V,L)
?- perm1([1,2,3],L)
L = [1,2,3] ;
L = [2,1,3] ;
...
- L permutací [H|T] - do permutace těla seznamu se vkládají postupně hlavy původního seznamu…
- pak to jde jeste deletem a appendem:
Spojování seznamu a seznamu¶
append(?seznam1,?seznam2,?seznam)
- cokoliv muze byt vstupni nebo vystupni
- pokud je misto jednoho seznamu na vstupu prazdna promenna → odecitani senzamu
- vícesměrný
- s appendem lze delat skoro cokoliv
- linearni casova narocnost zavisla na delce prvniho seznamu (musi se jim probublat na konec)
- da se resit ukladanim ukazatele na konec seznamu
- platí:
append([a,b],[c,d],[a,b,c,d])
- neplatí:
append([a,b],[d,c],[a,b,c,d])
a append([a,[b]],[c,d],[a,b,c,d])
- pokud 1. argument prázdný seznam → 2., 3. arg. stejné seznamy
- pokud 1. arg. neprázdný seznam → 3. arg. má stejnou hlavu jako 1.
Umí to udělat doplněk:
?- append(X,[ab],[abcd])
X = [cd]
Jde s tím dělat cokoliv:
member(X,Ys) :− append(As,[X|Xs],Ys).
last (X,Xs) :− append(As,[X],Xs).
prefix (Xs,Ys) :− append(Xs,As,Ys).
suffix (Xs,Ys) :− append(As,Xs,Ys).
sublist (Xs,AsXsBs) :− append(AsXs,Bs,AsXsBs), append(As,Xs,AsXs).
adjacent(X,Y,Zs) :− append(As,[X,Y|Ys],Zs).
Difference lists¶
- rozdílové seznamy - na konci seznamu je prázdný seznam, který slouží jako ukazatel na ten konec…
- append_dl - append s rozdílovými seznamy
4. 04.10.2013 12:28:36
Binární stromy¶
Uspořádané binární stromy¶
- orientovaný graf s jedním kořenem
- z kořene existuje cesta do všech vrcholů grafu - spojitý
- každý vrchol kromě kořenu (uzel) má 1 předka a 2 syny
- u uspořádaného stromu jsou přímí potomci seřazeni
Representace bin. stromu:
t(L,root,R)
/ | \
levý kořen pravý podstrom
addleaf¶
addleaf(+T,+X,-T)
6
/ \
2 8
/ \
1 4
delleaf¶
- pokud je odebíraná hodnota v listu, nahradí se nil, když je v kořenu, je nutno podstrom přestavet tak, že se mazaný kořen nahradí jinym prvkem z podstromu tak, aby zůstal seřazený (když je uspořádaný)… ale jak, to nevím…
Vícesměrné add / del¶
add(?T,+X,?Vysl)
- stejný kód lze použít na přidávání i odebírání
- postup kódu:
- pokud je vstupní strom prázdný, přidá se X jako kořen (nil-X-nil)
- jinak otestuje velikostní poměr ke stávajícímu kořeni
- if větší, přidá se na na jednu stranu (nil-X-tstrom)
- else, na druhou (strom-X-nil)
- nemusí být nil, může tam být stávající zbytek struktury stromu, na kterou se to X napojí… asi
- definice větší/menší je na uživateli
Representace grafů¶
- predikát graph(V,E), kde V jsou vertexy(vrcholy) a E jsou hrany
- orientovaný graf:
graph([a,b,c,d],[e(a,b),e(b,d),e(b,c),e(c,d)])
- orientovaný ohodnocený graf
vgraph([a,b,c,d],[e(a,b,2),e(b,d,1),e(b,c,5),e(c,d,3)])
4. xxx
Prohledavani stavoveho prostoru¶
- stavový prostor - co všechno se musí prohledávat
- musí být statický, deterministický, diskrétní
- pocatecni stav - v cem zaciname (init(State))
- cil - test, zda jsme dosahli, ceho chceme (goal(State))
- prechodove akce - vycisleni, do ceho vseho (do jakych stavu) se krokem muzeme dostat (move(State,NewState))
Prohledávací strategie¶
- při prohledávání se řeší (uchovává?):
- root
- uzel prohledávaného stromu
- state
- parent nod
- přechodová akce
- hloubka uzlu
- cena
- g(n) cesty
- c(x,a,y) přechodu
- řešení
Neinformované prohledávání¶
- do hloubky,
- do hloubky s limitem
- do šířky
- podle ceny
- postupným prohlubováním
- neexistuje informace o posici cíle
Do hloubky¶
- prohledává se nejlevnější nejhlubší neexpandovaný nejhlubší uzel
- na nekonečné větvy neskončí (řeší se limitem)
- postup:
- pokud se dosáhlo cíle, vrátí se cesta k cíli
- pokud cíl v hlavě cesty, vrátí se cesta s hlavou
- pokud se lze pohnout z uzlu na dalsi_uzel (prostě else větev) && dalsi_uzel není obsažen v cestě, zavolá se znova tento postup, teď pro dalsi_uzel, cestu a v niz je puvodni uzel
Do hloubky s limitem¶
- přidává limit kvůli nekonečným větvím
- při rekursivním volání se vždycky hodnota limitu, jež se předává, dekrementuje
- pokud vrátí
fail
, má to 2 interpretace: nenalezeno / vyčerpán limit
Do šířky¶
- udržuje si seznam cest k jednotlivým větvím
- největší problém je prostorová náročnost
- vhodný pro rovnoměrně ohodnocené grafy
Podle ceny¶
- fronta uzlů uspořádaná podle ceny
- C* - cena optimálního řešení
Do hloubky s postupným prohlubováním¶
- Iterative Deepening Search
- prohledává do hloubky, po dosažení limitu v jedné větvy jde na další, pak zvýší limit a jede dál
- nejvhodnější neinformovaná strategie pro neznámou hloubku a velký prostor
Informovane prohledavani¶
- fce dostava odhad posice cile - heurestika
Heuristické hledání nejlepší cesty (best-first search)¶
- ohodnocovací fce f(n) vrací přínos uzlu
- seznam uzlů seřazených podle hodnoty f(n)
- heuristická fce h(n) - čím menší, tím blíž k cíli
- hladové BFS - f(n) = h(n)
- expanduje uzel, který se zdá být nejblíž k cíli
- slepě věří heuristice
h1() a h2() - různé heur. fce
h*() - skutečná vzdálenost do cíle (že by většinou h1 + h2?)
Algoritmus A*¶
- kombinuje odhad vzdálenosti (ceny) do cíle a ujetou vzdálenost (cenu) mezi výchozím uzlem a současným uzlem
- přípustná heur. - odhad vždycky menší než libovolná možná cena do cíle (?)
- if délka řešení == d → exponenciální časová složitost
- exponenc. prostorová složitost - uchovává každý uzel v paměti (protože heuristika)
Hledání heuristiky¶
- relaxovaný problém - má méně omezení než původní problém → řešení je jednodušší
- řešení relaxované verze problému = optimální řešení původního problému
- cena optimálního řešení relax. problému = přípustná heuristika pův. problému
- viz posunovačka: vyhodí se pravidlo buď pole spolu musí sousedit nebo cílové pole musí být prázdné nebo obojí
Složitosti algoritmů¶
b - faktor větvení
d - hloubka cíle
m - maximální hloubka větve/délka cesty
- úplnost - najde řešení, pokud existuje (nezasekne se v nekonečné větvi třeba)
- optimálnost - najde nejlepší řešení
- časová složitost - kolik času potřebuje algoritmus na dokončení
- paměťová/prostorová náročnost - kolik paměti zabere
Vlastnost | DFS | DFS limit | BFS | Dle ceny | IDS | Greedy BFS1 | A* |
úplnost | ne | ano (pro l >= d) | ano *6 | ano *7 | ano *6 | obecně ne2 | ano5 |
optimálnost | ne | ne | ano *8 | ano * | ano * | ne | ano |
časová složitost | O(bm) | O(bl) | O(bd+1) | O(b1+(C*/e)) | O(bd) | O(bm)3 | O((b*)d) |
prostorová složitost | O(b*m) | O(b*l) | O(bd+1) | O(b1+(C*/e)) | O(b*d) | O(bm)4 | O((b*)d) |
1: best-first search
2: nekonečný prostor, cykly
3: záleží na h
4: každý uzel v paměti
5: pokud počet uzlů s f < C* != inf
6: pro konečné b
7: pro cena >= e
8: není optimální pro obecné ceny cest
Quicksort¶
qsort(+L,-Vysl)
- postup:
- rozdělí seznam L na hlavu a tělo
- rozdělí seznam na dva seznamy, v jednom prvky menší nez hlava L, v druhém větší
- na každý z těch dvou zavolá qsort()
- ve chvíli, kdy qsort() dostane prázdné seznamy, provede řez → zahodí všechna alternativní řešení
- složí seřazené seznamy pomocí append()
- řez - vestavěný predikát, používá se tam, kde má predikát mít jen jedno řešení - zakazuje se backtracking
- qsort_dl() - efektivnější varianta s rozdílovými listy
AND/OR grafy¶
- AND uzel - vyžaduje, aby byly při řešení projity všechny jeho poduzly
- OR uzel - klasický uzel v grafu - lze z něj jít jednou z cest
Representace¶
a −−−> or:[b,c].
b −−−> and:[d,e].
c −−−> and:[f,g].
e −−−> or:[h].
f −−−> and:[h,i].
goal(d ).
goal(g ).
goal(h ).
Strom řešení¶
P = problem; G = graf; T = řešení
- P je kořen T.
- if P je OR uzel v G → právě jedna větev (následník) bude v T.
- if P je AND uzel v G → všechny větve budou v T.
- každý list T je řešením.
Heurestické hledání v AND/OR grafu¶
- doplnění ceny přechodové hrany (míra složitosti podproblému)
- cena uzlu = cena optimálního řešení jeho podstromu
Uzel −−−> AndOr:[NaslUzel1/Cena1, NaslUzel2/Cena2, …, NaslUzelN/CenaN].
Prohledávání AND/OR grafů¶
- list - leaf(N,F,C)
- N: id uzlu
- F: heur. hodnota uzlu N
- C: cena hrany do uzlu N
Predikáty¶
http://www.cse.unsw.edu.au/~billw/prologdict.html
assert/1
- přidává v průběhu běhu programu fakta/pravidla do database
- asserta() přidává na začátek DB, assertz() na konec DB
append/3
append(?seznam1,?seznam2,?seznam)
- cokoliv muze byt vstupni nebo vystupni
bagof/3
bagof(+Template, +Goal, -Bag)
- přidává do seznamu Bag objektů Template, které odpovídají podmínce Goal
?- bagof(Person, likes(Person, pizza), Bag)
- podobné jako setof/3
cut (!, řez)
- zamezuje nechtěnému backtrackingu → nevypíší se alternativní řešení
member/2
(+X,+L)
- true pokud X je v listu L
op/3
- op(+Precedence, +Type, :Name)
- definuje, jak funguje nějaký (třeba custom) operátor
- "+" bývá infixové: 5+4, ale může být exfixový(?): +(5,4)
- lze si definovat vlastní operátory
- :Name je číslo operátoru
-
Comparison | Definition | Evaluates? |
X = Y | succeeds if X and Y unify (match) in the Prolog sense | No |
X \= Y | succeeds if X and Y do not unify; i.e. if not (X = Y) | No |
T1 == T2 | succeeds if terms T1 and T2 are identical; e.g. names of variables have to be the same | No |
T1 \== T2 | succeeds if terms T1 and T2 are not identical | No |
E1 =:= E2 | succeeds if values of expressions E1 and E2 are equal | Yes |
E1 =\= E2 | succeeds if values of expressions E1 and E2 are not equal | Yes |
E1 < E2 | succeeds if numeric value of expression E1 is < numeric value of E2 | Yes |
E1 =< E2 | succeeds if numeric value of expression E1 is ≤ numeric value of E2 | Yes |
E1 > E2 | succeeds if numeric value of expression E1 is > numeric value of E2 | Yes |
E1 >= E2 | succeeds if numeric value of expression E1 is ≤ numeric value of E2 | Yes |
T1 @< T2 | succeeds if T1 is alphabetically < T2 | No |
T1 @=< T2 | succeeds if T1 is alphabetically ≤ T2 | No |
T1 @> T2 | succeeds if T1 is alphabetically > T2 | No |
T1 @>= T2 | succeeds if T1 is alphabetically ≥ T2 | No |
006
Constraint Satisfaction Problems¶
- problémy s omezujícími podmínkami
- máme set nějakých proměnných, set hodnot, které jim chceme přiřadit a set omezení, jak mohou být hodnoty proměnným přiřazeny
- konsistentní přiřazení = neporušuje omezení
- úplné přiřazení = všechny prom. mají hodnotu
- např. vybarvování (přiřazování hodnot) grafu (mapy) tak, aby žádné dva sousední uzly (země) neměly stejnou barvu (hodnotu)
- používá se representace grafem - hrany = omezení
- zde binární omezení (Prom1 != Prom2
- může být i unární Prom1 != hodnotaxy či naopak vyššího řádu
- preferenční omezení ("bagr je lepší nez traktor")
- representuje se cenou (třeba)
- hodnoty musí být diskrétní, množina proměnných konečná
- pro číselné lineární problémy řešitelné, pro č. nelineární ne obecně (??)
CLP - Constraint Logic Programming¶
% Promennym X, Y se prirazuji hodnoty z range 1,5 a 2,8. Soucet se nesmi rovnat prom. T.
X in 1..5, Y in 2..8, X+Y #= T.
X in 1..5,
Y in 2..8,
T in 3..13. % T se priradi hodnota z range 3,13.
CSP → inkrementální formulace¶
- každé CSP lze převést na std prohledávání (??)
- whatever, viz slide 12 v 006
Řešení CSP¶
- CSP se řeší prohledáváním, užívá se do hloubky → rekurse
- backtracking (rekurse) - prochází proměnné, každé přiřadí hodnotu (ze setu možností) a zkontroluje, jestli se neporušila omezení.
- když porušila, zkusí přiřadit další hodnotu
- když neporušila, provede se rekurse - zavolá se na další nenaplňenou proměnnou
- metody ovlivnění efektivity:
- nejomezenější proměnná - ta, která může mít nejmíň hodnot
- nejvíc omezující prom. - ta, co infliktuje nejvíc omezení na ostatní
- nejméně omez. prom. - ~ nejméně omezení na ostatní
- dopředná kontrola (look-ahead) - předvídání efektu dané hodnoty
- propagace omezení - ??
007
Hry¶
Typy her¶
- deterministické
- nedeterministické
- s perfektními znalostmi
- s nepřesnými znalostmi
Minimax¶
- dva hráči, MIN a MAX
- zjevně konvenční pojmenování, že jeden hodnotí to minusu a druhý do plusu
- hra má nějaké přechodové stavy a koncové, nějaké legální pohyby
- tahy na prázdné pole (piškvorky) jsou rovnocenné z okamžiku tahy - všechny mohou vést k výhře a všechny nemusí
- v alg. minimax se zjišťuje, který z možných tahů je nějak nejvýhodnější a může vést k výhře - nutno se dívat dopředu
- předpokladá se, že MIN (protihráč) bude vždy táhnout tak, aby maximalisoval svuj prospěch (neudělá chybu)
- postupně se ohodnocují jednotlivé tahy (1, 0, -1 v nejjednodušším případě) podle toho, jestli vedou k výhře nebo ne
Vlastnosti minimaxu¶
- úplný pro konečné stromy
- optimální proti optimálnímu oponentu
- časová slož.: O(bm)
- prostorová s.: O(bm)
Alfa-beta prořezávání (Alpha-Beta Pruning)¶
- snaží se zmenšit množství prohledávaných stromů v alg. minimax
- když se nějaký tah ukáže být horší než předchozí (jiný), už není třeba jej dál prohledávat, protože existuje lepší cesta
- alfa a beta jsou hodnocení prospěšnosti tahů pro jednotlivé hráče (když tedy alfa je pro nějaký tah menší než beta → špatný tah (z hlediska alfy))
- není vázáno na minimax
- výsledek stejný jako u minimaxu
- dobré uspořádání tahů zvýši efektivitu
- při nejlepším usp. časová složitost O(bm/2)
- → zdvojí hloubku prohledávání (takže predikce tahů třeba do 8. úrovně)
Ohodnocovací fce¶
Eval(s) = w
1f
1(s) + w
2f
2(s) + … + w
nf
n(s) = summ[i=1,n]:w
if
i(s)
Nedeterministické hry¶
- míchání karet, hod kostkou
- expect_minimax - příhlíží k náhodě, jinak stejný
- alfa-beta prořezávání lze použít
- čím vyšší hloubka, tím menší pravděp. dosažení zvoleného uzlu (hledání ztrácí smysl) + neefektivní ořezávání
008
Logické agenty¶
- využívá znalosti
- knowledge base (base znalostí) - KB
- inference (knowledge reasoning - vyvozování znalostí)
- při prohledávání stav. prostoru má program k disposici jen přechodové fce, cílový test apod.
- log. agent má naopak znalosti v obecné formě a umí je kombinovat → flexibilní (může řešit nové úkoly, učit se nové věci, modifikovat své znalosti)
- agent musí umět:
- přijímat nfo
- aktualisovat svůj popis světa
- provádět/representovat kroky (akce)
- vyvozovat implicitní (skryté) nfo o světě
- vyvozovat z informací vlastní kroky
Návrh¶
- znalostní hledisko
- zná svět, pravidla atd a cíl (typ. automatické taxi)
- implementační hledisko
- typ struktur v KB a manipulační procedury/algoritmy
- komponenty log. agenta
- inferenční stroj (nezávislý na doméně (světě), takový CPU)
- KB (info o doméně)
- na počátku znalosti nějakého pozadí, postupně se doplňují o nově nalezené nfo (tell())
- množina vět v jazyce representace znalostí
- akce log. agenta:
- vnímej větu
- zapiš výsledek pozorování do KB
- zjisti, co budeš dělat dál (takže asi se zeptej svého inferenčního stroje (??))
- informace o akci se přidá do KB (why?)
- opakuj do zblbnutí
Wumpusova jeskyně¶
- místnosti - jámy, wumpus, zlato - okolní místnosti mají nějaké projevy (vánek, zápach, …)
- cíl je zlato a neumřít, jáma a wumpus = smrt
- lze chodit, otáčet se, použít jeden šíp a zvednout/položit zlato
- jednotlivé kroky jsou hodnoceny - smrt -1k, zlato +1k, krok -1, šíp -10
- agent musí vyvozovat své akce z pozorování např. toho, že cítí zápach (→ wumpus, kde) apod.
Vlastnosti Wumpusovy jeskyně¶
- pozorovatelné: ne, lokální vnímání
- deterministické: ano
- episodické: ne
- statické: ano, wumpus + jámy se nehýbou
- diskrétní: ano
- více agentů: ne, wumpus je prostředí
Logika - syntax a sémantika¶
- syntax = pravidla správného utvoření vět
- sémantika = významy vět, z toho se vyvozují informace o světě
- model: možný, abstraktní svět
- bezespornost - produkuje vyplývající věty pouze na základě KB
- úplnost - produkuje všechny vyplývající věty z KB
Důkazové metody¶
- kontrola modelů
- kontrola všech modelů do hloubky - bezesporná, úplná
- aplikace inferenčních pravidel
- dopředné, zpětné řetězení: whatever…
009
výroková logika¶
- svět definuje fakty
- je deklarativní (syntax ~ fakta)
- komposiční (konjukce faktů přímo odvozená od jejich samostatných významů - NL (přir. jazyk) je kontextový)
- umí pracovat s negovanými vyrazy a tak…
- má malou expresivitu (narozdil od NL)
Predikátová logika 1. řádu (FOPL)¶
- svět se skládá z
- pravdivostní výroky vypadají jako cypoviny v prologu:
- predikat(term1, term2, …) - když jsou termy v relaci definované predikátem → True
- inference v FOPL - zobecněný modus ponens s unifikací + dopředné/zpětné řetězení (upravené)
- nejsou pozorovatelné vnitřní stavy (drzim(zlato)) → nutno uchovávat
- expresivita omezena - "cervena barva neco" × "neco je cervene" - ty dve cervene nejdou srovnavat (individuum "cervena barva" × vlastnost "cerveny")
- intense - závisí na světě a čase (hlavní město polska)
- extense - nezávisí ~ (Varšava)
TIL - Transparent intensional logic¶
- základní objekty, funkce, vyšší typy
- objekty: T/F, individua (ale nějak divně), čas, možné světy
Možný svět¶
- soubor konsistentních, myslitelných faktů, objektivní (nezávislý na názoru)
- znalost aktuálního světa == vševědoucnost
$date 010
- sémentické sítě
- dědičnost (→ prvky, podtřídy)
- rámce
- sém. sítě, akorát místo grafů rámce a tak
- OOP
- pravidlové systémy
- mají spoustu podmínek if (neco) then (akce)
- bayesovská síť - acyklický graf, uzly mají tabulky (podmíněných) pravděpodobností rodičů; vyvozování nejistých událostí
- skolemizace (10)
- co je C*? - cena optimalniho reseni
- algebrogram - 6:11
- vyjadrovaci sila neuronove site (ot. #01)
- proc je extensionalismus omezujici rys PL1
- heuristika - jak to actually zjistim?
- minimax - proc je to min a max?
- dopredne,zpetne retezeni
1. E
2. ?
3. C
a: !false AND (false OR true) → true AND true → true
b: !true OR (true => (true OR false)) → false OR (true => true) → true
c: true AND (false <=> true) AND (true <=> false) → true AND false AND false → false
-log2(0.05)*0.05-log2(0.19)*0.19-log2(0.12)*0.12-log2(0.23)*0.23-log2(0.08)*0.08-log2(0.33)*0.33 = 2.34
4.32*0.05+3.64*0.08+3.06*0.12+2.4*0.19+2.12*0.23+1.6*0.33 = 2.34