You are on page 1of 41

Algoritmi veštačke inteligencije

Kada gradimo AI sisteme, koristimo naše razumevanje konteksta i domena. Takođe


koristimo algoritme koji pronalaze obrasce u podacima i deluju na njih. Ne može se poreći da
svuda oko nas postoje predrasude prema osobi ili gru pi Ijudi, ne ograničavajući se na njihov pol,
rasu i veru. Mnoge od ovih pre-drasuda proizlaze iz ponašanja koja se pojavljuju u socijalnim
interakcijama, događajima u istoriji i kulturnim i političkim pogledima širom sveta. Ove pre-
drasude utiču na podatke koje prikupljamo. S obzirom da AI algoritmi rade sa ovi podacima,
problem je što će mašina „naučiti" ove predrasude. Iz tehničke perspektive, možemo savršeno da
osmislimo sistem, ali ljudi stupaju u inter akciju sa ovim sistemima, a naša je odgovornost da
umanjimo pristrasnost i predrasude što je više moguće. Algoritmi koje koristimo podjednako su
dobri onoliko koliko su dobri i podaci koji im se dodeljuju. Razumevanje podataka i konteksta u
kojem se oni koriste je prvi korak u borbi protiv pristrasnosti, a ovo razumevanje će vam pomoći
da dođete do boljih rešenja, jer ćete biti dobro upućeni u konkretnu problematiku. Obezbeđivanje
uravnoteženih podataka koji sadrže što manju moguću pristrasnost treba da rezultira boljim
rešenjima.
Našu privatnost skoro svakog sata svakog dana kompromitujemo našim inter- akcijama
sa, na primer, računarima, mobilnim telefonima i drugim uređajima. Prenosimo ogronme
količine podataka o sebi, neke ličnije od drugih. Kako se ti podaci obrađuju i čuvaju? Ove
činjenice bi trebalo da imamo na umu prilikom kreiranja rešenja. Ljudi bi trebalo da imaju izbor
koji podaci se prikupljaju, obrađuju i čuvaju, kako se koriste i ko im, potencijalno, može
pristupiti. Prema mom iskustvu, ljudi uglavnom prihvataju rešenja koja koriste njihove podatke
za poboljšanje proizvoda koje koriste i koji dodaju veću vrednost njihovim životima. Najvažnije
je da ljudi više prihvataju predložena rešenja kada im se daje izbor i kad se taj izbor poštuje.
Singularnost je ideja da kreiramo AI tako da bude generalno inteligentna, da je sposobna
da se sama poboljša i da proširi svoju inteligenciju do faze u kojoj postaje superinteligencija.
Primeri koda u ovoj knjizii su napisani korišćenjem pseudokoda da bi se čitalac usredsredio na
intuiciju i logičko razmišljanje koje stoji iza algoritama, kao i da se osigura da kod bude
dostupan svima, bez obzira na preferencije program- skog jezika. Pseudokod je neformalan način
da se opišu instrukcije u kodu. Namera nam je da kod bude čitljiviji i razumljiviji - u osnovi, više
prilagođen ljudima. Evo nekoliko primera u kojima se mogu videti osobine inteligencije:
Douglas Hofstadter je rekao: ,,AI je ono što još nije urađeno". U primerima koje smo
upravo pomenuli samovozeći automobil može izgledati inteligentno, budući da još uvek nije
usavršen. Slično tome, i računar koji sabira brojeve se mogao, pre nekog vremena, smatrati
inteligentnim, ali se to sada podrazumeva.
Zaključak je da je AI dvosmislen pojam koji različitim ljudima, industrijama i
disciplinama znači različito. Algoritmi u ovoj knjizi su klasifikovani kao AI algoritmi u prošlosti
ili sadašnjosti; da li omogućavaju određenu definiciju AI ili ne, zapravo nije važno. Važno je da
su korisni za rešavanje teških problema.

Podaci kao jezgro Al algoritama


