Professional Documents
Culture Documents
1
teško pogrešno protumačiti. Temperatura na određenom mestu u određenom trenutku je
apsolutno tačna i ne podleže nikakvoj pristrasnosti. Ovaj tip podataka je poznat pod nazivom
kvantitativni podaci.
Podaci takođe mogu predstavljati vrednosti zapažanja, poput mirisa cveta ili neči jeg nivoa
saglasnosti sa politikom političara. Ovaj tip podataka je poznat kao kvalitativni podatci; ponekad
ih je teško protumačiti, jer oni ne predstavljaju apsolutnu istinu, več shvatanje nečije istine. Na
slici 1.1 ilustrovani su neki primeri kvantita tivnih i kvalitativnih podataka oko nas.
SLAJD 4
Podaci su jednostavne neobrađene činjenice koje imaju neko značenje, pa njihovo beleženje
obično ne sadrži pristrasnost. U stvarnom svetu, međutim, podatke priku pljaju ljudi, beleže ih i
povezuju na osnovu određenog konteksta, uz određeno razumevanje načina na koji se podaci
mogu koristiti. Čin konstruisanja smislenih uvida za odgovore na pitanja zasnovana na podacima
stvara informacije. Dalje, čin korišćenja informacija sa iskustvima i njihova svesna primena
kreira znanje: To je delom ono što pokušava da se simulira pomoću algoritama.
Na slici 1.2 pokazano je kako se mogu tumačiti kvantitativni i kvalitativni podaci. Za merenje
kvantitativnih podataka se, obično, koriste standardizovani instrumenti, kao što su satovi,
kalkulatori i vage, dok se naša čula mirisa, zvuka, nkusa, dodira i vida, kao i naša mišljenja,
obično koriste za kreiranje kvalitativnih podataka.
Podatke, informacije i znanje različiti ljudi mogu različito tumačiti, na osnovu nivoa
njihovog razumevanja tog domena i njihovog pogleda na svet, a ova činjenica prouzrokuje
posledice na kvalitet rešenja čineći izuzetno važnim naučni aspekt kreira nja tehnologije. Prateći
ponovljive naučne procese sakupljanja podataka, izvođenja eksperimenata i tačnog izveštavanja
o nalazima, prilikom obrade podataka pomoću algoritama možemo osigurati tačnije rezultate i
bolja rešenja problema.
2
Sada imate labavu definiciju AI i razumete važnost podataka. Budući da ćemo u ovoj knjizi
istražiti nekoliko algoritama AI, korisno je da tačno razumete šta je algoritam. On je skup
instrukcija i pravila donetih kao specifikacija za postizanje određenog cilja. Algoritmi obično
prihvataju ulaze i, nakon nekoliko konačnih koraka, u kojima algoritam napreduje kroz promene
stanja, produkuje se izlaz.
Cak i nešto tako jednostavno kao što je čitanje knjige može se predstaviti kao algoritam. Evo
primera koraka za čitanje ove knjige:
1. Pronađite knjigu
2. Otvorite knjigu.
3. Dokle god još ima nepročitanih stranica,
a. pročitajte stranicu
b. okrenite sledeću stranicu
c. razmislite o onome što ste naučili
4. Razmislite kako svoja znanja možete da primenite u realnom svetu.
Algoritam se može posmatrati kao recept, kao što se vidi na slici 1.3. Uzimajući u obzir neke
sastojke i alate kao ulaze i instrukcije za pravljenje određenog jela, izlaz je obrok.
Algoritmi se koriste za mnoštvo različitih rešenja. Na primer, možemo da omogu ćimo uživo
video ćaskanje širom sveta pomoću algoritama kompresije, a možemo i da se krećemo po
gradovima preko aplikacija za mape koje koriste algoritme za usmeravanje u realnom vremenu.
Cak i jednostavni program „Zdravo, svete!" ima mnogo algoritama u igri za prevođenje čitljivog
programa - unesite jezik u mašin- ski kod i sledite uputstva koja se nalaze na hardveru. Ako
dovoljno dobro pogleda- te, možete posvuda pronaći algoritme.
Da bismo ilustrovali nešto bliže povezano sa algoritmima u ovoj knjizi, na slici 1.4 prikazan je
algoritam igre pogađanja brojeva koji je predstavljen kao dijagram toka. Kompjuter generiše
slučajni broj u određenom opsegu, a igrač pokušava da pogodi taj broj. Primetićete da algoritam
ima diskretne korake koji izvršavaju rad- nju ili određuju odluku pre prelaska na sledeću
operaciju.
3
Tipovi problema i načini rešavanja problema
AI algoritmi su moćni, ali nisu srebrni meci koji mogu rešiti svaki problem. A šta su problemi?
U ovom odeljku razmatramo različite tipove problema koje smo, uglavnom, iskusili u
računarstvu, pokazujuči kako možemo početi da stičemo intuiciju o njima. Ova intuicija nam
može pomoći da identifikujemo te probleme u stvarnom svetu i da nas usmeri na izbor
algoritama koji se koriste u rešavanju.
Za opisivanje problema u računarstvu i AI koristi se nekoliko termina. Problemi su klasifikovani
na osnovu konteksta i cilja.
1
U matematičkoj podoblasti numerička analiza, interpolacija je metod konstruisanja novih tački na grafikonu
unutar ranga diskretnog skupa poznatih tačaka na grafikonu. U gore navedenom ontekstu radi se o apstrakciji novih
podataka na osnovu podataka koji prethode ili slede podacima koje tražimo.
5
Algoritmi za pretragu
Algoritmi za pretragu su korisni za rešavanje problerna u kojima se zahteva nekoliko radnji da bi
se postigao cilj, kao što je pronalaženje puta kroz lavirint ili određivanje najboljeg poteza u igri.
Algoritmi za pretragu procenjuju buduća stanja i pokušavaju da pronađu optimalnu putanju do
najvrednijeg cilja. Obično imamo previše mogućih rešenja da bismo forsirali grubu silu za svako
od njih. Čak i mali prostori za pretragu mogu rezultirati hiljadama sati rada računara kako bi se
pro- našlo najbolje rešenje. Algoritmi za pretragu obezbeđuju pametne načine za proce- nu
prostora za pretragu. Oni se koriste u mrežnim pretraživačima, aplikacijama za traženje ruta na
mapama, pa čak i u agentima za igranje igarjc
Algoritmi inspirisani biologijom
Primeri algoritamskog ponašanja obuhvataju saradnju mrava u prikupljanju hrane, jato ptica
pri migraciji, procenu načina na koji funkcioniše mozak i evoluciju različitih organizama da bi se
stvorilo jače potomstvo. Posmatrajuči i učeći iz različitih pojava, stekli smo znanje kako deluju
ovi organski sistemi i kako jednostavna pravila mogu rezultirati inteligentnim ponašanjem u
nastajanju. Neki od ovih fenomena su inspirisali algoritme koji su korisni u AI, poput evoluci
onih algoritama i algoritama inteligencije roja.
Evolucioni algoritmi su inspirisani teorijom evolucije koju je definisao Charles Darvvin.
Koncept je da se populacija reprodukuje kako bi kreirala nove jedinke, a da kroz ovaj proces
mešavina gena i mutacija produkuje jedinke koje imaju bolje osobine od svojih predaka.
Inteligencija roja je grupa naizgled „glupih" pojedinaca koji pokazuju inteligentno ponašanje.
Optimizacija kolonijom mrava i optimizacija 'rojem čestica su dva popularna algoritma.
6
Nadgledano učenje podrazumeva modele treninga sa algoritmima gde podaci treninga
imaju poznate ishode na postavljeno pitanje, kao što je, na primer, određivanje tipa voća, ako
imamo skup podataka koji uključuje težinu, boju, teksturu i oznaku voća za svaki primer.
Nenadgledano učejije razotkriva skrivene relacije i strukture unutar podataka, koje nas
vode ka postavljanju relevantnih pitanja skupu podataka. Može da pronalazi obrasce u
svojstvima sličnog voća i grupiše ih u skladu sa tim, što može dati tačna pitanja koja želimo da
postavimo podacima. Ovi osnovni koncepti i algoritmi nam pomažu da u budućnosti napravimo
osnovu za istraživanje naprednih algoritama.
Učenje uslovljavanjem je inspirisano bihevioralnom psihologijom. Ukratko, opisuje
nagrađivanje pojedinca (ako je izvršena korisna radnja) ili kažnjavanje toga pojedinca (ako je
izvršena nepovoljna radnja). Primer kod ljudi bi mogao biti kada dete ostvari dobre rezultate, na
osnovu svog svedočanstva obično biva nagrađeno, ali loš učinak ponekad rezultira kaznom, što
uslovljava ponašanje za postizanje dobrih rezultata. Učenje uslovljavanjem je korisno za
istraživanje kako računarski programi ili roboti komuniciraju sa dinamičkim okruženjima.
Primer je robot koji ima zadatak da otvori vrata; kažnjava se kad ne otvori vrata, a dobije
nagradu kad ih otvori. Vremenom, posle mnogih pokušaja, robot „nauči" redosled radnji
potrebnih za otvaranje vrata.
Primena algoritama
Načini primene tehnika algoritmiranja su bezbrojni. Tamo gde postoje podaci i problemi
za rešavanje postoje potencijalne mogućnosti za primenu algoritama. Imajući u vidu okruženje
koje se stalno menja, razvoj interakcija među ljudima i promene u onome što ljudi i industrije
zahtevaju, AI se može primeniti, na inovativne načine, za rešavanje problema iz stvarnog sveta.
7
Poljoprivrednici i poljoprivredne organizacije godinama prikupljaju podatke o svojim
farmama i usevima. Imajući u vidu te podatke, možemo iskoristiti mašine za pronalaženje
obrazaca i relacija između promenljivih u procesu uzgoja useva i identifikovati faktore koji
najviše doprinose uspešnom rastu. Pored toga, koristeći moderne digitalne senzore, možemo
zabeležiti vremenske prilike, atribute tla, stanje vode i rast useva u realnom vremenu. Ovi
podaci, u kombinaciji sa inteligentnim algoritmima mogu, u realnom vremenu, omogućiti
preporuke i prilagođavanja za optimalan rast (slika 1.8).
8
e-adrese i druge važne poverljive informacije koje bi mogle biti zloupotrebljene ako bi dospele u
pogrešne ruke. Hiljade servera širom sveta primaju podatke, obrađuju ih i skladište. Napadači
pokušavaju da ugroze ove sisteme da bi dobili pristup podacima, uređajima ili, čak, objektima.
Korišćenjem AI možemo identifikovati i blokirati potencijalne napade na servere. Neke velike
internet kompanije čuvaju podatke kako određeni pojedinci komuniciraju sa njihovim servisom,
uključujuči ID-je njihovih uređaja, geolokacije i ponašanje prilikom korišćenja; kada se otkrije
neobično ponašanje, mere bezbednosti ograničavaju pristup. Neke internet kompanije takođe
mogu da blokiraju i preusmeravaju zlonamerni saobraćaj tokom napada distribuiranim
uskraćivanjem usluga (Distributed Denial-of-Service - DDoS), što uključuje preopterećenje
servisa lažnim zahtevima u pokušaju da se sruši servis ili spreči pristup autentičnih korisnika.
Ovi neautentični zahtevi se mogu identifikovati i preusmeriti kako bi se minimalizovao uticaj
napada razumevanjem kako korisnik koristi podatke, sisteme i mrežu.
2
Problem trgovačkog putnika je predstavik velike klase problema poznatih kao kombinatorni problemi ophmizacije.
U regularnom obliku TSP, mapa gradova je dodeljena prodavcu i on mora da poseti sve gradove samo jednom, kako
bi završio obilazak, tako da je dužina turneje, među svim mogućim putovanjima, najkraća za ovu mapu. S obzirom
na skup gradova i troškova putovanja između svakog mogućeg para, cilj je da se pronađe najbolji mogući način
posete svih gradovima i vraćanje na početnu tačku, s najmanjim mogućim troškovima putovanja.
9
Igre: Kreiranje Al agenata3
Otkako su kućni i lični računari prvi put postali široko dostupni, igre su bile predmet prodaje za
računarske sisteme. One su postale popularne veoma rano u istoriji personalnih računara. Ako se
vratimo unazad, možda ćete se setiti arkadnih mašina, televizijskih konzola i ličnih računara sa
igračkim mogućnostima. U igrama šah, bekgemon, ali i u drugim, dominirale su AI mašine. Ako
igra nije previše slo- žena, računar može, potencijalno, da pronađe sve mogućnosti i da na
osnovu tog znanja donese odluku, brže nego što to može čovek. Nedavno je računar uspeo da
pobedi čoveka šampiona u strateškoj igri Go. Igra Go ima jednostavna pravila za igranje i za
kontrolu teritorije, ali je izuzetno kompleksna u pogledu odluka koje treba doneti da bi se
ostvario pobednički scenario. Računar ne može da kreira sve mogućnosti za pobedu nad
najboljim igračima-ljudima, jer je prostor za pretragu preveliki; umesto toga, on zahteva opštiji
algoritam koji može apstraktno da ,,razmišlja”, da određuje strategiju i planira kretanje ka cilju.
Taj algoritam je već bio izmišljen i uspeo je da pobedi svetske šampione. Takođe je prilagođen
za druge aplikacije, poput igranja Atari igara i modernih igara za više igrača. Ovaj sistem se
naziva Alpha Go.
Nekoliko istraživačkih organizacija razvilo je AI sisteme koji su sposobni za igranje izuzetno
složenih igara, bolje od ljudskih igrača i timova. Cilj je da se kreiraju opšti pristupi koji se mogu
prilagoditi različitim kontekstima. Prema nominalnoj vrednosti, ovi AI algoritmi za igranje igara
mogu izgledati nevažni, ali je rezultat razvoja ovih sistema takav da se pristup može efikasno
primeniti na druge važne prostore problema. Na slici 1.10 ilustrovano je kako algoritam učenja
uslovljavanjem može da nauči da igra klasičnu video-igru, poput Super Marija.
3
Agenti su prirodna metafora za razumevanje i korišćenje inteligentnih sistema. Agent može biti bilo koji entitet
koji percepira okolinu putem senzora/receptora i deluje na nju kroz aktuatore. Agent se kreće u ciklusu opažanje-
razmišljanje-delovanje i to: ljudski agent (senzori: oči, uši i drugi organi koji rade kao senzori; aktuatori: šake, noge
i vokalni trakt); agent robot (senzori: kamere, infracrveni merač daljine, NLP za senzore; aktuator: razni motori);
softverski agent (senzori: pritisci na tastere, sadržaj datoteke kao senzorski ulaz i deluje na te ulaze i prikazuje izlaz
na ekranu). Otuda je svet oko nas prepun agenata poput termostata, senzora za požar, mobilnog telefona, kamere, a
čak smo i mi agenti u nekom kontekstu.
10
Algoritmi kao metod planiranja
Planovi se retko kada savršeno ostvaruju, onako kako smo zamislili na početku
poduhvata. Živimo u svetu u kome se okruženja neprestano menjaju, pa je nemoguće uračunati
sve promenljive i nepoznanice na tom putu. Bez obzira na plan čiju smo realizaciju započeli,
skoro uvek odstupamo od njega zbog promena u prostoru problema. Moramo da (ponovo)
napravimo novi plan, od naše trenutne tačke, pa dalje, ako se, nakon što preduzmemo više
koraka, dogode neočekivani obrti koji zahtevaju još jednu iteraciju planiranja da bi se ispunili
ciljevi. Kao rezultat, konač ni plan koji se sprovodi se obično razlikuje od originalnog.
Pretraga je način vođenja planiranja kreiranjem koraka u planu. Kada planiramo
putovanje, na primer, tražimo rute kojima treba da putujemo, procenjujemo usputna mjesta za
zaustavljanje i šta ona nude i ispitujemo mogućnosti smeštaja i aktivnosti koji su u skladu sa
našim željama i budžetom. U zavisnosti od rezultata ovih pretraga, plan se menja.
Pretpostavimo da smo se odlučili za putovanje na plažu koja je udaljena 500 kilometara, sa dva
zaustavljanja: jednim u malom zoološkom vrtu i jednirn u piceriji. Po dolasku ćemo spavati u
kućici blizu plaže i učestvovati u tri aktivnosti. Put do odredišta će trajati oko osam sati. Idemo
prečicom, privatnim putem, nakon picerije, ali je taj put otvoren sarno do 14 časova.
Započinjemo putovanje i sve ide po planu. Zaustavljamo se u zoološkom vrtu i vidimo
neke divne životinje. Vozimo se dalje i počinjemo da osećamo glad; vreme je za zaustavljanje u
restoranu. Na naše iznenađenje, restoran je nedavno prestao da radi. Moramo da prilagodimo
svoj plan i da pronađemo drugo mesto gde ćemo jesti, što uključuje potragu za nekim mestom
koje je blizu, prema našim željama, i prilagođavamo naš plan.
Nakon malo vožnje, pronalazimo restoran, uživamo u pici i vraćamo se na put. Pri-
11
bližavajući se prečici, privatnom putu, shvatamo da je 14:20 časova. Put je zatvoren- još jednom
moramo da prilagodimo svoj plan. Tražimo zaobilazni put i otkriva- mo da će nam to „dodati"
120 kilometara, pa ćemo morati da pronađemo smeštaj za noć u drugoj kućici pre nego što
uopšte stignemo na plažu. Tražimo mesto za spavanje i iscrtavamo našu novu rutu. Zbog
izgubljenog vremena, možemo da učestvujemo u samo dve aktivnosti na destinaciji. Plan je u
velikoj meri prilagođen potrazi za drugim opcijama koje zadovoljavaju svaku novu situaciju, ali
na kraju imamo veliku avanturu na putu do plaže.
Ovaj primer pokazuje kako se pretraga koristi za planiranje i kako utiče na planiranje
poželjnih ishoda. Kako se okruženje menja, naši ciljevi se mogu malo menjati, a naš put do njih
neizbežno treba prilagoditi (slika 2.2). Prilagođavanje planova se, skoro nikada, ne može
predvideti i treba ih praviti prema potrebi.
12
operacija košta O(n2).
Na slici 2.3 prikazani su različiti troškovi algoritama. Algoritmi za koje su potrebne
operacije koje istražuju kako se veličina ulaza povećava imaju najlošije rezultate; algoritmi koji
zahtevaju postojaniji broj operacija sa povećanjem broja ulaza su bolji.
Važno je da razumemo da različiti algoritmi imaju različite troškove računanjajer je rešavanje
ovoga osnovna namena inteligentnih algontama koji rešavaju probleme dobro i brzo. Teoretski,
skoro svaki problem možemo rešiti primenom grube sile nad svakom mogučom opcijom, dok ne
pronađemo najbolju, ali u stvarnosti, računanje može potrajati satima ili, čak, godinama, što ga
čini neizvodljivim za stvarne scenarije.
13
Kako možemo da pronađemo najkraći put do cilja, istovremeno izbegavajući prepreke? Možemo
da isprobamo svaku mogućnost i da izbrojimo poteze. Korišćenjem pokušaja i pogreška možemo
pronaći putanje koje su najkraće, s obzirom na to da je ovaj lavirint relativno mali.
Korišćenjem primera lavirinta prikazane su neke moguće putanje do cilja.
14
15
Primeri mogućih putanja u problemu sa lavirintom
Gledajući lavirint i brojeći blokove u različitim pravcima, možemo pronaći neko- liko rešenja
problema. Preduzeto je pet pokušaja da se od nepoznatog broja reše- nja pronađu četiri uspešna.
Biće potreban veliki napor za ručno izračunavanje svih mogućih rešenja:
® Pokušaj 1 nije validno rešenje. Bile su potrebne četiri akcije, a cilj nije pronađen.
• Pokušaj 2 je validno rešenje - preduzeto je 17 akcija za pronalaženje cilja.
• Pokušaj 3 je validno rešenje - preduzete su 23 akcije za pronalaženje cilja.
• Pokušaj 4 je validno rešenje - preduzeto je 17 akcija za pronalaženje cilja.
• Pokušaj 5 je najbolje validno rešenje - preduzeto je 15 akcija za pronalaženje cilja. Ovaj
pokušaj je najbolji, ali je rešenje slučajno pronađeno. Da je lavirint nmogo veći, bilo bi potrebno
ogromno vreme za ručno izračunavanje najbolje moguće putanje. Ovde nam mogu pomoći
algoritmi za pretragu. Naša moć je da vizuehio zapažamo problem, razumemo ga, pronalazimo
rešenay imajući na umu parametre. Kao Ijudi, fazumemo i tumačimo podatke i informacije na
apstraktan način. Računar još ne može da razume uopštene informacije u prirod nom obliku kako
to mi radimo. Programski prostor treba predstaviti u obliku koji je pnmenljiv za računanje i koji
se može obraditi pomoću algoritama za pretragu.
16
Strukture podataka
Strukture podataka su koncepti u računarstvu koji se koriste za predstavljanje podataka na
način koji je pogodan za efikasnu obradu algoritama. Struktura podataka je apstraktni tip
podataka koji se sastoji od podataka i operacija organizovanih na specifičan način.
Na strukturu podataka koju koristimo utiču kontekst problema i željeni cilj.
Primer strukture podataka je niz, koji je, jednostavno, skup podataka.
Različiti tipovi nizova imaju različita svojstva, koja ih čine efikasnim za različite namene.
U zavisnosti od programskog jezika koji se koristi, niz može da dozvoli da svaka vrednost bude
različitog tip ili da zahteva da svaka vrednost bude istog tipa, ili niz može onemogućiti duplirane
vrednosti.
Ovi različiti tipovi nizova obično imaju različite nazive. Karakteristike i ograničenja
različitih struktura podataka takođe omogućavaju efikasnije računanje.
Ostale strukture podataka su korisne u planiranju i pretraživanju. Stabla i grafovi su
idealni za predstavljanje podataka na način koji algoritmi za pretragu mogu da koriste
17
Grafikoni: Prikazivanje problema i rešenja pretrage
Grafikon je struktura podataka, koja sadrži nekolikojstanja sa vezama između njih. Svako
stanje na grafikonu naziva se čvor (a ponekad teme), a veza između dva stanja naziva se grana
(ili rub, ivica). Grafovi su izvedeni iz teorije grafova u matematici i koriste se za modeliranje
relacija između objekata. Oni su korisne strukture podataka koje su lako razumljive, zbog lakoće
njihovog vizuelnog predstavljanja, kao i zbog njihove jake logičke prirode, koja je idealna za
obradu pomoću različitih algoritama.
18
Grafikon putovanja do plaže o kojem se govori u prvom odeljku ovog poglavlja. Svako
zaustavljanje je čvor na grafikonu, svaka grana između čvorova predstavlja pređeni put između
tačaka, a težine na svakoj grani ukazuju na pređeni put.
19
Predstavljanje grafikona kao konkretne strukture podataka
Za efikasnu obradu pomoću algoritama grafikon se može predstaviti na nekoliko načina. U
osnovi, on može biti predstavljen nizom nizova koji ukazuju na veze između čvorova, kao što je
prikazano na slici. Ponekad je korisno imati drugi niz koji, jednostavno, navodi sve čvorove na
grafikonu, tako da ne treba da se iz relacija zaključuje o posebnim čvorovima.
20
Susedni čvor je direktno povezan sa drugim čvorom.
Najviši čvor u drvetu naziva se korenski čvor. Čvor koji je direktno povezan sa jednim ili više
drugih čvorova naziva se „roditeljski" čvor. Čvorovi povezani sa „roditeljskim" čvorom se
nazvaju podređeni čvorovi ili susedi. Čvorovi povezani sa istim „roditeljskim" čvorom nazivaju
se siblings. Veza između dva čvora naziva se grana. Putanja je niz čvorova i grana koje
povezuju čvorove koji nisu direktno spojeni. Čvor povezan sa drugim čvorom, koji prati putanju
od korenskog čvora, naziva se „potomak", a čvor povezan sa drugim čvorom, koji prati putanju
ka korenskom čvoru, naziva se „predak". Čvor bez „dece" naziva se čvor list. Termin stepen se
koristi za opis broja „dece" koju čvor ima; dakle, čvor lista ima stepen nula.
21
Na slici je predstavljeno rešenje problema lavirinta predstavljeno u obliku stabla. Stablo
predstavlja putanju od početne tačke do cilja za problem lavirinta. Ova putanja sadrži devet
čvorova koji predstavljaju različite pokrete napravljene u lavirintu.
Stablo je struktura podataka za algoritme pretraživanja koja će biti korišćena u nastavku
izlaganja.
22
Na slici su predstavljene sve moguće putanje na stablu da bi bile istaknute različite dostupne
opcije. Ovo stablo sadrži sedam putanja koje vode do cilja i jednu putanju koja rezultira
nevažećim rešenjem, s obzirom na ograničenje izbegavanja pomeranja u prethodno zauzete
blokove. Važno je shvatiti da je u ovom malom lavirintu izvodljivo predstavljanje svih
mogućnosti. Čitava poenta algoritama za pretragu je, međutim, da iterativno pretražuju ili da
generišu ova stabla, pošto je generisanje celokupnog stabla mogućnosti unapred neefikasno,
zbog toga što je računski skupo.
Takođe je važno napomenuti da se termin “poseta” koristi za označavanje različitih aktivnosti.
Igrač posečuje blokove u lavirintu. Algoritam takođe posećuje čvorove u stablu. Redosled izbora
će imati uticaj na redosled čvorova koji se posećuju u drvetu. Na primer, u lavirintu prioritetni
redosled kretanja je sever, jug, istok, a zatim zapad.
23
Pretraga u širinu:
Traženju u dubinu prethodi traženje u širinu.
Pretraga u širinu (Breadth-First Search - BFS) je algoritam koji se koristi za prelazak kroz stablo
ili generisanje stabla. Ovaj algoritam započinje na određenom čvoru, koji se naziva “root”, i
istražuje svaki čvor na toj dubini pre nego što pređe na istraživanje čvorova na sledećoj dubini. U
osnovi, posećuje svu „decu" čvorove na odre đenoj dubini pre nego što pređe na sledeću dubinu
„deteta", sve dok ne pronađe cilj - čvor “list”.
Algoritam za pretragu po širini je najbolje implementirati korišćenjem first-in, first- out (FIFO)
reda za čekanje, u kojem se obrađuju trenutne dubine čvorova, a njihova „deca" se postavljaju u
red čekanja da bi se kasnije obrađivala. Ovaj redosled obrade je upravo ono što zahtevamo
prilikom implementacije ovog algoritma.
Na slici je predstavljen dijagram toka na kojem je opisan redosled koraka obuhvaćenih
algoritmom pretrage u širinu.
24
Evo nekoliko napomena i dodatnih primedbi za svaki korak u procesu:
1. Postavite korenski čvor u red čekanja. Algoritam pretraživanja po širini je najbolje
implementirati pomoću reda čekanja. Objekti se obrađuju redosledom u kojem su dodati u red.
Ovaj proces je poznat i kao prvi ulaz, prvi izlaz (First In - First Out, FIFO). Prvi korak je
dodavanje korenskog čvora u red čekanja. Ovaj čvor će predstavljati početnu poziciju igrača na
mapi.
2. Označi korenski čvor kao posećen. Sada, kada je korenski čvor dodat u red čekanja radi
obrade, označava se kao posečen da bi se sprečilo da ponovo bude posećen zbog bilo kojeg
razloga.
3. Da li je red čekanja prazan ? Ako je red čekanja prazan (svi čvorovi su obrađeni nakon
mnogih iteracija) i ako u koraku 12 algoritma nije vraćena ni jedna putanja, ne postoji putanja do
cilja. Ako i dalje postoje čvorovi u redu čekanja, algoritam može da nastavi svoju potragu da bi
pronašao cilj.
4. Vrati Nema putanje do cilja. Ova poruka je jedini mogući izlaz iz algoritama ako ne
postoji putanja do cilja.
25
5. Ukloni iz reda čekanja ovaj čvor kao trenutni. Izvlačenjem sledećeg objekta iz reda
čekanja i njegovim postavljanjem kao trenutnog čvora od interesa možemo istražiti njegove
mogućnosti. Kada se algoritam pokrene, trenutni čvor će biti korenski.
6. Uzmite sledećeg suseda trenutnog čvora. Ovaj korak uključuje postojanje sledećeg
mogućeg poteza u lavirintu, iz trenutne pozicije, referencirajući lavirint i utvrđujući da li je
moguće kretanje ka severu, jugu, istoku ili zapadu.
7. Da lije susedposećivan? Ako trenutni sused nije posećivan, nije još istražen i može se
sada obraditi.
8. Označite suseda kao posećenog. Ovaj korak pokazuje da je ovaj susedni čvor bio
posećen.
9. Postavite trenutni čvor kao „roditelja" suseda. Postavite ishodišni čvor kao nadređen
trenutnom susedu. Ovaj korak je važan za praćenje putanje od trenutnog suseda do korenskog
čvora. Iz perspektive mape, ishodište je pozicija iz koje se igrač premestio, a trenutni sused je
pozicija na koju se igrač preselio.
10. Stavite suseda u red čekanja. Čvor suseda je stavljen u red za čekanje da bi kasnije bila
istražena njegova „deca". Ovaj mehanizam redova čekanja omogućava obradu čvorova sa svake
dubine u tom redosledu.
11.
Da lije cilj postignut? Ovaj korak određuje da li trenutni sused sadrži cilj koji algoritam traži.
12. Vrati putanju pomoću suseda. Referenciranjem „roditelja" susednog čvora, zatim
„roditelja" tog čvora i tako dalje biće opisana putanja do korena od cilja. Korenski čvor će biti
čvor bez „roditelja".
13. Trenutni čvor ima sledećeg suseda? Ako trenutni čvor ima još mogućih poteza u
lavirintu, pređite na korak 6 za taj potez.
26
27
28
U primeru lavirinta algoritam treba da razume trenutnu poziciju igrača u lavirintu, da
proceni sve moguće izbore za kretanje i da ponovi tu logiku za svaki izbor pokreta koji se
napravi dok se ne postigne cilj. Radeći ovo, algoritam generiše stablo koje sadrži jednu putanju
do cilja.
Važno je da se shvati da se procesi posećivanja čvorova u stablu kortiste za generisanje
čvorova u stablu. Jednostavno, kroz mehanizam pronalazimo povezane čvorove.
Svaka putanja do cilja se sastoji od niza poteza kako bi se postigao cilj. Broj poteza na
putanji je udaljenost do cilja za tu putanju, koji ćemo nazvati trošak. Broj poteza je takođe jednak
broju čvorova posećenih na putanji, od korenskog čvora, do čvora lista koji sadrži cilj. Algoritam
se kreće niz stablo, po dubini, dok ne pronađe cilj; zatim vraća prvu putanju, koja ga je dovela do
cilja, kao rešenje. Možda postoji optimalan put do cilja, ali, s obzirom da je pretraga u širinu
neinformisana, nije zagarantovano da ćete je pronaći.
U primeru lavirinta svi algoritmi za pretragu koji se koriste završavaju se kada pronađu
rešenje putanje do cilja. Ovim algoritmima je moguće dozvoliti da pronađu više rešenja, koristeći
mala podešavanja svakog algoritma pojedinačno, ali najbolji slučajevi upotrebe algoritama za
pretragu pronalaze jedan jedini cilj, budući da je često preskupo istraživati celo stablo
mogućnosti.
Na slici 2.19 je prikazano kreiranje stabla pomoću kretanja u lavirintu. S obzirom da se
stablo generiše pretragom po širini, svaka dubina se generiše do kraja, pre nego što se pogleda
sledeći nivo dubine (slika 2.20).
29
Pseudokod
Kao što je prethodno pomenuto, algoritam za pretragu po širini koristi red čekanja da bi
generisao stablo po dubini, nivo po nivo. Postojanje strukture koja čuva podatke o posečenim
čvorovima je presudno za sprečavanje zaglavljivanja u cikličnim petljama, a postavljanje
„roditelja" svakog čvora je važno za određiva nje putanje od početne tačke u lavirintu do cilja.
Pretraga u dubinu:
Tražiti duboko pre nego što potražiš široko
Pretraga u dubinu (Depth-First Search - DFS) je drugi algoritam koji se koristi za prolazak kroz
30
stabla ili generisanje čvorova i putanja na drvetu. Ovaj algoritam započinje na određenom čvoru,
istražuje putanje povezanih čvorova prvog „deteta", radeći to rekurzivno, sve dok ne stigne do
najudaljenijeg čvor lista, pre vraćanja unazad, i istražuje druge putanje do čvorova listova preko
drugih čvorova „dece" koji su posećeni. Algoritam za pretragu po dubini se može primeniti
korišćenjem steka u kome se prvo obrađuje poslednji dodati objekat. Ovaj proces je poznat kao
prvi unutra, zadnji napolje (Last In-First Out, LIFO). Važno je shvatiti da je redosled „dece"
suštinski važan kada se koristi pretraga po dubini, jer algoritam istražuje prvo „dete", sve dok ne
pronađe čvorove listove pre povratka unazad.
Na slici 2.21 ilustrovan je opšti tok algoritma za pretragu u dubinu.
31
6. Označite trenutni čvor kao posećen. Ovaj korak pokazuje da je ovaj čvor posećen da bi se
sprečilo nepotrebno ponavljanje njegove obrade.
7. Da lije cilj dostignut? Ovaj korak određuje da li trenutni sused sadrži cilj koji algoritam
traži.
8. Vrati putanju pomoću trenutnog čvora. Pomoću referenciranja „roditelja" trenutnog
čvora, zatim „roditelja" tog čvora i tako dalje opisuje se putanja od cilja do korena. Korenski
čvor biće čvor bez „roditelja".
9. Trenutni čvor ima sledećeg suseda? Ako trenutni čvor ima još neki mogući potez u
lavirintu, taj potez se može dodati u stek radi obrade. Inače, algoritam može da pređe na korak 2,
gde se može obraditi sledeći objekat u steku ako stek nije prazan. Priroda LIFO steka omogućava
algoritmu da obradi sve čvorove do dubine lista čvora pre povratka i posete drugoj „deci"
korenskog čvora.
10. Postavi trenutni čvor kao „roditelja" suseda. Postavi ishodišni čvor kao „roditelja"
trenutnog suseda. Ovaj korak je važan za praćenje putanje od trenutnog suseda do korenskog
čvora. Iz perspektive mape ishodište je pozicija sa koje se igrač premestio, a trenutni sused je
pozicija na koju se igrač premestio.
11. Dodajte suseda na stek. Čvor sused se dodaje na stek da bi njegova „deca" kasnije mogla
da budu istražena. Osim toga, ovaj mehanizam stekiranja omogućava obradu do čvorova najveće
dubine pre obrade suseda na malim dubinama.
Na slikama 2.22 i 2.23 prikazano je kako se koristi LIFO stek za posećivanje čvorova u
redosledu koji se traži pretragom po dubini. Primetićete da se čvorovi dodaju na stek i uklanjaju
sa njega dok napreduju dubine posećenih čvorova. Termin „push“ opisuje dodavanje objekata na
stek, a izraz „pop“ opisuje uklanjanje objekta sa vrha.
32
33
Važno je shvatiti da je redosled „dece" suštinski važan kada se koristi pretraga po dubini, jer
algoritam istražuje prvo „dete", sve dok ne pronađe čvorove listove pre povratka unazad.
34
35
Iako se algoritam za pretragu po dubini može primeniti sa rekurzivnom funkcijom, mi
razmatramo implementaciju koja se postiže stekom da bi bio bolje predstavljen redosled po
kojem se čvorovi posećuju i obrađuju. Važno je pratiti posećene tačke tako da se isti čvorovi ne
posećuju bez potrebe, stvarajući ciklične petlje:
36
Slučajevi upotrebe neinformisanih algoritama za pretragu
Neinformisani algoritmi za pretragu su svestrani i korisni u nekoliko slučajeva, kao što
su:
• pronalaženje putanja između čvorova u mreži - kada dva računara treba da komuniciraju
preko mreže, veza prolazi kroz mnoge povezane računare i uređaje. Algoritmi za pretragu se
mogu koristiti za uspostavljanje putanje u toj mreži između dva uređaja.
• pretraga veb stranica radi indeksiranja - pretraživanje Veba omogućava da pronađemo
informacije na Internetu pomoću ogromnog broja veb stranica.
Da bi indeksirali ove veb stranice, „mrežni pauci4" obično čitaju informacije na svakoj
stranici i prate rekurzivno svaki link na toj stranici. Algoritmi za pretragu su korisni za kreiranje
„pauka", struktura metapodataka i relacija između sadržaja.
• pronalaženje veza na društvenim mrežama - aplikacije za društvene medije sadrže
podatke o velikom broju ljudi i o njihovim odnosima. Bob je možda prijatelj sa Alice, na primer,
ali njih dvoje nisu direktni prijatelji sa Johnom, tako da su Bob i John indirektno povezani preko
Alice. Aplikacija na društvenim mrežama može predložiti da Bob i John postanu prijatelji, jer se
možda poznaju kroz međusobno prijateljstvo sa Alice.
4
Web Crawler, spider, bot mehanizma za pretragu ili web robot je softverska aplikacija koja je programirana za
automatizovano obavljanje određenih zadataka. Ova aplikacija skenira sadržaje web stranica, sakuplja sve linkove i
ključne reči na njima, a zatim posećuje sve web stranice na koje ukazuju linkovi na tim stranicama. Ova „ples" se
ponekad naziva „gmizanje po mreži". Na taj nacm počinje formiranje osnovne liste za pretragu velikih i malih
pretraživača interneta. [op.prev.j
37
Kategorije grafova
Grafikoni su korisni za mnoge probleme informatičke nauke i matematike, a zbog prirode
različitih vrsta grafikona, mogu se primeniti različiti principi i algoritmi za određene kategorije
grafikona. Graf se kategorizuje na osnovu njegove ukupne strukture, broja čvorova, broja grana i
međusobne povezanosti između čvorova.
Dobro je da se poznaju ove kategorije grafova, jer su uobičajene i na njih se, ponekad,
referenciramo u pretragama i u drugim algoritmima AI:
• neusmereni graf- Ni jedna grana nije usmerena. Relacije između dva
čvora su obostrane. Kao i kod puteva između gradova, putevi vode u
oba smera.
• usmereni graf(digraf) - Grane pokazuju smer. Relacije između dva
čvora su eksplicitne. Kao na grafikonu koji predstavlja „dete" nekog
„roditelja", „dete" ne može biti „roditelj" svog „roditelja".
• nepovezani graf- Jedan ili više čvorova nisu povezani nikakvim
granama. Kao na grafikonu koji predstavlja fizički kontakt između
kontinenata, neki čvorovi nisu povezani. Poput kontinenata, neki su
povezani kopnom, a drugi su odvojeni okeanima.
• aciklični graf- To je graf koji ne sadrži ciklička ponavljanja. Kao i kod
vremena, graf se nikad ne vraća u neku tačku u prošlosti (još uvek).
• kompletan graf- svaki čvor je povezan preko grane sa svakim drugim
čvorom. Kao u linijama komunikacije u malom timu, svi razgovaraju
sa svim ostalim članovima tima da bi sarađivali.
• kompletan dvodelni graf- particija temena je grupisanje temena. S
obzirom na teme particije, svaki čvor iz jedne particije je povezan sa
svakim čvorom druge particije pomoću grana.
• težinski graf- to je graf u kome grane između čvorova imaju težinu.
Korisno je razumeti različite tipove grafikona da bi na najbolji način bio opisan problem i
korišćen najefikasniji algoritam za obradu.
38
Alternativno predstavljanje grafova
U zavisnosti od konteksta i programskog jezika, druga kodiranja grafikona mogu biti
efikasnija za obradu ili lakša za rad, u zavisnosti od programskog jezika i alata koje koristite.
Matrica incidencije
Matrica incidencije koristi matricu u kojoj broj redova predstavlja broj čvorova u grafu, a
broj kolona je broj grana. Svaki red predstavlja relaciju čvora i određene grane. Ako čvor nije
povezan na određenu granu, čuva se vrednost 0. Ako je čvor povezan sa određenom granom, kao
prijemni čvor u slučaju usmerenog grafa, čuva se vrednost -1. Ako je čvor povezan sa
određenom granom kao odlazni čvor ili je povezan u neusmerenom grafu, čuva se vrednost 1.
Matrica incidencije se može koristiti za predstavljanje usmerenih i neusmerenih grafova (slika
2.27).
39
Lista susedstva
Lista susedstva koristi povezane liste u kojima veličinu inicijalne liste određuje broj čvorova u
grafu, a svaka vrednost predstavlja povezane čvorove za određeni čvor. Lista susedstva se može
koristiti za predstavljanje usmerenih i neusmerenih grafova (slika 2.28).
Grafovi su takođe zanimljive i korisne strukture podataka, jer mogu lako da se predstave kao
matematičke jednačine, koje predstavljaju podlogu za sve algoritme koje koristimo
SLAJD 49
Strukture podataka grafikona i stabla
40
Neinformisana pretraga je „slepa" i može, računski, biti skupa. Pomaže korišćcnje ispravnih
struktura podataka.
Pretraživanje u dubinu traži duboko pre nego što potraži u širinu. Pretraga u širinu traži široko
pre nego što potraži duboko.
41