Podaci su ulaz u algoritme koji rešavaju ozbiljne zadatke. Pogrešan izbor podataka, slabo
predstavljeni podaci ili podaci koji nedostaju algoritmi imaju loš učinak, pa je ishod jednako
dobar kao i pruženi podaci. Svet je ispu- njen podačima, a ti podaci postoje u oblicima koje ne
možemo ni da osetimo. Podaci mogu predstavljati vrednosti koje se mere numerički, poput
trenutne temperature na Arktiku, broja riba u ribnjaku ili vaše trenutne starosti u danima. Svi ovi
prime- ri uključuju snimanje tačnih numeričkih vrednosti na osnovu činjenica. Ove podat ke je

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.

Problemi sa pretragom: Pronađite put do rešenja


Problem pretrage podrazumeva situaciju u kojoj ima više mogućih rešenja, od kojih svako
predstavlja niz koraka (putanja) ka cilju. Neka rešenja sadrže podskupove putanja koji se
preklapaju; neka su bolja od drugih; a neka su jeftinija za realizaciju od drugih. Bolje rešenje je
određeno konkretnim problemom koji je u pitanju; jeftinije rešenje znači da je računski jeftinije
za izvršavanje. Primer je određivanje najkraće putanje između gradova na mapi. Mogu biti
dostupne mnoge rute, sa različitim udaljenostima i uslovima u saobraćaju, ali su neki pravci bolji
od drugih.
Problemi sa optimizacijom: Pronađite dobro rešenje
Problem optimizacije podrazumeva situaciju u kojoj postoji ogroman broj valid nih rešenja, a
apsolutno najbolje rešenje je teško naći. Problemi sa optimizacijom obično imaju ogroman broj
mogućnosti, od kojih se svaka razlikuje po tome koliko dobro rešava problem. Primer je
pakovanje prtljaga u prtljažnik automobila na takav način da se maksimalno iskoristi prostor.
Dostupne su mnoge kombinacije, a ako je prtljažnik efikasno spakovan, u njega može da stane
više prtljaga.

Lokalno najbolje nasuprot globalno najboljem rešenju


Budući da problemi sa optimizacijom imaju mnogo rešenja, a s obzirom da ova rešenja postoje u
različitim tačkama prostora za pretragu,„na scenu"stupaju koncepti lokalno nojbolji i globalno
najbolji. Lokalno najbolje rešenje je najbolje rešenje u određenoj oblasti u prostoru za pretragu, a
4
globalno najbolje je najbolje rešenje u čitavom prostoru za pretragu. Obično postoji mnogo
najboljih lokalnih rešenja i jedno globalno najbolje rešenje. Razmislite, na primer, o potrazi za
najboljim restoranom. Možda ćete pronaći najbolji restoran u vašem lokalnom području, ali to
možda nije najbolji restoran u zemlji ili najbolji restoran na svetu.

Problemi sa predviđanjem i klasifikacijom: učiti iz obrazaca u podacima

Problemi sa predviđanjem su problemi u kojima imamo podatke o nečemu i želimo da


pokušamo da pronađemo obrasce u njima. Na primer, možda imamo podatke o različitim
vozilima i zapreminama njihovih motora, kao i o potrošnji goriva svakog vozila. Možemo li
predvideti potrošnju goriva novog modela vozila na osnovu zapremine njegovog motora? Ako
postoji povezanost između podataka o zapremini motora i potrošnje goriva, ovo predviđanje je
moguće.
Problemi sa klasifikacijom slični su problemima sa predviđanjem, ali, umesto da
pokušavamo da pronađemo tačno predviđanje, kao što je potrošnja goriva, pokušavamo da
nađemo kategoriju nečega, zasnovanu na osobinama tog nečega s obzirom na dimenzije vozila,
zapreminu motora i broj sedišta. Tako možemo predvideti da li je to vozilo motocikl, limuzina
ili sportski automobil? Problemi klasifikacije zahtevaju pronalaženje obrazaca u podacima koje
grupišu primere u kategorije. Interpolacija 1 je važan koncept prilikom pronalaženja obrazaca u
podacima, jer nove tačke podataka procenjujemo na osnovu poznatih podataka.

Problemi klastera: Identifikujte obrasce u podacima


Problemi klastera obuhvataju scenarije u kojima se, iz podataka, otkrivaju trendovi i
odnosi. Za grupisanje primera na različite načine koriste se različiti aspekti poda- taka. Na
primer, imajući u vidu podatke o troškovima i lokaciji restorana, možemo otkriti da mlađi ljudi
često posećuju mesta gde je hrana jeftinija.
Klasterisanje ima za cilj pronalaženje relacija u podacima, čak i kada nije postavlje-no
precizno pitanje. Ovaj pristup je takođe koristan za bolje razumevanje podataka da biste se
informisali šta biste mogli da uradite sa njima.

Deterministički modeli: isti rezultat svaki put kada se izračunava algoritam


Deterministički modeli su modeli koji, s obzirom na određeni ulaz, daju dosledan izlaz.
Na primer, zavisno od doba dana, kao što je podne u određenom gradu, uvek možemo očekivati
da će biti dnevnog svetla, a u ponoć uvek možemo očekivati mrak. Očigledno je da ovaj
jednostavan primer ne uzima u obzir neobično trajanje dnevnog svetla u blizini polova planete
(polarni dan i polarna noć).
Stohastički / probabilistički modeli: Potsncijalno drugačiji rezultat svaki put kada
se izračuna
Probabilistički modeli su modeli koji, s obzirom na određeni ulaz, vraćaju rezultat iz skupa
mogućih ishoda. Oni obično imaju element kontrolisane slučajnosti koji doprinosi mogućem
skupu ishoda. Zavisno od doba dana, u podne, na primer, možemo očekivati da vreme bude
sunčano, oblačno ili kišovito; u ovom trenutku- nema fiksnog vremena.

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.

Algoritmi mašinskog učenja


Mašinsko učenje usvaja statistički pristup modelima obuke za učenje iz podataka. Pod
„kišobranom" mašinskog učenja postoji niz algoritama koji se mogu iskoristiti za poboljšanje
razumevanja relacija u podacima, donošenje odluka i predviđanja na osnovu tih podataka.
U mašinskom učenju postoje tri glavna pristupa:

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.

Algoritmi dubokog učenja


Duboko učenje, koje proizilazi iz mašinskog učenja, predstavlja širu porodicu pristupa i
algoritama koji se koriste za postizanje ograničene inteligencije i težnju ka opštoj inteligenciji.
Duboko učenje obično podrazumeva da se pristupom poku šava rešiti problem na opštiji način,
poput prostornog rasuđivanja, ili se primenjuje na probleme koji zahtevaju više generalizacije,
kao što su računarski vid i prepoznavanje govora. Opšte probleme ljudi dobro rešavaju. Na
primer, vizuelne obrasce možemo podudarati u skoro bilo kojem kontekstu. Duboko učenje se
takođe bavi nadgledanim učenjem, nenedgledanim učenjem i učenjem uslovljavanjem. Pristupi
dubokog učenja obično koriste mnogo slojeva veštačkih neuronskih mreža. Korišćenjem
različitih slojeva inteligentnih komponenata svaki sloj rešava specijalizovane probleme; svi
zajedno, slojevi rešavaju složene probleme prema višem cilju. Identifikovanje nekog objekta na
slici, na primer, je opšti problem, ali se taj problem može raložiti na razumevanje boje,
prepoznavanje oblika objekta i utvrđivanje odnosa između objekata, da bi bio ostvaren cilj.

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.

Poljoprivreda: Optimalan rast biljaka


Jedna od najvažnijih privrednih grana koja održava ljudski život je poljoprivreda.
Moramo da ekonomično uzgajamo kvalitetne useve za masovnu potrošnju. Mnogi
poljoprivrednici uzgajaju useve u komercijalnim razmerama da bi nam omogućili povoljnu
kupovinu voća i povrća u prodavnicama. Usevi rastu različito, što zavisi, između ostalog, od
vrste useva, hranljivih sastojaka u zemljištu, sadržaja vode u tlu, bakterija u vodi i vremenskih
prilika na području gde se gaje. Cilj je da se u sezoni uzgoji što više visokokvalitetnih proizvoda,
jer određeni usevi uglavnom dobro rastu samo tokom određenih godišnja doba.

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). 

Bankarstvo: Otkrivanje prevara


Potreba za bankarstvom postala je očigledna kada su ljudi morali da nađu zajed- ničku,
konzistentnu valutu za trgovinu različitim proizvodima i uslugama. Banke su se tokom godina
menjale kako bi ponudile različite mogućnosti deponovanja novca, ulaganja novca i plaćanja.
Tokom vremena pojedini ljudi pronalaze kreativne načine da prevare sistem. Jedan od najvećih
problema - ne samo u bankarstvu, već i u većini finansijskih institucija, kao, na primer, kod
osiguravajućih društava, je prevara. Prevara se dešava kada neko nečastan učini nešto
protivzakonito da bi stekao neku korist za sebe. Prevara se obično dešava kada postoje „rupe" u
procesu koje se eksploatišu ili prevara zavara nekoga pri obelodanjivanju informacija. Budući da
je industrija finansijskih usluga u velikoj meri povezana putem interneta i ličnih uređaja, više
transakcija se dešava elektronskim putem preko računarske mreže, nego lično, pomoću fizičkog
novca. Uz ogromne količine dostupnih podataka o transakcijama, možemo, u realnom vremenu,
pronaći obrasce transakcija specifične za ponašanje pojedinca u potrošnji, koji mogu biti
neobični. Ovi podaci pomažu finansijskim institucijama da uštede ogroman novac i da zaštite
klijente koji ništa ne sumnjaju da ne budu opljačkani.

Sajber sigurnost: Otkrivanje napada i upravljanje njima


Jedna od zanimljivih nuspojava buma Interneta je sajber sigurnost. Pomoću Interneta šaljemo i
primamo osetljive informacije - direktne poruke u realnom vremenu, detalje o kreditnoj kartici,

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.

Logistika: Usmeravanje i optimizacija


Logistička industrija je ogromno tržište različitih tipova vozila koja dostavljaju različite tipove
robe na različite lokacije, sa različitim zahtevima i rokovima. Zamislite složenost u planiranju
isporuke kod velike veb lokacije za etrgovinu. Bilo da se isporučuje roba za široku potrošnju,
građevinska oprema, delovi za mašine ili gorivo, sistem treba da bude optimalan koliko god je
moguče da bi se osiguralo da se zadovolji potražnja i da se troškovi svedu na minimum.
Možda ste čuli za problem trgovačkog putnika (Traveling Salesperson Problem, TSP):
2
prodavac mora da poseti nekoliko lokacija da bi završio posao, a cilj je da se pronađe najkraća
udaljenost za izvršavanje ovog zadatka. Logistički problemi su slični, ali su, obično, izuzetno
složeni zbog promenljivog okruženja stvamog sveta. Posredstvom AI možemo da pronađemo
optimalne rute između lokacija u pogledu vremena i udaljenosti. Dalje, možemo da pronađemo
najbolje rute zasnovane na obrascima saobraćaja, građevinskim blokadama, pa čak i na tipovima
puta, zasnovanim na vozilu koje se koristi. Pored toga, možemo da lzracunamo najbolji način
pakovanja za svako vozilo i šta treba spakovati u svako vozilo na takav način da je svaka
isporuka optimizovana.

Telekom: Optimizacija mreža

Telekomunikaciona industrija je odigrala ogromnu ulogu u povezivanju sveta. Kompanije iz te


industrije postavljaju skupu infrastrukturu kablova, tornjeva i satelita da bi kreirale mrežu koju
mnogi potrošači i organizacije mogu koristiti za komunikaciju putem Interneta ili privatnih
mreža. Rukovanje ovom opremom je skupo, pa optimizacija mreže omogućava više veza, što
većem broju ljudi omogućava pristup brzim vezama. AI se može koristiti za nadgledanje
ponašanja na mre-ži i za optimizaciju usmeravanja. Pored toga, ove mreže beleže zahteve i
odgovore; prikupljeni podaci se mogu koristiti za optimizovanje mreže na osnovu poznatog
opterećenja određenih pojedinaca, područja i specifičnih lokalnih mreža. Podaci mreže takođe
mogu biti od ključne važnosti za razumevanje gde se nalaze ljudi i čime se bave, što je korisno
za urbano planiranje.

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.

Cena računanja: razlog za pametne algoritme


U programiranju se funkcije sastoje od operacija, a zahvaljujući načinu na koji rade tradicionalni
računari, za obradu različitih funkcija koristi se različita količina vremena. Što je potrebno više
računanja, funkcija je skuplja. Notacija veliko O se koristi za opisivanje složenosti funkcije ili
algoritma. Ta notacija modelira broj potrebnih operacija kada se poveća veličina ulaza. Evo
nekoliko primera povezanih složenosti:
• Jedna operacija koja ispisuje Hello World - Ova je samo jedna operacija, pa je cena
računanja 0(1).
• Funkcija koja prolazi kroz listu i štampa svaku stavkusa liste - broj operacija zavisi od
broja stavki na listi. Trošak je O(n).
• Funkcija koja upoređuje svaku stavku na listi sa svakom stavkom na drugoj listi - Ova

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.

Problemi koji se rešavaju primenom algoritma za pretragu


Skoro svaki problem koji zahteva niz odluka može se rešiti koriščenjem algoritama za pretragu.
U zavisnosti od problema i veličine prostora za pretragu, mogu biti upotrebljeni različiti
algoritmi koji mogu da pomognu pri njegovom rešavanju. U zavisnosti od izabranog algoritma
za pretragu i korišćene konfiguracije, može se nači optimalno rešenje ili najbolje dostupno
rešenje. Drugim rečima, naći će se dobro rešenje, koje, možda, i ne mora da bude najbolje. Kada
govorimo o dobrom ili optimalnom rešenju, mislimo na performanse rešenja u rešavanju
trenutnog problema.
Jedan od scenarija u kojem su algoritmi pretrage korisni je zaglavljivanje u lavirintu i
pokušaj pronalaska najkraćeg puta do cilja. Pretpostavimo da smo u kvadratnom lavirintu čija je
površina 10 blokova sa 10 blokova. Postoji cilj koji želimo da postignemo i prepreke u koje ne
možemo zakoračiti. Svrha je da pronađemo put do cilja, izbegavajući prepreke, sa što manje
koraka, pomerajući se ka severu, jugu, istoku ili zapadu. U ovom primeru igrač se ne može
pomerati dijagonalno.

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.

Predstavljanje stanja: Kreiranje okvira za predstavljanje prostora problema i rešenja


Kada predstavljamo podatke i informacije onako kako računar može da ih razume, mi ih moramo
logički kodirati tako da se mogu objektivno razumeti. Iako če podatke kodirati subjektivno osoba
koja izvršava zadatak, trebalo bi da postoji koncizan i dosledan način njihovog predstavljanja.
Razjasnimo razliku između podataka i informacija. Podaci su neobrađene činjenice o
nečemu, a informacija je tumačenje tih činjenica koja pruža uvid u te podatke u određenom
domenU. Informacije zahtevaju kontekst i obradu podataka kako bi se dobilo značenje. Na
primer, svaka pojedinačna pređena udaljenost u primeru lavirinta je podatak, a ukupno pređeni
put je informacija. U zavisnosti od perspektive, nivoa detalja i željenog ishoda, klasifikacija
nečega kao što su podaci ili informacije može biti subjektivna u odnosu na kontekst i osobu ili
tim.

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.

Slika 2.11 Prikazivanje grafa kao niza nizova


Ostali prikazi grafikona uključuju matricu incidencije, matricu povezanosti (susedstva) i listu
povezanosti. Uvidom u nazive ovih prikaza videćete da je susedstvo čvorova u grafu važno.

20
Susedni čvor je direktno povezan sa drugim čvorom.

Stablo: Konkretne konstrukcije koje su korišćene za predstavljanje rešenja za pretragu


Stablo je model predstavljanja podataka koji simulira hijerarhiju vrednosti ili objekata.
Hijerarhija je raspored stvari u kojima je jedan objekat povezan sa nekoliko drugih objekata
ispod njega. Stablo je povezani aciklički graf- svaki čvor ima granu ka drugom čvoru i ne postoji
cikličko ponavljanje.
Vrednost ili objekat predstavljen u određenoj tački u drvetu naziva se čvor. Stabla,
tipično, imaju jedan korenski čvor sa nula ili više čvorova „dece", koji mogu sadržati podstabla.
Kada je čvor povezan sa drugim čvorovima, korenski čvor se naziva „roditelj". Ovo razmišljanje
možete primeniti rekurzivno. Čvor „dete" može da ima svoje podređene čvorove, koji takođe
mogu sadržati podstabla. Svaki podređeni čvor ima jčdan „roditeljski" čvor. Čvor bez„dece" je
čvor „list“.
Stabla takođe imaju ukupnu visinu. Nivo specifičnih čvorova naziva se dubina.
Terminologija koja se koristi za relacije između članova porodice u velikoj meri se koristi
u radu sa stablima. Na slikama se visina i dubina indeksiraju od 0 od korenskog čvora.

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.

Neinformisana pretraga: Slepo traženje rešenja


Neinformisana pretraga je poznata i kao nevođena pretraga, slepa pretraga ili pretraga
grubom silom. Algoritmi za neinformisanu pretragu nemaju dodatne informacije o domenu
problema, osim prikaza problema, koji je, kao i obično, stablo.
Razmislite o istraživanju onoga što želite da naučite. Neki ljudi mogu da sagledaju široki spcktar
različitih tcma i da nauče osnove svake od njih, dok drugi ljudi mogu da odaberu jednu usku
temu i detaljno da istraže njene podteme.
Ovo je ono što podrazumeva pretraga u širinu (Breadth-First Search - BFS), odnosno
pretraga u dubinu (Depth-First Search - DFS). Pretraga (prvo) u dubinu istražuje određenu
putanju od početka (korena stabla), dok ne pronađe cilj na krajnjoj dubini. Pretra ga (prvo) u
širinu istražuje sve opcije na određenoj dubini, od proizvoljnog zadatog čvora, pre nego što pređe
na opcije koje su dublje, tj. u nižim redovima, u stablu.
Razmotrite scenario lavirinta. U pokušaju pronalaženja optimalnog puta do cilja
pretpostavite sledeće jednostavno ograničenje da biste sprečili zaglavljivanje u beskrajnoj petlji i
pojavu cikličkog ponavljanja u našem drvetu: igrač se ne može pomeriti u blok koji je prethodno
zauzimao. Budući da neinformisani algoritmi za pretragu pokušavaju da pretraže sve moguće
opcije na svakom čvoru, kreiranje cikličkog ponavljanja če prouzrokovati katastrofalni neuspeh
algoritma. Stoga se u algoritmu sprečava ciklično ponavljanje.

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.

Da vidimo kako bi to izgledalo na jednostavnom stablu. Dok se stablo istražuje, a čvorovi se


dodaju u FIFO red za čekanje, čvorovi se obrađuju u željenom redosledu korišćenjem reda za
čekanje.

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.

Tok algoritma za pretragu dubine:


1. Dodajte korenski čvor na stek. 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). Prvi korak je dodavanje korenskog čvora
na stek.
2. Da li je stek prazan? Ako je stek prazan i nije vraćena putanja u koraku 8 algoritma, nema
putanje do cilja. Ako u steku i dalje postoje čvorovi, algoritam može nastaviti pretragu da bi
pronašao cilj.
3. Vratiti „nema putanje do cilja“. Ovaj odgovor je jedini mogući izlaz iz algoritma, ako ne
postoji putanja do cilja.
4. Ukloni čvor iz steka kao trenutni čvor. Izvlačenjem sledećeg objekta iz steka i njegovim
postavljanjem kao trenutnog čvora od interesa možemo istražiti njegove mogućnosti.
5. Da li je trenutni čvor posećen? Ako trenutni čvor nije posećen, nije još istražen i može se
sada obraditi.

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

REZIME OSNOVA PRETRAŽIVANJA


Strukture podataka su važne za rešavanje problema.
Algoritmi za pretragu su korisni pri planiranju i pronalaženju rešenja u nekim promenljivim
okruženjima.

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

You might also like